インテル® Cluster Studio XE 2012 を利用した MPI/OpenMP* ハイブリッド・アプリケーション: ノードレベルまで最適化

同カテゴリーの次の記事

MPI/OpenMP* のハイブリッド・プログラミングを始めよう

この記事は、Dr.Dobb’s Go Parallel に掲載されている「Intel Cluster Studio XE 2012 and Hybrid MPI/OpenMP Applications: Optimize Up To the Node Level」の日本語参考訳です。



インテル® Cluster Studio XE 2012 は、ハイパフォーマンス・クラスター開発者向けに MPI/OpenMP* ハイブリッド開発環境を提供します。このスイートには、OpenMP* との互換性を持つインテル® MPI ライブラリー 4.0 Update 3 が含まれているため、ハイパフォーマンス・クラスターの機能を最大限に活用する MPI/OpenMP* ハイブリッド・アプリケーションを開発し最適化することができます。

インテル® MPI ライブラリーを使って MPI と OpenMP* を統合する場合は、-mt_mpi コンパイラー・オプションを指定して、インテル® MPI ライブラリーのスレッドセーフなバージョンをリンクする必要があります。インテル® C/C++ コンパイラーの -openmp オプションまたは -parallel オプションを指定すると、-mt_mpi コンパイラー・オプションを指定しなくても、自動的にインテル® MPI ライブラリーのスレッドセーフなバージョンがリンクされます。

スレッドセーフなインテル® MPI ライブラリーを使用する場合は、次の 3 つのレベルを利用できます。

  • MPI_THREAD_FUNNELED
  • MPI_THREAD_SERIALIZED
  • MPI_THREAD_MULTIPLE

I_MPI_PIN_DOMAIN 環境変数にも適切な値を指定する必要があります。この変数は、MPI/Open MP* ハイブリッド・アプリケーションのプロセスピニングのスキームを制御します。ノード上の論理プロセッサーがオーバーラップしないドメインを定義し、それらドメインへ MPI プロセスをバインドするルールを設定することができます。常にドメインごとに 1 つの MPI プロセスがあり、各ドメインは特定の論理プロセッサーで構成されています。各 MPI プロセスは、そのプロセスに割り当てられているドメイン内の論理プロセッサーで実行可能なスレッドを生成することができます。I_MPI_PIN_DOMAIN 環境変数に値を設定すると、I_MPI_PIN_PROCESSOR_LIST に設定されている値は無視されます。

I_MPI_PIN_DOMAIN 環境変数には、ドメインを定義する次の 3 つの構文があります。

  1. I_MPI_PIN_DOMAIN=
    — マルチコア関連のキーワードを使用してドメインを定義します。例えば、I_MPI_PIN_DOMIAN=core の場合、各ドメインは特定のコアを共有する論理プロセッサーで構成されます。この値を設定すると、ノードのドメイン数はノードのコア数と等しくなります。この他にも、論理プロセッサーで共有されるソケット、ノード、または異なるキャッシュレベルによってドメインを定義できるキーワードがあります。
  2. I_MPI_PIN_DOMAIN=[:]
    — ドメインのサイズとメンバーレイアウトを指定してドメインを定義します。サイズだけを指定してドメインを定義することもできます。サイズにより、各ドメインの論理プロセッサーの数が決まります。任意の論理プロセッサー数になるようにサイズを指定できますが、 MPI/OpenMP* ハイブリッド・アプリケーションでは通常、ドメインサイズが OMP_NUM_THREADS 環境変数の値と同じになる I_MPI_PIN_DOMAIN=omp オプションを使用すると便利です。そうすることで、プロセスピニングのドメインサイズが OMP_NUM_THREADS と等しくなり、各 MPI プロセスが対応するドメインで実行するスレッドを OMP_NUM_THREADS 個生成することができます。OPM_NUM_THREADS を設定しないと、各ノードは個別のドメインとして処理され、各 MPI プロセスは最大で利用可能なコア数と同じ数のスレッドしか生成することができません。 オプションのレイアウト引数を使用すると、ドメインメンバーの配置を指定できます。デフォルト値は compact です。つまり、I_MPI_PIN_DOMAIN=omp を指定すると、I_MPI_PIN_DOMAIN=omp:compact を指定した場合と同じになります。compact は、ドメインメンバーが共通のリソース (コア、キャッシュ、ソケットなど) に応じてできるだけ近い位置に配置されるようにします。そのため、共通のリソースを利用する MPI プロセスに向いています。一方、scatter は、隣接するドメインによる共通リソースの共有を最小限に抑えるようにドメインメンバーを配置します。最適な値は、利用可能なハードウェアとアプリケーション要求によって異なります。
  3. I_MPI_PIN_DOMAIN=]
    — ドメインマスク値を使用してドメインを定義します。例えば、16 進数のカンマ区切りのリスト (ドメインマスク) を使用して、各ドメインに含めるプロセッサーを指定したり、BIOS のプロセッサー番号を使用しないように指定できます。

-mt_mpi コンパイラー・オプションを指定する場合は、I_MPI_PIN_DOMAIN=omp を指定し、OpenMP* で使用するスレッド数を OMP_NUM_THREADS に設定すると、ハイパフォーマンス・クラスターを最大限に活用して MPI/OpenMP* ハイブリッド・アプリケーションを実行できます。mpiexec ジョブ・スタートアップ・コマンドを使用すると、I_MPI_PIN_DOMAINOMP_NUM_THREADS にそれぞれの値を簡単に設定できます。例えば、mpiexec オプションの一部として -env I_MPI_PIN_DOMAIN omp を指定し、I_MPI_PIN_DOMAIN の値を omp に設定できます。また、setenv OMP_NUM_THREADS=8 のように指定し、OMP_NUM_THREADS の値を 8 に設定できます。

このように、OpenMP* を使用して並列にコードを実行し、MPI を使用して高レベルな通信を行うスレッドの生成が可能です。インテル® Cluster Studio XE 2012 に含まれるインテル® Trace Analyzer/Collector、インテル® VTune™ Amplifier XE、インテル® Inspector XE、インテル® MPI Benchmarks などの各種ツールにより、さまざまなオプションでアプリケーションを実行し解析して、コードと設定のチューニングを行うことで、異なるレベルの最適化を達成することができます。

インテル® Cluster Studio XE 2012 は商用製品ですが、こちらから無料体験版をダウンロードすることができます。

関連記事