Domanda

Ho guardato attraverso i vecchi thread ma non sono riuscito a trovare la risposta alla mia domanda:

Come posso sincronizzare il corpo della mia funzione all'interno di un programma C?

È stato utile?

Soluzione

Un metodo semplice è usare la funzione 'clock':

#include <time.h>

clock_t start, end;
double cpu_time_used;

start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;

O se sei su Linux puoi usare il comando 'time' per calcolare il tempo di esecuzione della tua app; questo non ti consente di programmare una specifica sezione di codice, ma include il tempo impiegato per avviare il processo, ecc.

time ./myapp

Modifica: questo è un approccio di base "hack-in-a-quick-timer". Per una vera profilazione delle prestazioni vuoi guardare un profiler adeguato, come suggerito da Larry Watanabe.

Altri suggerimenti

Dipende dal tuo compilatore e sistema operativo. Sulle stazioni di lavoro Sun, utilizzavo "prof" o " gprof " ;. Esiste sicuramente uno strumento di profilazione per il compilatore, il sistema operativo e la macchina: basta google "C profilo tuoOS tuo compilatore" (sostituisci il nome del tuo sistema operativo e del tuo compilatore)

Il metodo di base sta usando la funzione clock (), è qui che abbiamo iniziato tutti.

Esempio:.


clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);

Tuttavia, quando inizi a conoscere sistemi operativi, hardware, programmatori, multi-threading, ecc. Ti sei reso conto che il tempo di esecuzione è qualcosa di molto soggettivo. Quando vuoi misurare le prestazioni (che non significa necessariamente tempi di esecuzione) allora hai bisogno di strumenti più robusti.

Gprof è davvero facile da usare Profiler C, che potrebbe aiutarti a comprendere meglio il concetto di performance.

time ./a.out

corri sopra uno e l'output sarà:

real    0m0.017s
user    0m0.017s
sys 0m0.000s

real : tempo totale da fine a fine preso dal programma / comando

user : tempo impiegato in modalità utente.

sys : tempo impiegato in modalità kernel

Non sono sicuro dei nomi di funzioni specifiche in C, ma una pratica comune è quella di memorizzare un timestamp di microsecondi prima che inizi il corpo, quindi afferrarne un altro alla fine e sottrarre.

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