2017-10-21 6 views
0

私は、68コアと4ハイパースレッド/コアを持つKnights Landingノードでプログラミングしています。私はハイブリッドMPI/OpenMPアプリケーションに取り組んでいます。 私の質問は、4つのハイパースレッドがOpenMP スレッドとして使用されることを意図している場合、またはそれらをどのように使用できますか?Knights Landingで利用可能なスレッド

export OMP_NUM_THREADS=4 
mpirun -np 68 ./app 

たぶん、問題は特定のMPI用のスレッドがないということである。

export OMP_NUM_THREADS=1 
mpirun -np 68 ./app 

それははるかに速く、私はスキームを使用する場合よりも実行されます。私は 次のスキームを使用して私のプログラムを実行すると、それぞれ に近い。しかし、私はそれを行う方法を知らない。

要約すると、4つのハイパースレッド/コアをOpenMPスレッドとして使用できますか?

ありがとうございました。

+0

大部分のアプリケーションでは、各コアでMPIランクを実行している間に非常に多くのスレッドを実行することはありません。インテルMPIのデフォルトはスレッドをローカルに配置することですが、OpenMPが2つまたは4つのコアを使用して単一のMPIランクにゲインを表示してから、ランクとスレッド数の組み合わせを試してみること。 – tim18

+0

アフィニティの設定方法の詳細はMPIの実装によって異なりますが、KNLを対象とするMPIにはその機能が含まれている必要があります。 – tim18

+0

私は、コアごとに1つ以上のスレッドを使用するアプリケーションが、すべてのコアが使用される前に効果的にピークアウトするかどうかについて、knlの十分な経験はありませんでした。 kncでは、mpiはコアビジーメッセージを保持し、別のOSとmpiを実行している可能性があります。 – tim18

答えて

0

おそらくIntel MPIとOpenMPのランタイムを使用しているので、MPIとOpenMPスレッドをプロセッサコア/スレッドに固定するための貴重な情報をいくつかのリンクに転送することができます。高性能を達成するためには、プロセス/スレッド・バインディングが今日必須である。 OSが最善を尽くそうとしても、1つのプロセス/スレッドを1つのコア/スレッドから別の場所に移動することは、データも同様に転送する必要があることを意味します。その点については、Running an MPI/OpenMP ProgramEnvironment Variables for Process Pinningをご覧ください。例えば、68のMPIランクで走れば、おそらく各MPIランクを別のコアに置くことになります。環境変数I_MPI_DEBUG(hereのように)を設定して、mpirunがリクエストを尊重しているかどうかを再確認できます。

関連する問題