web-dev-qa-db-ja.com

FLOPS Sandy-bridgeおよびhaswell SSE2 / AVX / AVX2のサイクルごと

Sandy-BridgeとHaswellを使用すると、コアあたり1サイクルあたりのフロップ数がどれくらいになるかについて混乱しています。 SSEで理解したように、SSEではコアあたりサイクルあたり4フロップ、AVX/AVX2ではコアあたりサイクルあたり8フロップである必要があります。

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

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

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

編集:私は今、私が混乱した理由を理解しています。 FLOPという用語は、単一の浮動小数点(SP)のみを指すと思いました。 サイクルあたり4 FLOPsの理論上の最大値を達成する方法 のテストは実際には二重浮動小数点(DP)であるため、SSEで4 DP FLOPs /サイクルを達成していることがわかります。およびAVX用の8 DP FLOP /サイクル。 SPでこれらのテストをやり直すのは興味深いでしょう。

49
user2088790

ここに、最近のプロセッサーのマイクロアーキテクチャーの数に対する理論上の最大FLOPカウント(per core)とそれらを達成する方法の説明を示します。

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

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

Intel

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

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

  • 4 DP FLOP /サイクル:2ワイドSSE2加算+ 2ワイドSSE2乗算
  • 8 SP FLOPs/cycle:4-wide SSE足し算+ 4-wide SSE乗算

Intel Sandy Bridge/Ivy Bridge(AVX1):

  • 8 DP FLOP /サイクル:4ワイドAVX加算+ 4ワイドAVX乗算
  • 16 SP FLOPs/cycle:8ワイドAVX加算+ 8ワイドAVX乗算

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

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

Intel Skylake-X/Skylake-EP/Cascade Lake/etc(AVX512F)with1 FMAユニット:一部のXeon Bronze/Silver

  • 16 DP FLOP /サイクル:1つの8ワイドFMA(融合乗算加算)命令
  • 32 SP FLOPs/cycle:16ワイドFMA(融合乗算加算)命令1つ
  • より狭い256ビット命令と同じ計算スループットですが、より広いロード/ストア、ビット単位演算のようなFMAユニットで実行されないいくつかのベクトル演算、およびより広いシャッフルのために、AVX512でさらに高速化が可能です。
  • (512ビットのベクトル命令を飛行中にすると、ポート1のベクトルALUがシャットダウンされます。また、が最大ターボクロック速度を下げるため、「cycles」は 'パフォーマンス計算の定数。)

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

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

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

現在のIntelチップは、iGPUの標準float16で直接実際の計算のみを行います。


AMD

AMD K10:

  • 4 DP FLOP /サイクル:2ワイドSSE2加算+ 2ワイドSSE2乗算
  • 8 SP FLOPs/cycle:4-wide SSE足し算+ 4-wide SSE乗算

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

  • 8 DP FLOP /サイクル:4ワイドFMA
  • 16 SP FLOPs/cycle:8ワイドFMA

AMD Ryzen

  • 8 DP FLOP /サイクル:4ワイドFMA
  • 16 SP FLOPs/cycle:8ワイドFMA

x86低電力

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

  • 1.5 DP FLOP /サイクル:スカラーSSE2の加算+ 1サイクルごとのスカラーSSE2の乗算
  • 6 SP FLOPs/cycle:4-wide SSE足し算+ 4-wide SSE 1サイクルごとの乗算

AMDボブキャット:

  • 1.5 DP FLOP /サイクル:スカラーSSE2の加算+ 1サイクルごとのスカラーSSE2の乗算
  • 4 SP FLOPs/cycle:4-wide SSE 1サイクルごとに加算+ 4-wide SSE 1サイクルごとに乗算

AMD Jaguar:

  • 3 DP FLOP /サイクル:1サイクルごとに4ワイドAVX加算+ 4サイクルで4ワイドAVX乗算
  • 8 SP FLOPs/cycle:1サイクルごとに8ワイドAVX加算+ 1サイクルごとに8ワイドAVX乗算


ARM

ARM Cortex-A9:

  • 1.5 DP FLOPs/cycle:スカラー加算+ 1サイクルおきのスカラー乗算
  • 4 SP FLOPs/cycle:1サイクルごとの4ワイドNEON加算+ 1サイクルごとの4ワイドNEON乗算

ARM Cortex-A15:

  • 2 DP FLOP /サイクル:スカラーFMAまたはスカラー積和
  • 8 SP FLOPs/cycle:4ワイドNEONv2 FMAまたは4ワイドNEON乗加算

Qualcomm Krait:

  • 2 DP FLOP /サイクル:スカラーFMAまたはスカラー積和
  • 8 SP FLOPs/cycle:4ワイドNEONv2 FMAまたは4ワイドNEON乗加算

IBM POWER

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

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

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

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

Intel MIC/Xeon Phi

インテルXeon Phi(ナイツコーナー)、コアごと:

  • 16 DP FLOP /サイクル:サイクルごとに8ワイドFMA
  • 32 SP FLOPs/cycle:サイクルごとに16ワイドFMA

インテルXeon Phi(ナイツコーナー)、スレッドごと:

  • 8 DP FLOP /サイクル:1サイクルおきに8ワイドFMA
  • 16 SP FLOPs/cycle:1サイクルおきに16ワイドFMA

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

  • 32 DP FLOP /サイクル:サイクルごとに2つの8ワイドFMA
  • 64 SP FLOPs/cycle:サイクルごとに2つの16幅FMA

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

105
Marat Dukhan

Haswellのスループットは、乗算とFMAよりも加算のほうが低くなります。 2つの乗算/ FMAユニットがありますが、f.pは1つだけです。ユニットを追加します。コードに主に追加が含まれている場合は、最大スループットを得るために、1.0の乗数を持つFMA命令で追加を置き換える必要があります。

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

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

19
A Fog