floating-point-Operationen pro Zyklus - intel
Ich Suche schon eine ganze Weile und kann nicht scheinen zu finden, ein offizieller/schlüssige Abbildung unter Angabe der Anzahl der single-precision-floating-point-Operationen/Takt, dass ein Intel Xeon quadcore abgeschlossen werden kann. Ich habe einen Intel Xeon quadcore E5530 CPU.
Ich bin der Hoffnung, es zu verwenden, um die Berechnung der maximalen theoretischen FLOP/s meine CPU erreichen kann.
MAX-FLOPS = (# Anzahl Kerne) * (Clock-Frequenz (Zyklen/sec)) * (#- FLOPS /Zyklus)
Nichts verweist mich in die richtige Richtung wäre hilfreich. Ich habe festgestellt, dass dies
FLOPS pro Zyklus für sandy-bridge und haswell SSE2/AVX/AVX2
Intel Core 2 und Nehalem:
4 DP-FLOPs/Zyklus: 2-Breite SSE2 neben + 2-breiten SSE2 Multiplikation
8 SP-FLOPs/Zyklus: 4-Breite SSE-Zusatz + 4-Breite SSE-Multiplikation
Aber ich bin mir nicht sicher, wo Sie diese zahlen gefunden wurden. Sind Sie unter der Annahme einer fused multiply-add (FMAD) Betrieb?
EDIT: Mit diesem, in DP berechne ich die richtige DP-Arithmetik Durchsatz angeführt von Intel als 38.4 GFLOP/s (zitiert hier). Für SP, ich bekomme das doppelte, 76.8 GFLOP/s. Ich bin mir ziemlich sicher, dass 4 DP-FLOPS/Zyklus und 8 SP FLOP/cycle ist richtig, ich möchte nur eine Bestätigung, wie Sie bekam die FLOPs/cycle-Wert von 4 und 8.
- (8 SP-FLOPs/Zyklus) * (4-Kerne) * (2.4 GHz) = 76.8 GFLOP/s. Der Prozessor kann sowohl eine add-und multiply-Instruktion pro Zyklus. Aber Sie sind nicht miteinander verschmolzen.
- Sie können wahrscheinlich nicht finden, eine offizielle Zahl, denn es ist nicht einer - es ist stark abhängig von der mix von Anweisungen, die Sie haben, und die Abhängigkeiten zwischen Ihnen. Das theoretische maximum könnte berechnet werden, aber es gibt sehr wenige nützliche real-world-Programme (andere als die synthetischen benchmarks), dass wäre genau der richtige mix von Anweisungen, die in genau der richtigen Reihenfolge zu erreichen, die maximale...
- Und wenn Sie neugierig zu sehen, wie die Erreichung der maximalen FLOP/s nehmen Sie einen Blick auf: stackoverflow.com/questions/8389648/..., Dass man für die doppelte Genauigkeit, aber es kann leicht modifiziert werden, um so einfacher Genauigkeit.
- In der Praxis ist man oft will, laden/speichern von Daten sowie eine Berechnung. So, während Sie theoretische Werte für die peak-FLOPS sind gut, um zu wissen, dass es nicht sehr sinnvoll, wenn die Daten nicht gelesen werden können in schnell genug, um dies zu erreichen. Eine weitere nützliche Metrik gibt auch die Anzahl der floating-point-laden/Läden, die gewonnen werden, während. E. g a SB core laden kann, 4 Doppelzimmer pro Takt und 8 Doppel-Operationen (4 Multiplikationen und 4 Ergänzungen) pro Takt-Zyklus. Die Beschaffung dieser ist schwieriger, als einfach nur tun, die Berechnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehalem ist in der Lage die Ausführung 4 DP oder 8 SP FLOP/cycle. Dies wird durch die Verwendung SSE, die arbeitet auf packed-floating-point-Werte, 2/- register in DP-und 4/register, SP. Um das zu erreichen 4 DP-FLOPS/Zyklus oder 8 SP FLOP/cycle-core ausführen 2 SSE-Anweisungen pro Zyklus ermöglicht. Dies wird erreicht durch ausführen einer MULDP und ein ADDDP (oder ein MULSP und ein ADDSP) pro Zyklus. Der Grund dies möglich ist, da Nehalem hat eine separate execution units SSE multiplizieren und SSE-hinzufügen, und diese Einheiten sind per Pipeline, so dass die
throughput
ist eine Multiplikation und ein add pro Zyklus. Vermehrt sind in der Multiplikator-pipeline für 4 Zyklen in SP und 5 Zyklen in DP. Ergänzt sind in der pipeline für 3 Zyklen unabhängig von SP/DP. Die Anzahl der Zyklen in der pipeline ist bekannt als dielatency
. Berechnen peak-FLOP/cycle-alles, was Sie wissen müssen, ist der Durchsatz. Also mit einem Durchsatz von 1 SSE-Vektor-Instruktion/Zyklus sowohl für den Multiplikator und die Kreuzotter (2 execution units) Sie haben 2 x 2 = 4 FLOP/Takt in DP und 2 x 4 = 8 FLOPS/Zyklus in SP. Tatsächlich durchziehen, peak Durchsatz, den Sie benötigen, zu prüfen, Latenz (Sie müssen also mindestens so viele unabhängige Operationen in der pipeline als die Tiefe der pipeline), und Sie müssen in Betracht ziehen, in der Lage zu füttern, die Daten schnell genug. Nehalem hat einen integrierten Speicher-controller in der Lage sehr hohe Bandbreite von Speicher, die Sie erreichen können, wenn die Daten-prefetcher richtig, rechnet das Zugriffsmuster der Daten (sequentiell laden aus dem Speicher ist ein triviales Muster, die Sie es absehen können). In der Regel gibt es nicht genug memory-Bandbreite zu erhalten Fütterung alle Kerne mit Daten in peak-FLOPS/Zyklus, so dass eine gewisse Menge an Wiederverwendung der Daten aus dem cache ist notwendig, um nachhaltig peak-FLOP/cycle.Details auf, wo finden Sie Informationen über die Anzahl der selbständigen Erledigung Einheiten und deren Durchsatz und Latenz in Zyklen folgt.
Siehe Seite 105 8.9 Ausführung Einheiten dieses Dokument
http://www.agner.org/optimize/microarchitecture.pdf
Er sagt, dass für den Nehalem
Um 8 SP FLOP/cycle 4 SP HINZUFÜGEN/Zyklus und 4 SP MUL/Zyklus. Die Addierer und Multiplizierer sind auf separaten Ausführung der Einheiten und der Versand von separaten ports, jeder ausführen kann, auf 4 SP gepackten Operanden gleichzeitig mit SSE verpackt (Vektor -) Anweisungen (4x32bit = 128bits). Beide haben Durchsatz von 1 operation pro Takt-Zyklus. Um zu bekommen, dass der Durchsatz, die Sie benötigen, zu prüfen, die Wartezeit... wie viele Zyklen nach der Anleitung Fragen, bevor Sie Sie verwenden das Ergebnis.. also Ihr müsst mehrere unabhängige Befehle zur Deckung der Latenz. Der Multiplikator single precision hat eine Latenz von 4 und der Addierer der 3.
Finden Sie diese gleichen Durchsatz und Latenz-Nummern für Nehalem bei Intel Optimization guide, Tabelle C-15a
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html