Măsurarea
timpului de execuție al unui program c++
Apare deseori în practică necesitatea măsurării
timpului de execuţie al unui program în C/C++. Acest lucru necesită utilizarea
funcţiei clock() care se găseşte în biblioteca <ctime> şi
care are antetul:
clock_t clock (
)
Funcţia nu are parametri. Returnează numărul de tic-uri ale
ceasului trecute de la execuţia programului. Pentru a calcula efectiv timpul de
execuţie a unei secvenţe de program, funcţia clock() trebuie apelată de fapt de
două ori: o dată la începutul secvenţei, a doua oară la final:
clock_t
timpInitial, timpFinal ;
timpInitial =
clock() ;
// aici se
scrie secventa de program căreia i se măsoară timpul
timpFinal =
clock() ;
cout<<
(double)(timpFinal - timpInitial)/ CLOCKS_PER_SEC ;
Facem aici
următoarele observaţii:
1. clock_t este
un tip întreg, deci variabilele timpInitial şi timpFinal puteau
fi declarate long şi în acest caz la atribuirea timpInitial = clock() s-ar
realiza conversia implicită de la tipul clock_t la tipul long.
2.
CLOCKS_PER_SEC este un macro care reprezintă numărul de tic-uri ale ceasului
într-o secundă. În locul acestui macro se putea utiliza CLK_TCK, considerat
învechit (în engleză, obsolete)
3. Deoarece clock_t este tip întreg, pentru a
determina corect timpul de execuţie în expresia
(double)(timpFinal - timpInitial)/ CLOCKS_PER_SEC ; este necesară conversia explicită la un tip real, altfel împărţirea ar fi considerată pe numere întregi, deci o expresie de forma:
(double)(timpFinal - timpInitial)/ CLOCKS_PER_SEC ; este necesară conversia explicită la un tip real, altfel împărţirea ar fi considerată pe numere întregi, deci o expresie de forma:
(timpFinal
- timpInitial)/ CLOCKS_PER_SEC ;
ar furniza doar numărul de secunde, nu şi secimi, sutimi etc.
În
continuare, voi prezenta un program simplu care determină timpul de execuţie al
unei instrucţiuni repetitive (vom folosi header-ul ctime)
#include<iostream>
#include<ctime>
using namespace
std;
int main()
{ clock_t
start, stop ;
start =
clock();
for (int i=1
; i<=500000000 ; i++)
stop =
clock() ;
cout<<(double)(stop-start)/CLOCKS_PER_SEC ;
return 0; }
return 0; }
Niciun comentariu:
Trimiteți un comentariu