Figure 1: The ADIO concept
The main goal of ADIO is to facilitate a high-performance implementation of any existing or new parallel-I/O API on any existing or new file-system, as illustrated in Figure 1. ADIO consists of a small set of basic functions for performing parallel I/O. Any parallel-I/O API (including a file-system interface) can be implemented in a portable fashion on top of ADIO. ADIO in turn must be implemented in an optimized manner on each different file system separately. In other words, ADIO separates the machine-dependent and machine-independent aspects involved in implementing an API. The machine-independent part can be implemented portably on top of ADIO. The machine-dependent part is ADIO itself, which must be implemented separately on each different system.
ADIO enables users to experiment with new APIs and new low-level file-system interfaces. Once a new API is implemented on top of ADIO, it becomes available on all file systems on which ADIO has been implemented. Similarly, once ADIO is implemented on a new file-system, all APIs implemented on top of ADIO become available on the new file system. This approach thus enables users to run applications on a wide range of platforms, regardless of the parallel-I/O API used in the applications.
The ADIO approach was motivated by the lack of consensus, within both the parallel-I/O community and the applications community, on any one standard API. Therefore, instead of mandating a particular API, we provide the framework for implementing any or all of them in a simple, efficient, and portable manner. When a standard API emerges, ADIO can be used to implement that API as well.
A similar abstract-device-interface approach for communication has been used very successfully in the MPICH implementation of MPI .