ornladios / ADIOS2

Next generation of ADIOS developed in the Exascale Computing Program
https://adios2.readthedocs.io/en/latest/index.html
Apache License 2.0
268 stars 125 forks source link

bpls viewing all instances available for debugging #3462

Open jshafner opened 1 year ago

jshafner commented 1 year ago

I am attempting to debug an Adios issue where regions of a volume are offset by a step. I have a periodic boundary such that point j = 0 is the same as j = jmax.

When I use bpls file.bp -d variable -s "step, i, 0, k" and compare to bpls file.bp -d variable -s "step, i, jmax, k" the jmax data is perfectly offset by 1 step from the 0 data. However, 1000 numerical iterations occur between steps so it must be I/O related. I am trying to debug this.

To help debug the above, I tried to look at the scalar variable "Iteration" to see if perhaps I am not ending steps properly. When I do bpls file.bp Iteration -D I get step 0: #coresrun instances available Is there a way to list or inspect the various values of these instances? I could not find such way in the ReadTheDocs.

pnorbert commented 1 year ago

I am afraid there is no API to retrieve the individual values stored in the BP format for a Global Value. You can change Iteration to be a Local Value, so that it is listed as a 1D array with the size of the number of cores). See examples/basics/values/values_write.cpp.

        // 4. Local value, varying across processes, varying over time
        adios2::Variable<unsigned int> varNparts =
            io.DefineVariable<unsigned int>("Nparts", {adios2::LocalValueDim});

After you build adios2 from source, in the build directory:

$ mpirun -n 4 ./bin/values_write_mpi
$ ./bin/bpls -l values.bp/ -D Nparts
  uint32_t  Nparts     5*{4} = 5 / 10
        step 0:
          block 0: [0:0] = 6 / 6
          block 1: [1:1] = 10 / 10
          block 2: [2:2] = 5 / 5
          block 3: [3:3] = 10 / 10
        step 1:
          block 0: [0:0] = 9 / 9
          block 1: [1:1] = 6 / 6
          block 2: [2:2] = 10 / 10
          block 3: [3:3] = 7 / 7
        step 2:
          block 0: [0:0] = 8 / 8
          block 1: [1:1] = 7 / 7
          block 2: [2:2] = 6 / 6
          block 3: [3:3] = 7 / 7
        step 3:
          block 0: [0:0] = 6 / 6
          block 1: [1:1] = 7 / 7
          block 2: [2:2] = 7 / 7
          block 3: [3:3] = 5 / 5
        step 4:
          block 0: [0:0] = 10 / 10
          block 1: [1:1] = 5 / 5
          block 2: [2:2] = 7 / 7
          block 3: [3:3] = 10 / 10