|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
[ASM x86] Dove trovo il numero di cicli usati da ogni istruzione?
Ciao ,
ho ripreso in mano l'asm dopo un po' e mi sto divertendo a farci un po' di cose dietro :P Però mi chiedo una cosa .Vedo molti di voi che fanno il calcolo di quanti clicli di clock verranno utilizzati dal processore per fare una certa operazione , ma dove si trovano tabelle che indicano su un processore x86 standard quanti cicli di clock ci vogliono per eseguire una data istruzione?? Grazie Ciao
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Re: [ASM x86] Dove trovo il numero di cicli usati da ogni istruzione?
Quote:
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
dimenticavo di dirti che esistono anche tecniche di pipelining, quindi se stai cercando di scrivere codice superottimizzato devi considerare anche quegli aspetti
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quando spaciugavo con hashing e crittografia mi ero scritto delle macro che usavano l'istruzione rdtsc per calcolare il numero esatto di cicli di clock che venivano usati. se vuoi posso provare a ritrovarle.
ciao ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
|
Ok, boys
Scusate per la risposta tarda ma oggi dovevo studiare sodo ![]() Comunque grazie infinite per le info ![]() Se vic riesci a trovare quelle macro potrebbero sempre rivelarsi moooolto utili ![]() (comunque ho trovato la documentazione AMD relativa all' athlon, il mio procio ) Una domanda però mi sorge . Infondo al PDF dove c'è la tabella delle istruzioni e i vari cicli di clock usati le varie istruzioni sono differenziate per operatori e ho visto che ci sono operatori tipo "reg8" ,"reg16" ... e poi operatori tipo "mreg8", "mreg16" .... Andando a vedere la differenza tra i due nel PDF ho visto questo : Codice:
reg8 byte integer register defined by instruction byte(s) or bits 5, 4, and 3 of the modR/M byte mreg8 byte integer register defined by bits 2, 1, and 0 of the modR/M byte reg16/32 word and doubleword integer register defined by instruction byte(s) or bits 5, 4, and 3 of the modR/M byte mreg16/32 word and doubleword integer register defined by bits 2, 1, and 0 of the modR/M byte Se qualcuno mi può illuminare ... ![]() Ciao
__________________
GPU Compiler Engineer Ultima modifica di AnonimoVeneziano : 14-01-2005 alle 19:04. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Posto qui il codice, potrebbe servire anche ad altri.
Codice:
/* Conta il numero di clock impiegati dalla cpu per eseguire tutte * le istruzioni tra due punti. */ #include <stdio.h> #include <inttypes.h> static inline long long rdtsc(void) { long long l; asm volatile("rdtsc\n\t" : "=A" (l) ); return l; } #define rdtsc_start()\ uint64_t start;\ uint64_t end;\ start = rdtsc () #define rdtsc_stop(name)\ end = rdtsc ();\ {\ uint64_t tot = 0;\ tot = end - start;\ fprintf (stdout, "%Ld cicli in %s\n", tot, name);\ } int main (int argc, char **argv) { int k; for (k = 0; k<10; k++){ rdtsc_start(); int i; for (i = 0; i < 100; i++) { double a = log2 (i); } rdtsc_stop ("main"); } return 0; } ![]() |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:11.