[OT]: cicli in assembler
Un saluto a tutta la lista.
Nel tentativo di ottimizzare un programmino al massimo grado mi sono
imbattuto nell' assembler
Siccome l' ultima volta che l' ho utilizzato era per il commodore 64
osservo alcune stranezze che non so spiegarmi.
Il PC e' un AMD64 con una debian testing sopra.
Il seguente programmino viene eseguito in 0.19 sec.
Il registro rax e' inizializzato a 1
.L2:
movsd a.1246+8(,%rax,8), %xmm0
mulsd %xmm0, %xmm0
movsd %xmm0, b.1245+8(,%rax,8)
addq $1, %rax
cmpq $9999999, %rax
jne .L2
se cambio la riga "addq $1, %rax"
con la riga "addq $2, %rax"
Dovrei eseguire il ciclo solo la meta' delle volte rispetto al caso
precedente. Il tempo di esecuzione tuttavia rimane invariato (0.19
sec).
Se pero' tolgo le istruzioni movsd e mulsd cambiando
"addq $1, %rax"
con
"addq $2, %rax"
il tempo si dimezza.
Inoltre se tolgo solo mulsd (ossia la moltiplicazione) il tempo rimane
di circa (0.19sec).
Qualcuno sa indicarmi la causa oppure dove potrei reperire informazioni
al riguardo? Dalle ricerche fatte con google non sono riuscito a trovare
il numero di cicli di clock per ogni istruzione.
Ciao e grazie
--
Stefano Simonucci
GNU/Linux User: #81790 http://counter.li.org
Reply to: