wake-up-neo.com

FLOPS pro Zyklus für Sandbrücken- und Haswell-SSE2 / AVX / AVX2

Ich bin verwirrt darüber, wie viele Flops pro Zyklus und Kern mit Sandy-Bridge und Haswell gemacht werden können. Wie ich es mit SSE verstehe, sollte es 4 Flops pro Zyklus pro Kern für SSE und 8 Flops pro Zyklus pro Kern für AVX/AVX2 sein.

Dies scheint hier bestätigt zu werden Wie erreiche ich das theoretische Maximum von 4 FLOPs pro Zyklus? und hier Sandy-Bridge-CPU-Spezifikation .

Der folgende Link scheint jedoch darauf hinzudeuten, dass Sandy-Bridge 16 Flops pro Zyklus pro Kern und Haswell 32 Flops pro Zyklus pro Kern ausführen kann http://www.extremetech.com/computing/136219-intels-haswell-is) -eine-beispiellose-Bedrohung-für-nvidia-AMD .

Kann mir das jemand erklären?

Edit: Ich verstehe jetzt, warum ich verwirrt war. Ich dachte, der Begriff FLOP bezog sich nur auf Single Floating Point (SP). Ich sehe jetzt, dass der Test bei Wie erreiche ich das theoretische Maximum von 4 FLOPs pro Zyklus? tatsächlich auf doppeltem Gleitkomma (DP) liegt, so dass sie 4 DP-FLOPs/Zyklus für SSE und 8 DP-FLOPs/Zyklus für AVX. Es wäre interessant, diesen Test auf SP zu wiederholen.

49
user2088790

Hier sind die theoretischen maximalen FLOP-Zählwerte ( pro Kern ) für eine Reihe neuerer Prozessor-Mikroarchitekturen und eine Erläuterung, wie diese erreicht werden können.

Um dies zu berechnen, wird im Allgemeinen der Durchsatz der FMA-Anweisung (en) nachgeschlagen, z. am https://agner.org/optimize/ oder einem anderen Mikrobenchmark-Ergebnis und multiplizieren
(FMAs per clock) * (vector elements / instruction) * 2 (FLOPs / FMA).
Beachten Sie, dass dies in echtem Code durch sehr sorgfältiges Tuning (wie das Auflösen von Schleifen), Cache-Fehlschläge nahe Null und keine Engpässe bei irgendetwas erreicht werden muss else. Moderne CPUs haben einen so hohen FMA-Durchsatz, dass für andere Anweisungen, um die Ergebnisse zu speichern oder sie mit Eingaben zu versorgen, nicht viel Platz ist. z.B. 2 SIMD-Ladevorgänge pro Takt sind für die meisten x86-CPUs ebenfalls die Obergrenze, sodass ein Punktprodukt bei 2 Ladevorgängen pro 1 FMA einen Engpass darstellt. Eine sorgfältig abgestimmte dichte Matrixmultiplikation kann jedoch nahe daran liegen, diese Zahlen zu erreichen.

Wenn Ihre Arbeitslast ADD/SUB oder MUL enthält, die nicht an FMA vergeben werden können, sind die theoretischen Höchstzahlen kein angemessenes Ziel für Ihre Arbeitslast. Haswell/Broadwell haben 2-pro-Takt-SIMD FP multiplizieren (auf den FMA-Einheiten), aber nur 1 pro Takt-SIMD FP addieren (auf einem separaten Vektor) FP Einheit mit geringerer Latenz hinzufügen). Skylake hat den separaten SIMD FP) -Addierer fallen gelassen und add/mul/fma mit 4 c Latenz ausgeführt. Taktdurchsatz für jede Vektorbreite.

Intel

Beachten Sie, dass Celeron/Pentium-Versionen neuerer Mikroarchitekturen keine AVX- oder FMA-Anweisungen unterstützen, nur SSE4.2.

Intel Core 2 und Nehalem (SSE/SSE2):

  • 4 DP-FLOPs/Zyklus: 2-weite SSE2-Addition + 2-weite SSE2-Multiplikation
  • 8 SP FLOPs/Zyklus: 4-wide SSE Addition + 4-wide SSE Multiplikation

