Newsgroup: it.comp.lang.c
Titolo: Come calcolare il tempo

Ciao a tutti,
c'è qualcuno che cortesemente mi potrebbe indicare come calcolare il
tempo di esecuzione di codice. Ovviamente avrò bisogno di una funzione
che riesce al rilevare anche intervalli molto brevi.
Grazie a tutti

root wrote:

ciao
se non sbaglio la funzione
clock_t clock(void);
dovrebbe restituire il tempo trascorso dall'avvio del
programma in centesimi di secondo.
ciao
davide

Davide wrote:

Grazie David,
adesso la provo, poi ti faccio sapere!

 che riesce al rilevare anche intervalli molto brevi.
Puoi usare la funzione clock:
#include <time.h>
int main () {
	clock_t i, f;
	double diff;
 
	i = clock();
	do_something();
	f = clock();
	diff = (f - i) / (double)CLOCKS_PER_SEC;
	printf("tempo trascorso: %f\n", diff);
	return 0;
}
La risoluzione non e` pero` molto elevata. Per misurare intervalli molto
brevi ti devi appoggiare a funzioni specifiche dell'OS su cui lavori.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Ci sono le balle , le megaballe e le statistiche".
 Mark Twain

Kronos wrote:

Ciao Kronos,
ti ringrazio... infatti ho fatto delle prove ma più del centesimo (?) non si
va.
Il mio sitema è Linux, però non sono riuscito a trovare niente di specifico
per precisioni dell'ordine della frazione di secondo.
Ciao e grazie ancora!

 programma in centesimi di secondo.
l'unita di misura non e' sempre "centesimi di secondo". Esiste la macro 
CLOCKS_PER_SEC che indica quanti cicli clock ci sono in un secondo.
Inoltre, la risoluzione effettiva del clock potrebbe essere anche 
minore dell'unita' di misura di clock_t.
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 
ciao,
se in un prog. faccio scrivere il valore di CLOCKS_PER_SEC
  printf("CLOCKS_PER_SEC = %ld\n\n",CLOCKS_PER_SEC);
ottengo:
  CLOCKS_PER_SEC = 1000000
vuol dire che nel mio sistema la funzione clock mi restituisce il
tempo in milionesimi di secondo ?
ciao
davide


prova la gettimeofday...
man gettimeofday
ciao diego

Davide wrote:

Non necessariamente. Lo standard Posix definisce che la macro 
CLOCKS_PER_SEC sia *sempre* 1000000, e così avviene su linux, che tu usi.
Difatti, dall'info per la libc:
  - Macro: int CLOCKS_PER_SEC
      The value of this macro is the number of clock ticks per second
      measured by the `clock' function.  POSIX requires that this value
      is one million independent of the actual resolution.
Dunque in un sistema POSIX compliant la funzione clock() ritorna sempre 
e comunque millionesimi di secondo, indipendentemente dalla effettiva 
risoluzione del clock usato.
Fabio Alemagna

 Ciao e grazie ancora!
man getrusage potrebbe esserti d'aiuto

Domenico Delle Side wrote:

Grazie Domenic,
e mille grazie anche agli altri.... adesso proverò a dare un'occhiata....
Bye

 tempo in milionesimi di secondo ?
si. Pero' attento: il fatto che il valore sia espresso in milionesimi 
non significa che tu riuscirai a misurare variazioni nell'ordine di un 
milionesimo di secondo (quella che si chiama "risoluzione" del timer). 
Un esempio dovrebbe chiarire:
[anto@localhost anto]$ cat prova.c
#include <stdio.h>
#include <time.h>
 
int main()
{
  int count = 0;
  clock_t cur, prev;
  cur = prev = clock();
  while(count < 10) {
    cur = clock();
    if (cur != prev) {
      printf("%d\n", cur);
      prev = cur;
      count++;
    }
  }
}
[anto@localhost anto]$ gcc prova.c
[anto@localhost anto]$ ./a.out
10000
20000
30000
40000
50000
60000
70000
80000
90000
100000
[anto@localhost anto]$
Come puoi vedere i valori sono espressi in milionesimi di secondo, ma 
la variazione minima (la risoluzione) e' di un centesimo.


Antonio Cuni wrote:

č vero!!!
grazie per l'esempio.
davide