Măsurarea timpului de execuție

09.07.2024

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:

(timpFinal - timpInitial)/ CLOCKS_PER_SEC ; ar furniza doar numărul de secunde, nu şi secimi, sutimi etc.

În continuare prezint un program simplu care determină timpul de execuţie al unei instrucţiuni repetitive (este recomandată includerea header-ului 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; }

Share