Calcolo del tempo di esecuzione del programma C ++ in microsecondi
Sfortunatamente, non ci sono metodi per capire il tempo di esecuzione preciso che funziona per tutti. Per questo, devi scegliere la soluzione in base alla situazione. Misurare il tempo di esecuzione accurato di un programma C ++ può essere difficile in alcune situazioni a causa di problemi di portabilità. Selezionare i metodi giusti che si adattano al sistema operativo e alla versione del compilatore è essenziale per ottenere un tempo accurato. Ancora più importante, devi capire cosa intendi esattamente per "tempo" in modo da poter scegliere il metodo di conseguenza.
Qui troverai un elenco completo di alcune opzioni semplici, semplici e migliori disponibili per trovare il tempo di esecuzione di un programma C ++. Elencheremo anche i limiti delle funzioni per darti un heads-up prima di iniziare a utilizzare quella funzione nel tuo programma.
Spero che otterrai l'opzione migliore perfettamente adatta al tuo sistema operativo e alla versione del compilatore.
Esempio 1:
Esamineremo il tempo a parete con la funzione. La funzione è uno dei modi più portatili per trovare il tempo a parete in un programma C ++. Funziona solo con le versioni C ++ 11 e successive. Se hai una versione precedente, aggiorna il tuo compilatore prima di utilizzare questa funzione. Ha accesso a vari tipi di orologi nella macchina con caratteristiche e scopi diversi.
Qui, stiamo usando High_Resolution_Clock per trovare il tempo a parete in quanto utilizza l'orologio a risoluzione più alta disponibile, che è probabilmente adeguato per la maggior parte dei sistemi. Fare riferimento al codice indicato di seguito:
#includere
#includere
int main ()
doppio s = 0, a = 1;
auto start = std :: chrono :: high_resolution_clock :: now ();
int it = 1000*1000*1000;
per (int i = 0; is += a;
a /= 2.0;
auto end = std :: chrono :: high_resolution_clock :: now ();
Auto Elapsed = std :: Chrono :: duration_cast (fine - inizio);
printf ("L'orologio inizia a = %.2f \ n ", s);
printf ("Il tempo misurato è = %.3f secondi.\ n ", trascorso.conte () * 1e-6);
restituzione 0;
Il programma inizia con due file di intestazione STDIO.H e Chrono. Lo stdio.La libreria H viene utilizzata in combinazione con i metodi di input e output standard. La libreria Chrono ti consente di utilizzare la funzione nel programma. L'intero programma è scritto nella funzione principale in cui si verifica tutta l'esecuzione.
Il programma principale inizia con l'inizializzazione di due variabili "e" a "che verrà utilizzata per tenere traccia del tempo. La variabile "Avvia" è inizializzata con l'ora corrente con la funzione "Chrono :: High_reolution_Clock :: Now ()".
La variabile 'IT = 1000*1000*1000' viene inizializzata con il numero di iterazioni che devono essere eseguite e calcola il tempo trascorso in microsecondi. La seguente azione verrà eseguita dal ciclo "per" in quanto si itera da 0 a 1000*1000*1000 volte.
Un'altra variabile "estremità" viene inizializzata con l'ora corrente per controllare il tempo trascorso. Quando calcoli 'End - Start' otterrai il tempo di esecuzione trascorso. Il "Chrono :: Microseconds" fornirà il tempo di esecuzione in microsecondi che verranno convertiti in pochi secondi con "trascorsi.COUNT ()*1E-6 'calcolo. Le istruzioni printf () stampano l'ora di inizio e il tempo trascorso. Infine, l'istruzione Return 0 garantisce che il programma venga eseguito correttamente.
Quando si esegue il codice completo, verrà prodotto un output simile a seconda della velocità di esecuzione e dell'efficienza del sistema:
Esempio 2:
Nel codice indicato di seguito, stiamo usando la funzione getTimeofDay () per trovare il tempo trascorso dal momento che Epoch è "1 °, gennaio 1970, 00:00:00 UTC". La funzione getTimeofday () restituisce il tempo in sia in microsecondi che in secondi. Quindi, per trovare il tempo accurato nei microsecondi, entrambe le volte devono essere sommate insieme. Di seguito il codice allegato ti aiuterà a calcolare il tempo di esecuzione in microsecondi utilizzando La funzione getTimeofday () è inclusa nel file di intestazione. La "struct timeval" è una struttura di tempo usata per rappresentare il tempo trascorso. Il tempo calcolato in secondi e i microsecondi vengono aggiunti per ottenere il tempo di esecuzione esatto in microsecondi. La funzione "TV_SEC" fornisce il tempo in secondi e "TV_USEC" fornisce il tempo in microsecondi. Per convertire i secondi in microsecondi, moltiplica i microsecondi per 1E-6. Successivamente, aggiungi entrambe le volte in secondi e microsecondi per ottenere il tempo di esecuzione preciso in microsecondi. Ora, fai clic sull'icona Compila ed esegui nella barra dell'icona del software Dev C ++. Premere il tasto F11 sulla tastiera per eseguire il programma. L'output eseguito è riportato di seguito: Esempio 3: In questo esempio, stiamo usando la funzione Library e il suo tempo (). La funzione Time () funziona in modo simile alla funzione getTimeofday () che fornisce il tempo trascorso dal tempo di epoca. Tuttavia, misura solo pochi secondi e non è possibile definire il fuso orario. Quindi, se gli intervalli misurati sono più di un secondo allora tempo () ha senso. Questa potrebbe non essere la prima preferenza per ottenere i microsecondi e puoi invece utilizzare altre funzioni. Vedi il codice qui sotto: La funzione Time () fornirà il tempo di inizio e fine dell'esecuzione e il tempo trascorso può essere facilmente calcolato con un'istruzione 'end - inizio'. Vedi il risultato seguente: Si noti che il tempo trascorso calcolato con la funzione time () è 6s, non esattamente 6.833 microsecondi. La differenza nella funzione del tempo () è vista nell'output. Conclusione Vari metodi calcolano il tempo di esecuzione del sistema utilizzando un programma C ++. Tuttavia, nessuna soluzione è perfetta per ogni situazione e ogni funzione si comporta in modo diverso in situazioni diverse. Qui abbiamo imparato a usare il tempo (), getTimeofday () e funzioni per ottenere il tempo di esecuzione in microsecondi. #includere
#includere
int main ()
doppio s = 0, a = 1;
Struttura Timeval Start, fine;
getTimeofday (& start, 0);
int it = 1000*1000*1000;
per (int i = 0; i
a /= 2.0;
getTimeofday (& end, 0);
Long sec = fine.TV_SEC - Inizia.TV_SEC;
Long Micro = End.TV_USEC - Inizia.TV_USEC;
Double Eluted = sec + Micro*1E-6;
printf ("L'orologio inizia a = %.20f \ n ", s);
printf ("Il tempo misurato è = %.3f secondi.\ n ", trasmesso);
restituzione 0;#includere
#includere
int main ()
doppio s = 0, a = 1;
Time_t inizio, fine;
tempo (& start);
int it = 1000*1000*1000;
per (int i = 0; i
a /= 2.0;
tempo (& end);
time_t elapsed = end - start;
printf ("Risultato: %.20f \ n ", s);
printf ("tempo misurato: %LD secondi.\ n ", trasmesso);
restituzione 0;