この記事は、インテル® ソフトウェア・ネットワークに掲載されている「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” というプロセスのみが表示されています。
原因:
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” が表示されていることが分かります。
注:
1) この方法は、システム全体の解析オプションを有効にしない light hotspot 解析でも使用できます。
2) この方法は、MPI プログラムを (マルチコアまたはマルチプロセッサーを搭載した) シングルノードのローカルマシンで実行する場合のみ有効です。
インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。