|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
[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: 1727
|
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: 1727
|
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: 13827
|
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 20: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: 00:38.



















