The MPI Forum wished to promote the development of tools for understanding program behavior, but considered it premature to standardize any specific tool interface. The MPI specification provides instead a general mechanism for intercepting calls to MPI functions. Thus both end users and tool developers can develop portable performance analyzers and other tools without access to the MPI implementation source code. The only requirement is that every MPI function be callable (in both C and Fortran) by an alternate name ( PMPI_Xxxx as well as the usual MPI_Xxxx.). In some environments (those supporting ``weak symbols'') the additional entry points can be supplied in the source code. In MPICH we take the less elegant but more portable approach of building a duplicate MPI library in which all functions are known by their PMPI_ names. Of course, only one copy of the source code is maintained. Users can interpose their own ``profiling wrappers'' for MPI functions by linking with their own wrappers, the standard version of the MPI library, and the profiling version of the MPI library in the proper order. MPICH also supplies a number of prebuilt profiling libraries; these are described in Section Profiling Libraries .