60

Sandy-BridgeとHaswellを使用して、コアごとに1サイクルあたり何フロップを実行できるかについて混乱しています。SSEで理解しているように、SSEの場合はコアあたり1サイクルあたり4フロップス、AVX/AVX2の場合はコアあたり1サイクルあたり8フロップスである必要があります。

これはここで確認されているよう です。サイクルあたり理論上の最大4FLOPを達成するにはどうすればよいですか? 、そしてここでは、 Sandy-BridgeCPU仕様

ただし、以下のリンクは、Sandy-bridgeがコアあたりサイクルあたり16フロップス、Haswellがコアあたりサイクルあたり32フロップスを実行できることを示しているようです http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented -threat-to-nvidia-amd

誰かが私にこれを説明できますか?

編集:私は今、なぜ私が混乱したのか理解しました。FLOPという用語は単精度浮動小数点(SP)のみを指すと思いました。サイクルあたり理論上の最大4FLOPを達成するにはどうすればよいですか?実際には倍精度浮動小数点(DP)上にあるため、SSEの場合は4 DP FLOP /サイクル、AVXの場合は8DPFLOP/サイクルを達成します。SPでこれらのテストをやり直すのは興味深いことです。

4

2 に答える 2

121

ここでは、最近の多数のプロセッサマイクロアーキテクチャの理論上の最大FLOPカウント(コアあたり)と、それらを実現する方法について説明します。

一般に、これを計算するには、たとえばhttps://agner.org/optimize/またはその他のマイクロベンチマーク結果でFMA命令のスループットを調べ、を乗算し
(FMAs per clock) * (vector elements / instruction) * 2 (FLOPs / FMA)ます。
実際のコードでこれを実現するには、非常に注意深い調整(ループ展開など)が必要であり、キャッシュミスがほぼゼロであり、のボトルネックがないことに注意してください。最近のCPUはFMAスループットが非常に高いため、結果を保存したり、入力をフィードしたりするための他の命令の余地はあまりありません。たとえば、クロックあたり2つのSIMD負荷も、ほとんどのx86 CPUの制限であるため、ドット積は、1つのFMAあたり2つの負荷でボトルネックになります。ただし、注意深く調整された密行列の乗算は、これらの数値の達成に近づく可能性があります。

ワークロードに、FMAに契約できないADD / SUBまたはMULが含まれている場合、理論上の最大数はワークロードの適切な目標ではありません。Haswell / Broadwellには、クロックごとに2つのSIMD FP乗算(FMAユニット上)がありますが、クロックごとに1つだけSIMD FP加算(レイテンシが低い別のベクトルFP加算ユニット上)があります。Skylakeは、個別のSIMD FP加算器を削除し、add / mul / fmaを、任意のベクトル幅に対して4cのレイテンシー、2クロックあたり2のスループットで同じように実行しました。

インテル

最近のマイクロアーキテクチャのCeleron/Pentiumバージョンは、AVXまたはFMA命令をサポートしておらず、SSE4.2のみをサポートしていることに注意してください。

Intel Core 2およびNehalem(SSE / SSE2):

  • 4 DP FLOP /サイクル:2ワイドSSE2加算+2ワイドSSE2乗算
  • 8 SPフロップ/サイクル:4ワイドSSE加算+4ワイドSSE乗算

Intel Sandy Bridge / Ivy Bridge(AVX1):

  • 8 DP FLOP /サイクル:4ワイドAVX加算+4ワイドAVX乗算
  • 16 SPフロップ/サイクル:8ワイドAVX加算+8ワイドAVX乗算

Intel Haswell / Broadwell / Skylake / Kaby Lake / Coffee / ...(AVX + FMA3):

  • 16 DP FLOP /サイクル:2つの4幅FMA(融合乗算-加算)命令
  • 32 SPフロップ/サイクル:2つの8幅FMA(融合乗算-加算)命令
  • (256ビットのベクトル命令を使用すると、一部のCPUで最大ターボクロック速度が低下する可能性があります。)

Intel Skylake-X / Skylake-EP / Cascade Lake / etc(AVX512F)、1 FMAユニット:Xeonブロンズ/シルバー

  • 16 DP FLOP /サイクル:1つの8幅FMA(融合乗算加算)命令
  • 32 SPフロップ/サイクル:1つの16幅FMA(融合乗算加算)命令
  • より狭い256ビット命令の場合と同じ計算スループットですが、より広いロード/ストア、ビット単位の操作のようにFMAユニットで実行されないいくつかのベクトル操作、およびより広いシャッフルのためにAVX512を使用して高速化を行うことができます。
  • (512ビットのベクトル命令を飛行中に使用すると、ポート1のベクトルALUがシャットダウンします。また、最大ターボクロック速度が低下するため、パフォーマンス計算では「サイクル」は一定ではありません。)

Intel Skylake-X / Skylake-EP / Cascade Lake / etc(AVX512F)、2つのFMAユニット:Xeon Gold / Platinum、およびi7 / i9ハイエンドデスクトップ(HEDT)チップ。

  • 32 DPフロップ/サイクル:2つの8ワイドFMA(融合乗算-加算)命令
  • 64 SPフロップ/サイクル:2つの16幅FMA(融合乗算-加算)命令
  • (512ビットのベクトル命令を飛行中に持つと、ポート1のベクトルALUがシャットダウンします。また、最大ターボクロック速度が低下します。)

