Parallel computers are being used increasingly to solve large, I/O-intensive applications in a number of different disciplines. A limiting factor, however, is the lack of a standard, portable application-programming interface (API) for parallel I/O. Instead of a single standard API, a number of different APIs are supported by different vendors and research projects. Many commercial parallel file systems (e.g., IBM PIOFS  and Intel PFS ) and research parallel file systems (e.g., PPFS , Galley , HFS , Scotch , and PIOUS ) provide their own APIs. In addition, a number of I/O libraries with special APIs have been developed (e.g., PASSION , Panda , Chameleon I/O , SOLAR , Jovian , and ChemIO ). Different APIs are used by systems that support persistent objects (e.g., Ptool , ELFS , and SHORE ).
A group within the Scalable I/O Initiative  is developing a standard low-level interface for parallel I/O . This low-level interface, however, is not intended to be used directly by application programmers, but instead at the operating-system level by developers of libraries for compilers, run-time systems, and applications. The only real effort to standardize an interface for parallel I/O at the application-programming level is the MPI-IO  proposal that is based on MPI . The MPI Forum has recently started an effort to standardize an interface for parallel I/O as part of MPI-2. The Forum is using MPI-IO  as a starting point. The result of this effort may well become the standard API in the future.
In this paper, we propose a strategy for implementing parallel-I/O APIs portably and efficiently. For this purpose, we have defined an abstract-device interface for parallel I/O, called ADIO. Any parallel-I/O API can be implemented efficiently on multiple file systems by implementing the API portably on top of ADIO and implementing only ADIO separately on each different file system. We have used ADIO to implement the Intel PFS interface and subsets of MPI-IO and IBM PIOFS interfaces on PFS, PIOFS, Unix, and NFS file systems. Therefore, we are able to run applications (that use the above interfaces) portably on the IBM SP, Intel Paragon, and networks of workstations. Performance studies with two test programs and one real production application indicate that the overhead of using ADIO as an implementation strategy is very low.
We stress that ADIO is not intended to be a new API itself, i.e., it is not intended to be used directly by application programmers. Instead, it is a strategy for implementing other APIs.
The rest of the paper is organized as follows. In Section 2, we explain the ADIO concept in more detail. We describe the design of ADIO in Section 3 and discuss its use in implementing APIs such as the MPI-IO, PFS, PIOFS, PASSION, and Panda interfaces in Section 4. We present performance results in Section 5. We draw overall conclusions and discuss our plans for future work in Section 6.