この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Hybrid applications: Intel MPI Library and OpenMP*」(http://software.intel.com/en-us/articles/hybrid-applications-intelmpi-openmp/) の日本語参考訳です。
MPI と OpenMP* の両方を使用するアプリケーションがありますが、インテル® MPI ライブラリーでは、このようなハイブリッド機能をサポートしていますか?
はい、インテル® MPI は MPI/OpenMP* が混在するアプリケーションをサポートしています。ハイブリッド・コードが正しく実行されるように、次の操作を行ってください。
-mt_mpi
コンパイラー・ドライバー・オプションを指定し、インテル® MPI ライブラリーのスレッドセーフなバージョンを使用します。I_MPI_PIN_DOMAIN
環境変数を任意のプロセスピニング・スキームに設定します。推奨される設定はomp
です。$ export I_MPI_PIN_DOMAIN=omp
この設定は、プロセスピニングのドメインサイズが
OMP_NUM_THREADS
の値と同じになります。そのため、各 MPI プロセスは、対応するドメイン内で実行する子スレッドを$OMP_NUM_THREADS
個作成できます。OMP_NUM_THREADS
が設定されていない場合、各ノードは別々のドメインとして扱われます (その場合、MPI プロセスごとのスレッド数は最大でコア数までになります)。注: OpenMP* スレッドをドメイン内でプロセッサー・コアに割り当てるには、
KMP_AFFINITY
環境変数を設定して、対応する OpenMP* 機能を使用します。- 詳細は、『Intel® MPI Library for Linux* Reference Manual』(http://software.intel.com/en-us/articles/intel-mpi-library-documentation/) の「Interoperability with OpenMP*」を参照してください。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。