Fa il negate aritmetica conta come un'operazione in virgola mobile?
-
29-09-2019 - |
Domanda
Attualmente sto misurare le prestazioni di un certo codice in FLOPS. Questo codice presenta alcune istruzioni aritmetiche negare come questo:
d = -a
dove d
e a
sono galleggianti variabili point. L'architettura Attualmente sto usando non avere istruzioni negare specifiche. avrei dovuto prendere in considerazione questo tipo di operazioni a misura flop? Che tipo di operazioni rappresentano FLOPS? C'è una convenzione o altro?
Soluzione
Come @Andrey detto, per essere sicuri si dovrebbe verificare il codice disassemblato.
Ma in generale, sì, l'istruzione sarebbe probabilmente eseguito su una FPU. Si gira semplicemente un po ', in modo che potrebbero essere fatto su un'unità integer pure, ma dal momento che si opera su valori in virgola mobile, questi sono molto probabilmente già caricato in registri FP, e quindi non c'è' d essere una discreta quantità di overhead per spostarli in registri di uso generale, lanciando il bit e spostando indietro.
Non so se v'è una guida universale completa a "ciò che dovrebbe essere considerato come un flop", ma questo è più probabile un'istruzione che esegue su una FPU, e così si è in competizione con altre istruzioni FP per le risorse sulla CPU, quindi sì, vorrei includere in un CADUTE conteggio.
Altri suggerimenti
prova per smontare il codice e verificare come viene eseguita questa operazione.
se utilizza l'istruzione FCHS
(Cambia segno), allora si può prendere in considerazione il funzionamento punto mobile.
MSVC (Visual Studio 2008)
double c = -b;
00971397 fld qword ptr [b]
0097139A fchs
0097139C fstp qword ptr [c]
fchs - vedere che?
C'è una sorta di convenzione per calcolare il flop con LINPACK come una sorta di benchmark standard.