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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top