Intel Sandy Bridge/Ivy Bridge (AVX1):

  • 8 DP-FLOPs/Zyklus: 4-weite AVX-Addition + 4-weite AVX-Multiplikation
  • 16 SP FLOPs/Zyklus: 8-weite AVX-Addition + 8-weite AVX-Multiplikation

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

  • 16 DP-FLOPs/Zyklus: zwei 4-weite FMA-Anweisungen (Fused Multiplly Add)
  • 32 SP FLOPs/Zyklus: zwei 8-weite FMA-Anweisungen (Fused Multiplly Add)
  • (Die Verwendung von 256-Bit-Vektoranweisungen kann bei einigen CPUs die maximale Turbo-Taktrate verringern.)

Intel Skylake-X/Skylake-EP/Cascade Lake/usw. ( AVX512F ) mit 1 FMA-Einheiten : etwas Xeon Bronze/Silber

  • 16 DP-FLOPs/Zyklus: eine 8-weite FMA-Anweisung (Fused Multiply Add)
  • 32 SP FLOPs/Cycle: Ein 16-Wide-FMA-Befehl (Fused Multiply Add)
  • Gleicher Rechendurchsatz wie bei schmaleren 256-Bit-Befehlen, aber mit AVX512 können noch höhere Geschwindigkeiten für größere Ladevorgänge, einige Vektoroperationen, die auf den FMA-Einheiten nicht ausgeführt werden, wie bitweise Operationen, und größere Mischvorgänge erzielt werden.
  • (Wenn sich 512-Bit-Vektoranweisungen im Flug befinden, wird die Vektor-ALU an Port 1 heruntergefahren. Außerdem wird mit die maximale Turbotaktgeschwindigkeit verringert, sodass "Zyklen" nicht möglich sind.) t eine Konstante in Ihren Leistungsberechnungen.)

Intel Skylake-X/Skylake-EP/Cascade Lake/usw. ( AVX512F ) mit 2 FMA-Einheiten : Xeon Gold/Platinum- und i7/i9-High-End-Desktop-Chips (HEDT).

  • 32 DP-FLOPs/Zyklus: Zwei 8-weite FMA-Anweisungen (Fused Multiplly Add)
  • 64 SP FLOPs/Zyklus: zwei 16-weite FMA-Anweisungen (Fused Multiply Add)
  • (Wenn 512-Bit-Vektoranweisungen im Flug sind, wird die Vektor-ALU an Port 1 heruntergefahren. Reduziert auch die maximale Turbotaktgeschwindigkeit.)

Future: Intel Cooper Lake (Nachfolger von Cascade Lake) wird voraussichtlich Brain Float einführen, ein float16-Format für Workloads in neuronalen Netzwerken mit Unterstützung für die eigentliche SIMD-Berechnung. Im Gegensatz zur aktuellen F16C-Erweiterung, die nur das Laden/Speichern mit Konvertierung in float32 unterstützt. Dies sollte den FLOP/Cycle-Durchsatz gegenüber der einfachen Genauigkeit auf derselben Hardware verdoppeln.

Aktuelle Intel-Chips können nur direkt auf dem Standard float16 in der iGPU berechnet werden.


AMD

AMD K10:

  • 4 DP-FLOPs/Zyklus: 2-weite SSE2-Addition + 2-weite SSE2-Multiplikation
  • 8 SP FLOPs/Zyklus: 4-wide SSE Addition + 4-wide SSE Multiplikation

AMD Bulldozer/Piledriver/Steamroller/Bagger, pro Modul (zwei Kerne):

  • 8 DP-FLOPs/Zyklus: 4-weite FMA
  • 16 SP FLOPs/Zyklus: 8-weite FMA

AMD Ryzen

  • 8 DP-FLOPs/Zyklus: 4-weite FMA
  • 16 SP FLOPs/Zyklus: 8-weite FMA

x86 geringer Stromverbrauch

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

  • 1,5 DP-FLOPs/Zyklus: skalare SSE2-Addition + skalare SSE2-Multiplikation in jedem zweiten Zyklus
  • 6 SP FLOPs/Zyklus: 4-wide SSE Addition + 4-wide SSE Multiplikation jeden zweiten Zyklus

