What’s new in 2.8?

Important changes to the API

  • adios2::Mode::ReadRandomAccess mode is introduced for reading files with access to all steps. BeginStep/EndStep calls are NOT allowed. SetStepSelection() can be used to access specific steps in the file.

  • adios2::Mode::Read mode now requires using BeginStep/EndStep loop to access steps serially one by one. Variable inquiry fails outside BeginStep/EndStep sections. You need to modify your Open() statement to use the random-access mode if your code wants to access all steps in any order in an existing file.

  • adios2::ADIOS::EnterComputationBlock(), adios2::ADIOS::ExitComputationBlock() are hints to ADIOS that a process is in a computing (i.e. non-communicating) phase. BP5 asynchronous I/O operations can schedule writing during such phases to avoid interfering with the application’s own communication.

  • GPU-aware I/O supports passing device-memory data pointers to the ADIOS2 Put()/Get() functions, and ADIOS2 will automatically download/upload data from/to the device during I/O. Alternatively, an extra member function of the Variable class, SetMemorySpace(const adios2::MemorySpace mem) can explicitly tell ADIOS2 whether the pointer points to device memory or host memory.

New features

  • BP5 data format and engine. This new engine optimizes for many variables and many steps at large scale. It is also more memory efficient than previous engines, see BP5.

  • Plugin architecture to support external engines and operators outside the ADIOS2 installation, see Plugins

  • GPU-Aware I/O for reading/writing data to/from device memory, using CUDA (NVidia GPUs only), see GPU-aware I/O

Other changes

  • SST scales better for large N-to-1 staging, by managing the limits of outstanding remote direct memory access requests. Of course one still introduces a literal bottleneck with such a pattern into an in situ workflow.