将来:Intel Cooper Lake(Cascade Lakeの後継)は、ニューラルネットワークワークロード用のfloat16形式であるBrain Floatを導入し、実際のSIMD計算をサポートする予定です。これは、ロード/ストアのみをサポートする現在のF16C拡張機能とは異なります。 float32への変換。これにより、同じハードウェアでの単精度と比較して、FLOP/サイクルスループットが2倍になるはずです。

現在のIntelチップは、iGPUの標準float16で直接実際に計算するだけです。


AMD

AMD K10:

  • 4 DP FLOP /サイクル:2ワイドSSE2加算+2ワイドSSE2乗算
  • 8 SPフロップ/サイクル:4ワイドSSE加算+4ワイドSSE乗算

AMD Bulldozer / Piledriver / Steamroller / Excavator、モジュールごと(2コア):

  • 8 DPフロップ/サイクル:4ワイドFMA
  • 16 SPフロップ/サイクル:8ワイドFMA

AMD Ryzen

  • 8 DPフロップ/サイクル:4ワイドFMA
  • 16 SPフロップ/サイクル:8ワイドFMA

x86低電力

Intel Atom(Bonnell / 45nm、Saltwell / 32nm、Silvermont / 22nm):

  • 1.5 DP FLOP /サイクル:スカラーSSE2加算+1サイクルおきのスカラーSSE2乗算
  • 6 SPフロップ/サイクル:4ワイドSSE加算+1サイクルおきに4ワイドSSE乗算

AMDボブキャット:

  • 1.5 DP FLOP /サイクル:スカラーSSE2加算+1サイクルおきのスカラーSSE2乗算
  • 4 SPフロップ/サイクル:1サイクルおきに4ワイドSSE加算+1サイクルおきに4ワイドSSE乗算

AMD Jaguar:

  • 3 DP FLOP /サイクル:1サイクルおきに4ワイドAVX加算+4サイクルで4ワイドAVX乗算
  • 8 SPフロップ/サイクル:1サイクルおきに8ワイドAVX加算+1サイクルおきに8ワイドAVX乗算


ARM Cortex-A9:

  • 1.5 DP FLOP /サイクル:1サイクルおきにスカラー加算+スカラー乗算
  • 4 SPフロップ/サイクル:1サイクルおきに4ワイドNEON加算+1サイクルおきに4ワイドNEON乗算

ARM Cortex-A15:

  • 2 DP FLOP /サイクル:スカラーFMAまたはスカラー乗算-加算
  • 8 SPフロップ/サイクル:4ワイドNEONv2FMAまたは4ワイドNEON乗算-加算

Qualcomm Krait:

  • 2 DP FLOP /サイクル:スカラーFMAまたはスカラー乗算-加算
  • 8 SPフロップ/サイクル:4ワイドNEONv2FMAまたは4ワイドNEON乗算-加算

IBM POWER

IBM PowerPC A2(Blue Gene / Q)、コアごと:

  • 8 DPフロップ/サイクル:サイクルごとに4ワイドQPX FMA
  • SP要素はDPに拡張され、同じユニットで処理されます

IBM PowerPC A2(Blue Gene / Q)、スレッドごと:

  • 4 DPフロップ/サイクル:1サイクルおきに4ワイドQPX FMA
  • SP要素はDPに拡張され、同じユニットで処理されます

Intel MIC / Xeon Phi

Intel Xeon Phi(Knights Corner)、コアごと:

  • 16 DPフロップ/サイクル:サイクルごとに8ワイドFMA
  • 32 SPフロップ/サイクル:サイクルごとに16ワイドFMA

Intel Xeon Phi(Knights Corner)、スレッドごと:

  • 8 DPフロップ/サイクル:1サイクルおきに8ワイドFMA
  • 16 SPフロップ/サイクル:1サイクルおきに16ワイドFMA

Intel Xeon Phi(Knights Landing)、コアごと:

  • 32 DPフロップ/サイクル:サイクルごとに2つの8ワイドFMA
  • 64 SPフロップ/サイクル:サイクルごとに2つの16ワイドFMA

IBM Blue Gene/QおよびIntelXeonPhi(Knights Corner)にスレッドごとおよびコアごとのデータがある理由は、コアごとに複数のスレッドを実行すると、これらのコアの命令発行率が高くなるためです。

于 2013-03-27T11:31:13.600 に答える
21

Haswellのスループットは、乗算やFMAよりも加算の方が低くなります。2つの乗算/FMAユニットがありますが、1つのfp加算ユニットのみです。コードに主に追加が含まれている場合、最大のスループットを得るには、追加を1.0の乗数を持つFMA命令に置き換える必要があります。

HaswellでのFMA命令のレイテンシは5で、スループットはクロックあたり2です。これは、最大のスループットを得るには、10回の並列操作を維持する必要があることを意味します。たとえば、非常に長いfp番号のリストを追加する場合は、それを10個の部分に分割し、10個のアキュムレータレジスタを使用する必要があります。

これは確かに可能ですが、特定の1つのプロセッサに対してこのような奇妙な最適化を行うのは誰でしょうか。

于 2013-07-24T13:35:59.530 に答える