複数のCPU、マルチスレッドパフォーマンス

複数のCPU、マルチスレッドパフォーマンス

私のプログラム:100% CPUとRAMベース、実行する数学的計算最初にHDDからRAMにデータを読み込みます。スレッド間の通信はありません。スレッドはすべて同時また(ほぼ)。

質問:

プログラムが CPU スレッド数と同じ数のスレッドを使用する場合、2 CPU システムではどのようなパフォーマンスが期待できますか?

たとえば、8 コアの Xeon を 2 つ使用し、それぞれに 16 スレッドがある場合、合計 16 x 2 = 32 スレッドになります。プログラムが 32 スレッドを使用し、すべて 100% 使用率の場合、同じ CPU 1 つと比べてパフォーマンスが 2 倍になりますか?

答え1

実際のところ、最も適切な答えは「おそらくそうではないが、場合による」です。 利用可能な CPU の生のパワーは 2 倍ありますが、次のようになります。

  1. 実際に使用可能なメモリ帯域幅が 2 倍になるわけではありません。

  2. CPU 間でいくつかのキャッシュ ラインを「ピンポン」するには時間がかかります。

  3. 場合によっては、1 つのスレッドが別のスレッドを待機しなければならないことがあり、スレッドの数が多いほど、その頻度も高くなります。

  4. 時には、やるべき仕事がたくさんあるにもかかわらず、それを一度にすべてこなすことができないことがあります。

等々。

非常に稀なケースですが、もっとパフォーマンスは 2 倍以上になります。操作がキャッシュに制限されている場合、コアの数が増えるとスレッドの実行時間が長くなり (他のコアが他の処理を実行しているため、コアには他の処理がないため)、CPU キャッシュがより長時間ホットな状態を維持できるようになります。

答え2

パフォーマンスに関する質問に対する究極の答えは、推測するのではなく、テストすることです。

答え3

あなたは、恥ずかしいほど似ている計算タスクの場合、答えは「はい」であり、スループットは使用される CPU スレッドの合計にほぼ比例して増加します。

関連情報