Vorrei misurare il tempo di sistema necessario per l'esecuzione del codice. Per fare questo so che sarebbe panino detto codice tra due chiamate a getrusage(), ma ho alcuni risultati inaspettati ...Come ottenere getrusage() per misurare l'ora del sistema in C
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>
int main() {
struct rusage usage;
struct timeval start, end;
int i, j, k = 0;
getrusage(RUSAGE_SELF, &usage);
start = usage.ru_stime;
for (i = 0; i < 10000; i++) {
/* Double loop for more interesting results. */
for (j = 0; j < 10000; j++) {
k += 20;
}
}
getrusage(RUSAGE_SELF, &usage);
end = usage.ru_stime;
printf("Started at: %ld.%lds\n", start.tv_sec, start.tv_usec);
printf("Ended at: %ld.%lds\n", end.tv_sec, end.tv_usec);
return 0;
}
Mi auguro che questo produce due numeri diversi, ma ahimè! Dopo aver visto il mio computer pensare per un secondo o due, questo è il risultato:
Started at: 0.1999s
Ended at: 0.1999s
Am non ho utilizzando getrusage() giusto? Perché questi due numeri non dovrebbero essere diversi? Se sono fondamentalmente sbagliato, c'è un altro modo di usare getrusage() per misurare il tempo di sistema di qualche codice sorgente? Grazie per aver letto.
Si noti che 'tv_usec' sono microsecondi, quindi il formato dovrebbe essere'% lu.% 06u'. – Mapio