ADIOS 2: The Adaptable Input/Output System version 2
Funded by the Exascale Computing Project (ECP), U.S. Department of Energy
ADIOS2 is the latest implementation of the Adaptable Input Output System. This brand new architecture continues the performance legacy of ADIOS1, and extends its capabilities to address the extreme challenges of scientific data IO.
The ADIOS2 repo is hosted at GitHub.
The ADIOS2 infrastructure is developed as a multi-institutional collaboration between
The key aspects ADIOS2 are
Modular architecture: ADIOS2 takes advantage of the major features of C++17. The architecture utilizes a balanced combination of runtime polymorphism and template meta-programming to expose intuitive abstractions for a broad range of IO applications.
Community: By maintaining coding standards, collaborative workflows, and understandable documentation, ADIOS2 lowers the barriers to entry for scientists to meaningfully interact with the code.
Sustainability: Continuous integration and unit testing ensure that ADIOS2 evolves responsibly. Bug reports are triaged and fixed in a timely manner and can be reported on GitHub.
Language Support: In addition to the native C++, bindings for Python, C, Fortran and Matlab are provided.
Commitment: ADIOS2 is committed to the HPC community, releasing a new version every 6 months.
ADIOS2 is funded by the Department of Energy as part of the Exascale Computing Project.
What ADIOS2 is and isn’t
ADIOS2 is:
A Unified High-performance I/O Framework: using the same abstraction API ADIOS2 can transport and transform groups of self-describing data variables and attributes across different media (file, wide-area-network, in-memory staging, etc.) with performance an ease of use as the main goals.
MPI-based: parallel MPI applications as well as serial codes can use it
Streaming-oriented: ADIOS2 favors codes transferring a group of variables asynchronously wherever possible. Moving one variable at a time, in synchronous fashion, is the special case rather than normal.
Step-based: to resemble actual production of data in “steps” of variable groups, for either streaming or random-access (file) media
Free and open-source: ADIOS2 is permissibly licensed under the OSI-approved Apache 2 license.
Extreme scale I/O: ADIOS2 is being used in supercomputer applications that write and read up to several petabytes in a single simulation run. ADIOS2 is designed to provide scalable I/O on the largest supercomputers in the world.
ADIOS2 is not:
A file-only I/O library: Code coupling and in situ analyis is possible through files but special engines are available to achieve the same thing faster through TCP, RDMA and MPI communication. High performance write/read using a file system is a primary goal of ADIOS2 though.
MPI-only
A Hierarchical Model: Data hierarchies can be built on top of the ADIOS2 according to the application, but ADIOS2 sits a layer of abstraction beneath this.
A Memory Manager Library: we don’t own or manage the application’s memory
Adaptable IO beyond files in Scientific Data Lifecycles
Performant and usable tools for data management at scale are essential in an era where scientific breakthroughs are collaborative, multidisciplinary, and computational. ADIOS2 is an adaptable, scalable, and unified framework to aid scientific applications when data transfer volumes exceed the capabilities of traditional file I/O.
ADIOS2 provides
Custom application management of massive data sets, starting from generation, analysis, and movement, as well as short-term and long-term storage.
Self-describing data in binary-packed (.bp) format for rapid metadata extraction
An ability to separate and extract relevant information from large data sets
The capability to make real-time decisions based on in-transit or in-situ analytics
The ability to expand to other transport mechanisms such wide area networks, remote direct memory access, and shared memory, with minimal overhead
The ability to utilize the full capabilities of emergent hardware technologies, such as high-bandwidth memory and burst buffers
Introduction
- What’s new in Development
- What’s new in v2.12?
- C API Improvements
- Selection API for Get() Operations
- Plugin Interface v2 (Breaking Change)
- XRootD Server Resource Management
- Cross-Endian Interoperability
- S3 Object Storage for BP5 Data
- C++17 Minimum Requirement
- Python Bindings: Nanobind Migration
- Asymmetric Encryption Operator
- SZ3 Compression Operator
- RefactorProDM Operator
- Python Free-Threading Support
- HTTPS Transport for Remote Access
- Campaign Reader Improvements
- TAR File Reading
- Python Stream: minmax()
- Inline Engine Buffering
- Windows and macOS pip Wheel Support
- REUSE License Compliance
- What’s new in 2.11?
- What’s new in 2.10?
- What’s new in 2.9?
- Introduction
Basics
- Interface Components
- Supported Virtual Engine Names
- Supported Engines
- Supported Operators
- Full APIs
- C++11 bindings
- ADIOS2 components classes
- ADIOS class
- IO class
adios2::IOIO()~IO()operator bool()Name()InConfigFile()SetEngine()SetParameter()SetParameters()SetParameters()ClearParameters()Parameters()AddTransport()SetTransportParameter()DefineVariable()InquireVariable()InquireVariableType()DefineAttribute()DefineAttribute()InquireAttribute()RemoveVariable()RemoveAllVariables()RemoveAttribute()RemoveAllAttributes()Open()InquireGroup()Open()Open()FlushAll()AvailableVariables()AvailableAttributes()VariableType()AttributeType()AddOperation()EngineType()
- Variable
<T>classadios2::VariableVariable()~Variable()operator bool()StoreStatsOnly()SetMemorySpace()GetMemorySpace()SetShape()SetBlockSelection()SetSelection()SetMemorySelection()SetStepSelection()SetAccuracy()SelectionSize()SelectionSize()Name()Type()Sizeof()ShapeID()Shape()Start()Count()Steps()StepsStart()BlockID()AddOperation()Operations()RemoveOperations()MinMax()Min()Max()GetAccuracy()AllStepsBlocksInfo()adios2::Variable::Info
- Attribute
<T>class - Engine class
adios2::EngineEngine()~Engine()operator bool()Name()Type()OpenMode()GetMetadata()BeginStep()BeginStep()CurrentStep()Put()Put()Put()Put()Put()Put()Put()PerformPuts()PerformDataWrite()Get()Get()Get()Get()Get()Get()Get()Get()Get()Get()Get()Get()PerformGets()EndStep()BetweenStepPairs()Flush()Close()AllStepsBlocksInfo()BlocksInfo()GetAbsoluteSteps()Steps()FileUUID()LockWriterDefinitions()LockReaderSelections()
- Selection class
- Operator class
- Fortran bindings
- C bindings
adios2_adioshandler functionsadios2_initadios2_init_configadios2_init_mpi()adios2_init_config_mpi()adios2_init_serial()adios2_init_config_serial()adios2_declare_io()adios2_declare_io_order()adios2_at_io()adios2_define_operator()adios2_inquire_operator()adios2_flush_all()adios2_finalize()adios2_remove_io()adios2_remove_all_ios()adios2_enter_computation_block()adios2_exit_computation_block()
adios2_iohandler functionsadios2_in_config_file()adios2_set_engine()adios2_set_parameters()adios2_set_parameter()adios2_get_parameter()adios2_clear_parameters()adios2_add_transport()adios2_set_transport_parameter()adios2_define_variable()adios2_inquire_variable()adios2_inquire_all_variables()adios2_inquire_group_variables()adios2_define_attribute()adios2_define_attribute_array()adios2_define_variable_attribute()adios2_define_variable_attribute_array()adios2_inquire_attribute()adios2_inquire_variable_attribute()adios2_inquire_all_attributes()adios2_inquire_group_attributes()adios2_inquire_subgroups()adios2_remove_variable()adios2_remove_all_variables()adios2_available_variables()adios2_available_attributes()adios2_remove_attribute()adios2_remove_all_attributes()adios2_open()adios2_open_with_metadata()adios2_open_new_comm()adios2_flush_all_engines()adios2_engine_type()adios2_get_engine()
adios2_variablehandler functionsadios2_set_shape()adios2_store_stats_only()adios2_set_memory_space()adios2_get_memory_space()adios2_set_block_selection()adios2_set_selection()adios2_set_memory_selection()adios2_set_step_selection()adios2_variable_name()adios2_variable_type()adios2_variable_type_string()adios2_variable_shapeid()adios2_variable_ndims()adios2_variable_shape()adios2_variable_shape_with_memory_space()adios2_variable_start()adios2_variable_count()adios2_variable_steps_start()adios2_variable_steps()adios2_selection_size()adios2_add_operation()adios2_set_operation_parameter()adios2_remove_operations()adios2_variable_min()adios2_variable_max()
adios2_attributehandler functionsadios2_enginehandler functionsadios2_engine_name()adios2_engine_get_type()adios2_engine_openmode()adios2_engine_get_metadata()adios2_begin_step()adios2_current_step()adios2_between_step_pairs()adios2_steps()adios2_put()adios2_put_by_name()adios2_perform_puts()adios2_perform_data_write()adios2_get()adios2_get_by_name()adios2_get_string()adios2_perform_gets()adios2_end_step()adios2_flush()adios2_flush_by_index()adios2_close()adios2_close_by_index()adios2_lock_writer_definitions()adios2_lock_reader_selections()adios2_inquire_blockinfo()adios2_free_blockinfo()
adios2_operatorhandler functions
- C++11 bindings
- High-Level APIs
- C++ High-Level API
- C++11 Write example
- C++11 Read “step-by-step” example
adios2::fstreamAPI documentationadios2::fstreamopenmodefstream()fstream()fstream()fstream()fstream()~fstream()operator bool()open()open()open()open()set_parameter()set_parameters()write_attribute()write_attribute()write()write()write()read()read()read()read()read()read()read()read()read()read()read_attribute()end_step()close()current_step()getstep
- Matlab simple bindings
- C++ High-Level API
- Python APIs
- Python Example Code
- adios2 classes for Python
StreamStream.adiosStream.all_blocks_info()Stream.available_attributes()Stream.available_variables()Stream.begin_step()Stream.close()Stream.current_step()Stream.define_variable()Stream.end_step()Stream.engineStream.get_metadata()Stream.inquire_attribute()Stream.inquire_variable()Stream.ioStream.loop_index()Stream.minmax()Stream.modeStream.num_steps()Stream.read()Stream.read_attribute()Stream.read_attribute_string()Stream.read_complete()Stream.read_in_buffer()Stream.set_parameters()Stream.step_status()Stream.steps()Stream.write()Stream.write_attribute()
FileReaderAdiosIOIO.add_transport()IO.adios()IO.available_attributes()IO.available_variables()IO.define_attribute()IO.define_derived_variable()IO.define_variable()IO.engine_type()IO.flush_all()IO.implIO.inquire_attribute()IO.inquire_variable()IO.open()IO.open_with_metadata()IO.parameters()IO.remove_all_attributes()IO.remove_all_variables()IO.remove_attribute()IO.remove_variable()IO.set_engine()IO.set_parameter()IO.set_parameters()
EngineEngine.all_blocks_info()Engine.begin_step()Engine.between_step_pairs()Engine.blocks_info()Engine.close()Engine.current_step()Engine.end_step()Engine.flush()Engine.get()Engine.get_metadata()Engine.implEngine.lock_reader_selections()Engine.lock_writer_definitions()Engine.perform_data_write()Engine.perform_gets()Engine.perform_puts()Engine.put()Engine.steps()
VariableVariable.add_operation()Variable.add_operation_string()Variable.block_id()Variable.count()Variable.get_accuracy()Variable.implVariable.name()Variable.operations()Variable.remove_operations()Variable.selection_size()Variable.set_accuracy()Variable.set_block_selection()Variable.set_selection()Variable.set_shape()Variable.set_step_selection()Variable.shape()Variable.shape_id()Variable.single_value()Variable.sizeof()Variable.start()Variable.steps()Variable.steps_start()Variable.store_stats_only()Variable.type()
AttributeOperator
- Python bindings to C++
- Examples using the Python bindings in the ADIOS2 repository
- ADIOS class
- IO class
IOIO.AddTransportIO.AvailableAttributesIO.AvailableVariablesIO.DefineAttributeIO.DefineDerivedVariableIO.DefineVariableIO.EngineTypeIO.FlushAllIO.InquireAttributeIO.InquireVariableIO.OpenIO.ParametersIO.RemoveAllAttributesIO.RemoveAllVariablesIO.RemoveAttributeIO.RemoveVariableIO.SetEngineIO.SetParameterIO.SetParameters
- Variable class
VariableVariable.AddOperationVariable.BlockIDVariable.CountVariable.GetAccuracyVariable.GetAccuracyRequestedVariable.NameVariable.OperationsVariable.RemoveOperationsVariable.SelectionSizeVariable.SetAccuracyVariable.SetBlockSelectionVariable.SetSelectionVariable.SetShapeVariable.SetStepSelectionVariable.ShapeVariable.ShapeIDVariable.SingleValueVariable.SizeofVariable.StartVariable.StepsVariable.StepsStartVariable.StoreStatsOnlyVariable.Type
- Attribute class
- Engine class
EngineEngine.BeginStepEngine.BetweenStepPairsEngine.BlocksInfoEngine.CloseEngine.CurrentStepEngine.EndStepEngine.FlushEngine.GetEngine.GetMetadataEngine.LockReaderSelectionsEngine.LockWriterDefinitionsEngine.NameEngine.PerformDataWriteEngine.PerformGetsEngine.PerformPutsEngine.PutEngine.StepsEngine.Type
- Operator class
- Query class
- Transition from old API to new API
Advanced Topics
Tutorials
Ecosystem Tools
Additional Information
- FAQ
- MPI vs Non-MPI
- APIs
- Building on Titan
- Building and Running on Fujitsu FX100
- FAQs Answered
- Can I use the same library for MPI and non-MPI code?
- Can I use ADIOS 2 C++11 library with C++98 codes?
- Why are C and Fortran APIs missing functionality?
- C++11: Why are std::string arguments passed sometimes by value and sometimes by reference?
- C++11: Should I pass adios2:: objects by value or by reference?
- Fortran: Can I pass slices and temporary arrays to adios2_put?
- My application uses PGI compilers on Titan, can I link ADIOS 2?
- How do I enable the Python bindings on Titan?
- How do I build ADIOS 2 on Fujitsu FX100?
- SST engine hangs on Fujitsu FX100. Why?
- Advice