mpi.h
ヘッダーを見ていて、PMPI_Init
機能について混乱しています。これはMPI_Init
宣言の直後に置かれ、まったく同じように見えます。ただし、Msmpi.dll
(たとえば)にはMPI_Init
のエクスポートはありません。PMPI_Init
のみです。MPI_ *関数とPMPI_ *関数の違いは何ですか?
PMPI_
の機能は何ですか?
mpi.h
ヘッダーを見ていて、PMPI_Init
機能について混乱しています。これはMPI_Init
宣言の直後に置かれ、まったく同じように見えます。ただし、Msmpi.dll
(たとえば)にはMPI_Init
のエクスポートはありません。PMPI_Init
のみです。MPI_ *関数とPMPI_ *関数の違いは何ですか?
PMPI_
の機能は何ですか?
あなたはMPIプロファイリングインターフェイスを見ています。各MPI関数についても同様のPMPI関数があります。これは接頭辞によって異なります。
ユーザーはMPI
バージョンのみを呼び出し、PMPI
バージョンは無視してください。
これは、ツール開発者がMPI
関数への呼び出しをインターセプトし、内部でPMPI
バージョンを呼び出すことができるメカニズムです。通常、これは、すべての機能がPMPI
機能として実装され、MPI
機能がそれらを指す弱い記号として実装されるように実装されます。このツールは弱いシンボルを独自のラッパー実装に置き換え、内部ではPMPI
関数を呼び出します。
// Normal case
user --calls--> libmpi:MPI_Init --redicrects to--> libmpi:PMPI_Init (implementation)
// Tool case
user --calls--> libtool:MPI_Init (does tool things) --calls--> libmpi:PMPI_Init (implementation)
詳細は、MPI standardの14.2項を参照してください。一般的には、ヘッダーの代わりに関数の署名などの標準を調べることを強くお勧めします。
PMPI_
エントリポイントはMPI Profiling Interfaceの一部です。
これらのシンボルはデフォルトで単にMPI_
関数の名前を参照していますが、APIの一部として定義することで、MPI呼び出しの周りにツールを挿入して簡単なパフォーマンスプロファイリングやトレースを簡単に実行できます。彼らがどのように動作し、どのように使用するのかについてlotsのexamplesがあります。
Mostprofiling MPIコード用のツールは、ユーザーコードを変更することなく、時間MPI通信ルーチン、特定のサイズで送受信されるメッセージ数をカウントするためにこれを使用します。プロファイリングライブラリにリンクするだけです。
プロファイリングインターフェイスは、プロファイリングのために厳密に使用する必要はありません。通信の正確性チェック(送受信の一致を確認するためのプロファイリングインターフェイス)、単純なヒューリスティックデッドロックテスト、
プロファイリングインターフェイスは、しばらくの間、MPIライブラリへの唯一の標準ツールインターフェイスでしたが、より豊富なTools interfaceもあります。