Domanda

Devo misurare, in C ++ su Linux (e altri sistemi simili a Unix), il tempo CPU (non wall clock) impiegato da un lungo calcolo, quindi sto usando clock (). Problema: sui sistemi a 32 bit, questo si avvolge dopo circa 2000 o 4000 secondi.

Qual è la soluzione alternativa consigliata per questo?

È stato utile?

Soluzione

Vuoi usare getrusage che riempie la seguente struttura:

struct rusage {
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    ...
};

Per il completamento, struct timeval :

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

Come sempre, consultare la manpage per i dettagli ( man getrusage )

Altri suggerimenti

Hai bisogno della precisione fornita da clock () ? In caso contrario, puoi usare time () due volte e fare la differenza:

time_t start, end;
double diff;

time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);

EDIT: time () misura il tempo reale (non il tempo della CPU) come indicato da litb nel suo commento, ma anche clock () . Se vuoi misurare il tempo della CPU, dovresti seguire i consigli di litb e usare getrusage () .

Un altro metodo possibile è utilizzare gettimeofday () due volte poiché restituisce la precisione ms.

Prendi il tempo su base ricorrente e incrementa anche una variabile moltiplicatrice int ogni volta che passa sopra?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top