marți, 29 martie 2016

Măsurarea timpului de execuție al unui program c++

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:
  (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;  }


Niciun comentariu:

Trimiteți un comentariu