hotspot 解析で MPI ジョブからスポーンされたプロセスを追跡できない理由

インテル® MPI ライブラリーインテル® VTune™ プロファイラー

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Why can’t Hotspots Analysis trace spawned processes of MPI job?」(http://software.intel.com/en-us/articles/why-cant-hotspots-analysis-trace-spawned-processes-of-mpi-job/) の日本語参考訳です。


編集部追加
インテル® VTune Amplifier XE 2011 の Update 5 において、インテル® MPI ライブラリーを使用するプログラムの分析がサポートされるようになりました。
以下の記事は、インテル® VTune Amplifier XE 2011 の Update 4 以前をご利用の場合に、参考にしていただけます。


問題:

“mpiexec -np 4 program” のように mpiexec コマンドを使用すると、MPI ジョブをローカルホストで実行できます。

この場合、インテル® VTune™ Amplifier XE 2011 の hotspot 解析では、[Analyze child processes (子プロセスの解析)] オプションをオンにしても、MPI プログラムだけが 1 プロセス、1 スレッド、1 モジュールとして表示されます。   注: [Analyze system-wide (システム全体を解析)] オプションを有効にしても、hotspot 解析では意味がありません。

次の例を使って考えてみましょう。このプログラムは、MPI ライブラリーを使用して Pi (円周率) を計算します。

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
h   = 1.0 / (double) n;
sum = 0.0;
for (i = myid + 1; i <= n; i += numprocs) {
     x = h * ((double)i - 0.5);
     sum += 4.0 / (1.0 + x*x);
}
mypi = h * sum;
MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
<p>if (myid == 0)
     printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT));
MPI_Finalize();

通常、次のようなコマンドを実行して MPI プログラムのコンパイルと実行を行います。(注: インテル® MPI ライブラリー 4.0.0 とインテル® VTune™ Amplifier XE 2011 がローカルマシンにすでにインストールされている必要があります。)

1) export PATH=$PATH:/opt/intel/vtune_amplifier_xe_2011/bin64/
2) source /opt/intel/impi/4.0.0/bin64/mpivars.sh
3) mpicc -g pi.c -o pi.gcc
4) mpdboot
5) amplxe-cl -collect hotspots -r r0001hs — mpiexec -np 4 ./pi.gcc
6) amplxe-cl -report hotspots -r r0001hs -group-by process

“amplxe-gui” コマンドを使用すると、次のように結果を GUI で表示することができます。  この例では、”python” というプロセスのみが表示されています。

mpi1.jpg

原因:

mpiexec は MPI プログラムを直接実行するわけではなく、すべてのパラメーターを渡し、ソケットを介して MPI の mpd デーモンで実行します。そのため、プログラムは mpiexec の子プロセスにはなりません。

解決方法:

“mpiexec” コマンドの代わりに “mpiexec.hydra” を使用し、”-bootstrap fork” オプションを指定して MPI プログラムをローカルホストで実行します。これにより、オペレーティング・システムのフォークメカニズムを使用して、MPI プログラムがローカルホストで実行されるようになります。 例えば、”mpiexec.hydra -bootstrap fork -np 4 program” のようになります。

前述のステップ 5 を変更してみましょう。

5b) amplxe-cl -collect hotspots -r r0002hs — mpiexec.hydra -bootstrap fork -np 4 ./pi.gcc
6b) amplxe-cl -report hotspots -r r0002hs -group-by process

変更したコマンドを実行した後に “amplxe-gui” コマンドを使用して結果を表示すると、次のように正しい結果が表示されます。プロセスのドロップダウン・リストに 4 つの “pi.gcc”、”mpiexec.hydra”、”pmi_proxy” が表示されていることが分かります。

mpi2.jpg

注:

1) この方法は、システム全体の解析オプションを有効にしない light hotspot 解析でも使用できます。
2) この方法は、MPI プログラムを (マルチコアまたはマルチプロセッサーを搭載した) シングルノードのローカルマシンで実行する場合のみ有効です。

インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。

タイトルとURLをコピーしました