4

最新のマルチコア プラットフォームでは、メモリ帯域幅が制限されたアプリケーションの並列パフォーマンスは、多くの場合、コアの数に応じて適切にスケーリングされません。通常、ある程度のコア数まで高速化が見られますが、それ以降は性能が飽和します。総合的な例として、有名なSTREAM ベンチマークがあります。これは、達成可能なメモリ帯域幅、つまり飽和点でのメモリ帯域幅を報告するためによく使用されます。

ピーク メモリ帯域幅が 42.7GB/s (DDR3-1333) の単一の Xeon E5-2680 での STREAM ベンチマーク (Triad) の次の結果を考慮してください。

1  core  16 GB/s
2  cores 30 GB/s
3+ cores 36 GB/s

STREAM は 1 コアから 2 コアまで適切にスケーリングしますが、3 コアを超えると、パフォーマンスはほぼ一定になります。

私の質問は、単一の CPU コアで達成できるメモリ帯域幅を決定するものは何ですか? この質問は明らかに範囲が広すぎるため、上記のアーキテクチャに絞り込みます: E5-2680 の仕様から、またはハードウェア カウンターなどを見て、1 スレッドの STREAM で 16 GB/s が得られることをどのように予測できますか? ?

4

1 に答える 1

2

シングル コアの場合、主な要因は CPU 周波数と CPU マイクロ アーキテクチャです。つまり、シングル コアがバスにリクエストを送信する速度と、アクセスするメモリ ロケーションを CPU がどれだけ正確に予測できるかです。 . CPU 設計者は、物事を実際よりも速く見えるようにし、レイテンシの影響を隠すために多大な努力を払います。メモリ アクセスがランダムで、コードの実行がデータに依存する場合、メモリ アクセスのレイテンシを考慮に入れる必要があります。大量のデータを読み取るだけで、それを合計すると帯域幅が得られると言います。ただし、シングルコアの場合、絶対的な上限はクロック速度です。

マルチスレッド アクセスの場合、ボトルネックはマザーボード上のバスと RAM アーキテクチャ、およびノー​​ス ブリッジになります。したがって、マザーボードによって異なります。50% 遅い DRAM を使用できますが、4 つを並列に使用して高速化を実現できます。またはその逆。

しかし、質問は非常に広いです。プログラマの観点からメモリについて詳しく知りたい場合は、すべてのプログラマがメモリについて知っておくべきことを参照してください。さまざまな要因について詳しく説明しています。

それは非常に深いトピックです。

PS、予測に関しては、まったく不可能であるか、まったく実用的ではありません。CPU、チップセット、マザーボード、および RAM の非常に詳細な仕様にアクセスできない限り、測定はより優れています。特定のワークロードの下で、実際に測定する方がよいでしょう。

于 2014-02-05T23:45:58.953 に答える