2016-12-25 2 views
0

Bei der Messung eines Algorithmus, wenn Divisionsoperationen vorliegen, wie berechnet man die Gesamtzahl der FOP- und Gleitkomma-Performance? Zum Beispiel, n2 Matrixmultiplikation, die Berechnung von n3 * 2flops (eine Multiplikation, eine Addition), unter der Annahme, dass unter Verwendung des gleichen Datensatzes n2, Multiplikationsoperationen der Matrixmultiplikation in die Divisionsoperationen ändern, wie zu berechnen Flops. Ist es das gleiche mit dem Ergebnis der Matrixmultiplikation?Wie berechnet man die Gesamtzahl der FOP- und Gleitkomma-Performance von Sonderoperationen (exp sin sqrt)?

Antwort

1

Leider gibt es keinen Standard, der angibt, was eine Fließkommaoperation ist.
Dies ist aufgrund der Tatsache, dass verschiedene Architekturen native Unterstützung für eine andere Reihe von Operationen haben können.
So zum Beispiel Architektur A Mai unterstützt die alle vier Grundoperationen, A nur die Zugabe und A alle grundlegenden Operationen und Exponentiation.

Im Allgemeinen ist der Begriff Fließkommaoperationen stark kontextualisiert und an eine bestimmte Maschine gebunden.

Sie können jedoch eine gute maschinenunabhängige Analyse durchführen, indem Sie jede Art von Operation separat zählen.
Dies erfordert ein wenig Erfahrung und Voodoo, zum Beispiel Addition und Subtraktion werden zusammen gezählt, weil sie im Grunde die gleiche Operation für die Hardware sind.
Multiplikationen und Divisionen werden getrennt gezählt, wie komplexere Operationen (Exponentiation, trigonometrische Funktionen usw.).

Am Ende haben Sie eine Zählung für alle verschiedenen Operationen.
beispielsweise eine n × m Matrix durch eine m × k eines beinhaltet n · k · m Multiplikationen und n · k · (m multipliziert -1) Ergänzungen. so ist das Ergebnis n· k ·m MUL + n · k · ( m -1) dazu.

Aus diesem "Full-Information" -Ausdruck, der normalerweise ein gutes Ergebnis ist, können Sie eine Näherung der Anzahl der "Fließkommaoperationen" erhalten, indem Sie eine Referenzmaschine und die Maßeinheit aufnehmen.

Zum Beispiel der Skylake Mikroarchitektur von Intel hat diese sehr vereinfacht timings table:

Operation    Cycles 

Addition    0.5 
Subtraction   0.5 
Division    3 
Multiplication  0.5 

Wenn wir die Addition als Maßeinheit für einen FLOP nehmen, können wir sagen, dass eine Abteilung so lange ist wie 6 Zusätze, so ist es wie 6 FLOPs.

Operation    FLOPs 

Addition    1 (By definition) 
Subtraction   1 
Division    6 
Multiplication  1 

So das Beispiel reduziert die oben n · k · (2 ​​· m-1), da Multiplikation und Addition alle nehmen nur 1 FLOP abzuschließen.

Dies ist eine vereinfachte Ansicht, echte Maschinen sind viel komplizierter (zum Beispiel Skylake hat Vektor-Einheiten und FMA Unterstützung, die die Maßeinheit und die Zeiten ändern kann).
Wie auch immer, der Ausdruck in Bezug auf die verschiedenen Arten von Operationen ist maschinenunabhängig und kann später in eine einzelne Zahl umgewandelt werden, wenn ein spezieller Fall ausgeführt wird.

Verwandte Themen