2

ハイパースレッディング対応のマルチコアプロセッサがどのように機能するかをよりよく理解しようとしています。MPI、OpenMP、またはMPI+OpenMPでコンパイルできるアプリがあるとします。4つのXeonX7560@ 2.27GHzプロセッサを搭載し、各プロセッサコアでハイパースレッディングが有効になっているCentOS5.3ボックスでどのようにスケジュールされるのでしょうか。

プロセッサには、/ proc/cpuinfoで0から63までの番号が付けられています。私の理解では、4つの8コア物理プロセッサがあり、物理コアの合計は32であり、各プロセッサコアではハイパースレッディングが有効になっており、論理プロセッサの合計は64です。

  1. MPICH2でコンパイルmpirun-np16で実行した場合、いくつの物理コアが使用されますか?利用可能な16個のPHYSICALコアまたは16個のLOGICALプロセッサ(ハイパースレッディングを使用する8個のPHYSICALコア)に分割されますか?

  2. OpenMPでコンパイルOMP_NUM_THREADS=16を設定した場合、いくつの物理コアが使用されますか?16個のLOGICALプロセッサを使用しますか?

  3. MPICH2 +OpenMPでコンパイルOMP_NUM_THREADS=16を設定し、mpirun -np 16で実行した場合、使用される物理コアの数はいくつですか?

  4. OpenMPIでコンパイル

OpenMPIには2つのランタイムオプションがあります

-cpu-ジョブに割り当てられた論理CPUを指定するset、-cpu-per-procは、各プロセスに使用するCPUの数を指定します。

mpirun -np 16 -cpu-set 0-15で実行した場合、8つの物理コアのみを使用しますか?
mpirun -np 16 -cpu-set 0-31 -cpu-per-proc 2で実行した場合、どのようにスケジュールされますか?

ありがとう

ジェリー

4

3 に答える 3

1

賢明なスケジューラは、可能であれば、異なる物理プロセッサでスレッドを実行することを好むと思います。次に、異なる物理コアを優先することを期待しています。最後に、必要に応じて、各物理コアでハイパースレッド化された 2 番目のスレッドの使用を開始します。

基本的に、スレッドがプロセッサ リソースを共有する必要がある場合、速度が低下します。そのため、通常、最適な戦略は、プロセッサ リソースの共有量を最小限に抑えることです。これは、CPU バウンド プロセスの正しい戦略であり、通常、OS が処理していると想定するものです。

于 2011-02-13T22:34:59.370 に答える
0

スケジューラーが同じ物理コア上の1つのプロセスでスレッドを維持しようとするという推測を危険にさらします。したがって、16個のスレッドがある場合、それらは最小数の物理コア上にあります。この理由は、キャッシュの局所性です。同じプロセスのスレッドは、異なるプロセスのスレッドよりも同じメモリにアクセスする可能性が高いと見なされます。(たとえば、コア間でのキャッシュラインの無効化のコストは高くなりますが、同じコア内の論理プロセッサではそのコストは発生しません)。

于 2011-02-13T22:31:21.463 に答える
0

他の 2 つの回答からわかるように、理想的なスケジューリング ポリシーは、スレッドが実行しているアクティビティによって異なります。

完全に異なるデータで作業しているスレッドは、より多くの分離の恩恵を受けます。これらのスレッドは、別々の NUMA ドメインと物理コアでスケジュールするのが理想的です。

同じデータで作業するスレッドは、キャッシュの局所性から恩恵を受けるため、アイデア ポリシーは、キャッシュを共有するようにスレッドを近くにスケジュールすることです。

同じデータを処理し、大量のパイプライン ストールが発生するスレッドは、ハイパースレッド コアを共有することでメリットが得られます。各スレッドは、ストールするまで実行できます。ストールした時点で、他のスレッドを実行できます。ストールなしで実行されるスレッドは、ハイパースレッディングによってのみ損なわれるため、別のコアで実行する必要があります。

理想的なスケジュール決定を下すには、多くのデータ収集と多くの意思決定が必要です。OS 設計における大きな危険は、スレッド スケジューリングをスマートにしすぎることです。OS がスレッドを実行するのに最適な場所を見つけるために多くのプロセッサ時間を費やしている場合、スレッドの実行に使用できる時間を無駄にしています。

そのため、簡素化されたスレッド スケジューラを使用し、必要に応じてプログラムに独自のポリシーを指定させる方が効率的であることがよくあります。これは、スレッド アフィニティの設定です。

于 2011-04-24T23:40:58.283 に答える