The MPI-2 standard was finalized in July, 1997 . MPI-2 provides substantial new functionality, including support for dynamic process management, one-sided communication, cooperative I/O, extended collective operations and numerous other features. Most vendors have said they will implement part or all of MPI-2, but have given no time frames.
The MPI-2 specification for thread-safe MPI has been mostly implemented by Sun and IBM as described in Section 7.5. These implementations do not provide the extra MPI-2 calls to enable run-time requests.
MPI-2 I/O is the first major piece of MPI-2 that is likely to be widely available. There are at least two research projects, ROMIO and PMPIO, that are implementing portable versions of MPI-2 I/O [21, 22]. Of these, the ROMIO implementation is the first out of the gate, with enough of MPI-2 I/O implemented for applications to start using it. ROMIO works with MPICH, SGI MPI and HP MPI, and can use a Unix filesystem, NFS filesystem, or IBM's PIOFS. PMPIO has been around longer, but implements an older version of the I/O specification. PMPIO is also tied to MPICH, though it runs on top of several different filesystems. There does not appear to have been much recent activity in PMPIO development.
Sun is the first vendor to demonstrate an implementation of MPI-2 I/O. This reviewer has not yet used it, but a beta version scheduled for release later this year appears to be mostly complete. It uses a ``parallel file system'' called PFS that is currently accessible only through MPI-2 I/O. The usability and performance of this implementation remain to be demonstrated.
Both SGI MPI and HP MPI implement MPI-2 routines necessary for layering MPI-2 I/O as a third-party library. This is how ROMIO is able to interact with these implementations.
The LAM implementation provides MPI-2 dynamic process management, As of this writing the function names are not the final versions (e.g. MPI_SPAWN instead of MPI_COMM_SPAWN), but this is a small problem.
The prospects for dynamic process management in other implementations and one-sided communication in any other implementation are less clear. These are much more difficult to implement, and are impossible to layer on top of existing implementations.