PDA

View Full Version : Efficienza programmi e bench


supermario
23-11-2006, 23:25
mi chiedevo se avete da proporre soluzione per monitorizzare i tempi di esecuzione di un programma, apportunamente tarato per fare molti calcoli e operazioni in memoria


in particolare(nel mio caso) qualcosa di implementabile universalmente in un programma scritto in C


ciauz

cionci
24-11-2006, 11:36
Che funzioni universalmente c'è solo la funzione time()...che ti ritorna il tempo in secondi...
Puoi benissimo fare la differenza fra due chiamate successive, ma ovviamente ha granularità al secondo.

supermario
24-11-2006, 12:41
infatti questo è quello che mi aveva detto il mio prof, ma io pensavo a qualcosa di + preciso...visto che non sono programmi complicatissimi

andbin
24-11-2006, 13:12
infatti questo è quello che mi aveva detto il mio prof, ma io pensavo a qualcosa di + preciso...visto che non sono programmi complicatissimitime() è una funzione "standard" ma è precisa al secondo. Gestire informazioni sul "tempo" in modo molto più preciso richiede l'utilizzo di funzioni specifiche del sistema operativo.
Su Windows si può usare la funzione Win32 GetTickCount() che ritorna il numero di millisecondi dall'avvio del sistema. Però non ha una granularità esatta del millisecondo ... qualcosa di più.
Altrimenti ci sono i "performance counter", ancora più precisi. Vedere le funzioni Win32 QueryPerformanceFrequency() e QueryPerformanceCounter().

cionci
24-11-2006, 15:04
ma io pensavo a qualcosa di + preciso...visto che non sono programmi complicatissimi
C'è, ma non è standard e dipende dal sistema operativo...

andrea
24-11-2006, 20:13
Mettere una funzioncina inline asm per leggere il registro rdtsc? Pero' mi sa che la portabilità non e' il suo forte.

andbin
24-11-2006, 20:56
Mettere una funzioncina inline asm per leggere il registro rdtsc? Pero' mi sa che la portabilità non e' il suo forte.Primo: RDTSC consente di leggere il time-stamp counter a 64 bit ma se non sai o non determini la frequenza di clock del processore, ti serve a molto poco.

Secondo: RDTSC è una istruzione "privileged". In modalità protetta, può essere eseguita solo se si è a "ring 0" (CPL 0) oppure se il bit TSD di CR4 è 0.