2011-01-28 13 views
2

ハイパースレッディング対応マルチコアプロセッサの仕組みをよりよく理解しようとしています。私はMPIまたはOpenMPまたはMPI + OpenMPでコンパイルできるアプリケーションを持っているとしましょう。私はそれが4つのXeon X7560 @ 2.27GHzプロセッサを搭載したCentOS 5.3ボックスでどのようにスケジューリングされ、各プロセッサコアにハイパースレッディングが有効になっているのだろうかと思います。ハイパースレッディング対応のマルチコアマシンでは、どのようにアプリケーションをスケジューリングしますか?

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

  1. はどのように多くの物理mpirun -np 16を実行するとコアが使用されますか?利用可能な16個の物理コアまたは16個の論理プロセッサ(ハイパースレッディングを使用する8個の物理コア)に分割されていますか?

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

  3. MPICH2 + OpenMPでコンパイル OMP_NUM_THREADS = 16に設定してmpirun -np 16で実行すると、いくつの物理コアが使用されますか?

  4. OpenMPIの

    でコンパイル

OpenMPIのは、二つのランタイム・オプション

ジョブに割り当てられた論理CPUを指定-cpuセット、 -cpuあたりのPROCにCPUの数を指定有します各プロセスに使用します。

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

おかげ

ジェリー

答えて

0

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

1

可能であれば、異なる物理プロセッサ上でスレッドを実行することを賢明なスケジューラが望むと思います。それから私はそれが異なる物理的なコアを好むことを期待します。最後に、必要ならば、各物理コア上でハイパースレッディングされた2番目のスレッドを使い始めるでしょう。

基本的にスレッドがプロセッサリソースを共有する必要がある場合、スレッドは遅くなります。したがって、最適な戦略は、通常、プロセッサリソースの共有量を最小限に抑えることです。これはCPUバインドされたプロセスの正しい戦略であり、それは通常、OSが扱っていると仮定したものです。

0

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

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

同じデータを扱うスレッドは、キャッシュのローカリティの恩恵を受けるため、キャッシュを共有するようにそれらを互いに近くにスケジュールすることがアイデアポリシーです。

同じデータで動作し、大量のパイプラインストールを経験するスレッドは、ハイパースレッドコアを共有する利点があります。各スレッドは、停止するまで実行され、その時点で他のスレッドが実行されます。ストールなしで実行されるスレッドは、ハイパースレッディングによって傷つき、異なるコアで実行する必要があります。

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

単純なスレッドスケジューラを使用し、必要に応じてプログラムで独自のポリシーを指定する方が効率的です。これはスレッドアフィニティ設定です。

関連する問題