web-dev-qa-db-ja.com

`mpirun -np N`:` N`が私の物理コアよりも大きい場合はどうなりますか?

4コアのワークステーションがあるとすると、Linux(Ubuntu)を実行するとどうなりますか

mpirun -np 9 XXX
  1. 9はすぐに一緒に実行されますか、それとも4の後に4が実行されますか?

  2. 残りの1はコンピューターを混乱させるので、9を使用するのは良くないと思います(まったく混乱するのか、コンピューターの「ヘッド」が4つのコアのどれを決定するのかはわかりません)。使用されますか?)またはランダムに選択されます。誰がどのコアを呼び出すかを決定しますか?

  3. CPUが悪くなく、RAMが大丈夫で十分な大きさであり、ケースがそれほど大きくないと感じた場合。 CPUとRAMを完全に使用するには、mpirun -np 8 XXX、さらにはmpirun -np 12 XXXを実行することをお勧めします。

5
Daniel
  1. それらはすべて同時に実行されます
  2. 負荷はOSによって分散され、使用可能なコアの数だけ処理されます。時間はスレッドの数に比例しない場合があります。これがその理由のばかげた例です。 3回実行したいジョブが1つあり、毎回同じ時間(1単位時間)かかるとします。 2つのコアがあります。他に何も実行されていないと仮定します。
    • ケース1:スレッドは1つだけです。この場合、スレッドは1つのコアで実行され、すべてが完了するまでに3単位の時間がかかります。 合計時間:
    • ケース2:2つのスレッドがあります。 1単位の時間で、ジョブは2回(コアごとに1回)実行されます。次に、3回目の反復が完了するまで単位時間全体を待つ必要があります。 合計時間:2
    • ケース3:スレッドが3つあります。 OSはすべてを公平にしようとするため、3つのプロセス間で時間を均等に分割します。それまでにユニット1の終わりまでに、それらのどれも完了しません。ユニット2までに、それらはすべて完了します。 (上記のケースを参照)。 合計時間:2

より多くのスレッドを開始しても、パフォーマンスにそれほど悪影響はありませんが(スレッドの開始コストは、1 MB未満です)、どちらも役に立たない可能性があります。

何がより高速であるかを知る唯一の方法は、それをテストすることですが、ガイドとして次のルールを使用してください。少なくともコアと同じ数のスレッドを使用してください。さらに、プロセスのいたるところに大量のメモリアクセスがある場合、コアよりも多くのスレッドを使用する方が実際には高速である可能性があります(メモリアクセスは他の命令の実行に比べて非常に遅く、OSは何かの実際の実行で時間を埋めますそれ以外の場合は待つ必要はありません)。

2
soandos

限られたテストと、並列計算についての私の理解(数回使用したことはありますが、それほど深くはありません)から:

  1. それらは同時に実行されます。

  2. 負荷はコア間で分散されます。コンピューターが「混乱」することはありませんが、パフォーマンスの向上はほとんど(またはまったく)得られません(各コアが複数のタスクを処理しているため)。最悪の場合、それは物事を遅くする可能性があります。

  3. せいぜい、コアの数と同じ数を実行する必要があります。より大きな値(理由の範囲内。非常に大きな数値を指定すると、RAMまたはシステムが非常に遅くなる)が不足する可能性があります)は実行されますが、メリットがないか、速度が低下する可能性があります。 。しかし、それは試みを傷つけることはありません。

1
Renan