ROMIO: A High-Performance, Portable MPI-IO Implementation

Overview

Note:  we haven’t released newer versions of ROMIO as independent packages for a while; they are included as part of MPICH, and we work with downstream vendors to incorporate the latest changes.  You can get the latest version of ROMIO when you download MPICH.

ROMIO is a high-performance, portable implementation of MPI-IO, the I/O chapter in MPI-2.
ROMIO is optimized for noncontiguous access patterns, which are common in parallel applications. It has an optimized implementation of collective I/O, an important optimization in parallel I/O.
ROMIO is designed to be used with any MPI implementation. It is, in fact, included as part of several MPI implementations.  Cray, IBM’s Blue Gene drivers, and OpenMPI  all use some variant  of ROMIO  for their MPI-IO implementation..

Windows Version (NTFS)

A version of ROMIO for Windows 2000 is available as part of MS-MPI

Learning MPI-IO

The book Using MPI-2: Advanced Features of the Message-Passing Interface,
published by MIT Press, provides a tutorial introduction to all aspects of MPI-2, including
parallel I/O. It has lots of example programs.
The ROMIO Users Guide [PostScript] [PDF ] [HTML] documents the ROMIO-specific features you might encounter.
We have collected some of the more noteworthy publications under the ‘publications‘ tag.
Performance Tips

  • Specify as much access information as possible in a single function call by using MPI derived datatypes. For example, if you need to read bytes 0–10, 20–30, and 40–50 from a file, do NOT use three separate read function calls. Instead, create an appropriate MPI derived datatype that specifies this layout, define a file view with MPI_File_set_view, and then use a single read function call. This will perform MUCH better than with three separate read calls.
  • For maximum performance, use the collective I/O functions, particularly in the case of noncontiguous accesses like the above. See this paper for further details.

Performance Results

ROMIO Internals

A key component of ROMIO that enables such a portable MPI-IO implementation is an internal abstract I/O device layer called ADIO. Most users of ROMIO will not need to deal with the ADIO layer at all. However, ADIO is useful to those who want to port ROMIO to some other file system. The ROMIO source code and the ADIO paper (ps, pdf, html) will help you get started.

Publications

ROMIO Project Members

Further Information

For further information, send email to [email protected].