AMD Bobcat:

  • 1,5 DP-FLOPs/Zyklus: skalare SSE2-Addition + skalare SSE2-Multiplikation in jedem zweiten Zyklus
  • 4 SP FLOPs/Zyklus: 4-weit SSE Addition jeden zweiten Zyklus + 4-weit SSE Multiplikation jeden zweiten Zyklus

AMD Jaguar:

  • 3 DP-FLOPs/Zyklus: 4-weite AVX-Addition in jedem zweiten Zyklus + 4-weite AVX-Multiplikation in vier Zyklen
  • 8 SP FLOPs/Zyklus: 8-weite AVX-Addition in jedem zweiten Zyklus + 8-weite AVX-Multiplikation in jedem zweiten Zyklus


ARM

ARM Cortex-A9:

  • 1,5 DP-FLOPs/Zyklus: Skalaraddition + Skalarmultiplikation in jedem zweiten Zyklus
  • 4 SP FLOPs/Zyklus: 4-weite NEON-Addition in jedem zweiten Zyklus + 4-weite NEON-Multiplikation in jedem zweiten Zyklus

ARM Cortex-A15:

  • 2 DP-FLOPs/Zyklus: skalare FMA oder skalare Multiplikationsaddition
  • 8 SP FLOPs/Zyklus: 4-wide NEONv2 FMA oder 4-wide NEON multiplizieren addieren

Qualcomm Krait:

  • 2 DP-FLOPs/Zyklus: skalare FMA oder skalare Multiplikationsaddition
  • 8 SP FLOPs/Zyklus: 4-wide NEONv2 FMA oder 4-wide NEON multiplizieren addieren

IBM POWER

IBM PowerPC A2 (Blue Gene/Q), pro Kern:

  • 8 DP-FLOPs/Zyklus: 4 QPX-FMA in jedem Zyklus
  • SP-Elemente werden auf DP erweitert und auf denselben Geräten verarbeitet

IBM PowerPC A2 (Blue Gene/Q), pro Thread:

  • 4 DP-FLOPs/Zyklus: 4 QPX-FMA in jedem zweiten Zyklus
  • SP-Elemente werden auf DP erweitert und auf den gleichen Geräten verarbeitet

Intel MIC/Xeon Phi

Intel Xeon Phi (Knights Corner), pro Kern:

  • 16 DP-FLOPs/Zyklus: 8-weite FMA in jedem Zyklus
  • 32 SP FLOPs/Zyklus: 16-weite FMA in jedem Zyklus

Intel Xeon Phi (Knights Corner), pro Thread:

  • 8 DP-FLOPs/Zyklus: 8-weite FMA in jedem zweiten Zyklus
  • 16 SP FLOPs/Zyklus: 16-weite FMA in jedem zweiten Zyklus

Intel Xeon Phi (Knights Landing), pro Kern:

  • 32 DP-FLOPs/Zyklus: zwei 8-fache FMA pro Zyklus
  • 64 SP FLOPs/Zyklus: zwei 16-fache FMA in jedem Zyklus

Der Grund, warum es für IBM Blue Gene/Q und Intel Xeon Phi (Knights Corner) Daten pro Thread und pro Kern gibt, ist, dass diese Kerne eine höhere Befehlsausgaberate aufweisen, wenn mehr als ein Thread pro Kern ausgeführt wird.

105
Marat Dukhan

Der Durchsatz für Haswell ist für Addition geringer als für Multiplikation und FMA. Es gibt zwei Multiplikations-/FMA-Einheiten, aber nur eine f.p. Einheit hinzufügen. Wenn Ihr Code hauptsächlich Zusätze enthält, müssen Sie die Zusätze durch FMA-Anweisungen mit einem Multiplikator von 1,0 ersetzen, um den maximalen Durchsatz zu erzielen.

Die Latenz von FMA-Befehlen auf Haswell beträgt 5 und der Durchsatz 2 pro Takt. Dies bedeutet, dass Sie 10 parallele Vorgänge ausführen müssen, um den maximalen Durchsatz zu erzielen. Wenn Sie beispielsweise eine sehr lange Liste von f.p. Zahlen müssten Sie es in zehn Teile teilen und zehn Akkumulatorregister verwenden.

Dies ist zwar möglich, aber wer würde eine so seltsame Optimierung für einen bestimmten Prozessor vornehmen?

19
A Fog