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

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

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

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

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

  3. 私のCPUがかなり良いと感じたら、メモリも大丈夫で十分に大きく、私のケースはそれほど大きくはありません。私のCPUとRAMを最大限に活用するには、これは良いアイデアですかmpirun -np 8 XXXmpirun -np 12 XXX

答え1

  1. すべて同時に実行されます。
  2. 負荷は、できるだけ多くのコアで実行されるようにオペレーティングシステムによって分散されます。時間はスレッド数に比例しない場合があります。これは愚かな例です。 3回行う必要がある作業があり、毎回同じ時間(1時間単位)がかかるとしましょう。 2つのコアがあります。他は実行されていないと仮定します。
    • ケース1:スレッドは1つだけです。この場合、スレッドは1つのコアで実行され、プロセス全体を完了するのに3単位の時間がかかります。総時間:3
    • ケース2:2つのスレッドがあります。これは、1単位時間に2回(各コアに対して1回)実行されます。その後、3回目の繰り返しが完了するまで、合計時間単位を待つ必要があります。総時間:2
    • ケース 3: スレッドが 3 つあります。オペレーティングシステムはすべてを公平にしようとするので、3つのプロセス間で時間が均等に分配されます。レッスン 1 が終了するまで、それらのどれも完了しません。 2団員まですべて完了しました。 (上記のケースを参照)総時間:2

より多くのスレッドを起動しても実際にパフォーマンスに大きな影響はありませんが(スレッドの開始コストは1MB未満)、役に立たない可能性があります。

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

答え2

限られたテストと並列コンピューティングの私の理解に基づいています(何度も試してみましたが、それほど深くはありません)。

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

  2. 負荷はコア間に分散されます。コンピュータは「混乱」しませんが、パフォーマンスの向上はほとんどまたはまったく得られません(各コアは複数のタスクを処理するため)。最悪の場合、作業速度が遅くなります。

  3. 最大で、あなたが持っているコアの数に似た数を実行したいと思います。より大きな値(合理的に、膨大な数を提供すると、RAMが不足したり、システムが非常に遅くなる可能性があります)が実行されます。どんな利点も得られないかもしれませんし、遅くなるかもしれません。それでも試してみるのは悪くありません。

関連情報