Sind die arithmetischen negate zählen als Gleitkommaoperation?
-
29-09-2019 - |
Frage
Ich messe derzeit die Leistung von einigem Code in FLOPS. Dieser Code stellt einige Arithmetik negate Anweisungen wie diese:
d = -a
wo d
und a
sind Gleitkommavariablen. Die Architektur ich zur Zeit mit hat spezifische negate Anweisungen. Sollte ich berücksichtigen diese Art von Operationen zu ergreifen, um Maß FLOPS? Welche Art von Operationen entfallen FLOPS? Gibt es eine Konvention oder irgendetwas?
Lösung
Wie gesagt @Andrey, um sicher zu sein, sollten Sie den demontierten Code überprüfen.
Aber im Allgemeinen ja, würde der Befehl wahrscheinlich auf einer FPU auszuführen. Es klappt einfach ein wenig, so dass es könnte als auch auf einer Integer-Einheit durchgeführt werden, aber da Sie Betrieb auf Fließkommawerte, wird diese höchstwahrscheinlich bereits in FP-Register geladen, und so gibt‘ d eine ganze Menge Aufwand sein, um sie zu Universalregister zu bewegen, das Bit-Flipping und sie zurück zu bewegen.
Ich weiß nicht, ob es eine komplette Universalführung ist es, „was als FLOP gezählt werden sollte“, aber das ist wahrscheinlich eine Anweisung, die auf einer FPU ausführt, und so ist es mit anderen FP-Befehlen für Ressourcen konkurrieren auf der CPU, also ja, ich würde es gehört in einer Zählung FLOP.
Andere Tipps
versuchen, den Code zu zerlegen und prüfen, wie dieser Vorgang durchgeführt wird.
Wenn es Anweisung FCHS
(Change Zeichen) verwendet, dann können Sie es für Gleitkommaoperation.
MSVC (Visual Studio 2008)
double c = -b;
00971397 fld qword ptr [b]
0097139A fchs
0097139C fstp qword ptr [c]
FCHS - das sehen?
Es ist eine Art Konvention zur Berechnung des LINPACK als eine Art Standard-Benchmark FLOP verwendet wird.