FLOP (le lettere minuscole s indicano il plurale di FLOP, per commento di Martinho Fernandes) si riferiscono alle istruzioni in virgola mobile del linguaggio macchina, quindi dipende da quante istruzioni viene compilato il codice.
Prima di tutto, se tutte queste variabili sono numeri interi, non ci sono FLOP in questo codice. Supponiamo, tuttavia, che il tuo linguaggio riconosca tutte queste costanti e variabili come variabili in virgola mobile a precisione singola (usando una precisione singola, il caricamento delle costanti è più semplice).
Questo codice potrebbe compilare a (su MIPS):
Assignment of variables: x is in $f1, a is in $f2, i is in $f3.
All other floating point registers are compiler-generated temporaries.
$f4 stores the loop exit condition of 10.0
$f5 stores the floating point constant 1.0
$f6 stores the floating point constant 2.0
$t1 is an integer register used for loading constants
into the floating point coprocessor.
lui $t1, *upper half of 0.0*
ori $t1, $t1, *lower half of 0.0*
lwc1 $f3, $t1
lui $t1, *upper half of 10.0*
ori $t1, $t1, *lower half of 10.0*
lwc1 $f4, $t1
lui $t1, *upper half of 1.0*
ori $t1, $t1, *lower half of 1.0*
lwc1 $f5, $t1
lui $t1, *upper half of 2.0*
ori $t1, $t1, *lower half of 2.0*
lwc1 $f6, $t1
st: c.gt.s $f3, $f4
bc1t end
add.s $f1, $f1, $f5
lui $t1, *upper half of 5.0*
ori $t1, $t1, *lower half of 5.0*
lwc1 $f2, $t1
mul.s $f2, $f2, $f1
add.s $f2, $f2, $f6
add.s $f3, $f3, $f5
j st
end: # first statement after the loop
Quindi, secondo la definizione di Gabe, ci sono 4 FLOPS all'interno del ciclo (3x add.s
e 1x mul.s
). Ci sono 5 FLOP se si conta anche il confronto del ciclo c.gt.s
. Moltiplicalo per 10 per un totale di 40 (o 50) FLOP usati dal programma.
Un compilatore di ottimizzazione migliore potrebbe riconoscere che il valore di a
non è utilizzato all'interno del ciclo, quindi è necessario calcolare solo il valore finale di a
. Si potrebbe generare il codice che sembra
lui $t1, *upper half of 0.0*
ori $t1, $t1, *lower half of 0.0*
lwc1 $f3, $t1
lui $t1, *upper half of 10.0*
ori $t1, $t1, *lower half of 10.0*
lwc1 $f4, $t1
lui $t1, *upper half of 1.0*
ori $t1, $t1, *lower half of 1.0*
lwc1 $f5, $t1
lui $t1, *upper half of 2.0*
ori $t1, $t1, *lower half of 2.0*
lwc1 $f6, $t1
st: c.gt.s $f3, $f4
bc1t end
add.s $f1, $f1, $f5
add.s $f3, $f3, $f5
j st
end: lui $t1, *upper half of 5.0*
ori $t1, $t1, *lower half of 5.0*
lwc1 $f2, $t1
mul.s $f2, $f2, $f1
add.s $f2, $f2, $f6
In questo caso, si dispone di 2 aggiunge e 1 confronto all'interno del ciclo (moltiplicato per 10 vi dà 20 o 30 FLOPS), più 1 moltiplicazione e 1 Oltre al di fuori del ciclo. Pertanto, il tuo programma impiega 22 o 32 FLOP a seconda che contiamo le comparazioni.
Nitpick: FLOPS è ** FL ** punto oating ** O ** perazioni ** P ** er ** S ** econd, una misura della prestazione. FLOP è ** FL ** punto oating ** OP ** eration. FLOP (lettere minuscole) è il plurale di FLOP. –
Non si menzionano i tipi di variabile. Se sono tutti interi, è 0 flop. –
FLOPS è specifico per le operazioni in virgola mobile. Forse ti interessano i "cicli" (numero di tick necessari alla CPU per eseguire determinati compiti)? –