2012-09-30 21 views
7

Wie kann ich FLOPS meiner Anwendung berechnen? Wenn ich die Gesamtzahl der ausgeführten Anweisungen habe, kann ich sie durch die Ausführungszeit teilen. Aber, wie die Anzahl der ausgeführten Anweisungen zu zählen?Berechnen von FLOPS (Gleitkommaoperationen pro Sekunde)

Meine Frage ist allgemein und Antwort für jede Sprache wird sehr geschätzt. Aber ich suche nach einer Lösung für meine Anwendung, die von C/C++ und CUDA entwickelt wurde.

Ich weiß nicht, ob die Tags korrekt sind, bitte korrigieren Sie mich, wenn ich falsch liege.

+0

möglich Duplikat von [Wie Gflops eines Kernels zu berechnen] (http://stackoverflow.com/questions/7875607/how-to-calculate-gflops-of-a-kernel) – talonmies

+0

Ich bin mir dieser Frage bewusst! Meine Frage ist allgemein. Wie berechnet man FLOPS? Sogar Multi-Core. Die Antwort könnte auch meinem Fall "CUDA" helfen. – ahmad

+3

Ich habe geschrieben, wie NVIDIA-Tools verwendet werden können, um FLOPs in [Berechnung der erreichten Bandbreite und FLOPS ...] (http://stackoverflow.com/questions/12539300/calculating-achied-bandwidth-and-flops-gflops-and) zu sammeln -evaluate-cuda-kernel-perfor). Für x86 gibt es mehrere Linux-Bibliotheken zur Berechnung von FLOPs. Der x86-Leistungsmonitor unterstützt das Zählen von FLOPs, aber Sie müssten das Handbuch lesen, um die Besonderheiten zu verstehen (spekulative Anweisungen, was gezählt wird, ...) –

Antwort

7

Was ich mache, wenn die Anzahl der Gleitkommaoperationen nicht einfach modelliert werden kann, sind zwei ausführbare Dateien: Eines ist die Produktionsversion und gibt mir die Ausführungszeit, und ein instrumentiertes zählt alle Fließkommaoperationen während der Ausführung (sicherlich wird das langsam sein, aber das ist für unseren Zweck nicht wichtig). Dann kann ich den FLOP/s-Wert berechnen, indem ich die Anzahl der Gleitkommaoperationen von der zweiten ausführbaren durch die Zeit von der ersten dividiere.

Dies könnte wahrscheinlich sogar automatisiert werden, aber ich hatte dies bisher nicht nötig.

6

Sie sollten mathematisch modellieren, was mit Ihren Daten gemacht wird. Isolieren Sie eine Schleifeniteration. Zählen Sie dann alle einfachen Gleitkomma-Additionen, Multiplikationen, Divisionen usw. Zum Beispiel y = x * 2 * (y + z*w) ist 4 Fließkommaoperationen. Multiplizieren Sie die resultierende Zahl mit der Anzahl der Iterationen. Das Ergebnis ist die Anzahl der Anweisungen, nach denen Sie suchen.

+0

Gut für kohärente Kontrollflüsse und deterministische Verzweigungen. Sie ist im Code mit eingabebedingten bedingten Verzweigungen nicht anwendbar (die dynamische Laufzeit legt fest, wie viele FPs ausgeführt werden). – ahmad

+0

ignorieren Sie bedingte Anweisungen wie if (i MySchizoBuddy

Verwandte Themen