Время выполнения в с ++
Попытка найти время выполнения моего кода, используя это:
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
clock_t t1, t2;
t1 = clock();
// code goes here
t2 = clock();
float diff = ((float)t2 - (float)t1);
cout <<"Execution Time = "<<diff / CLOCKS_PER_SEC <<endl;
system ("pause");
return 0;
}
но он возвращает разное время каждый раз, когда выполняется с тем же кодом. Код правильный?
Я хочу проверить время выполнения моего кода в разных сценариях, но не должно ли оно отображаться одинаково, когда я выполняю один и тот же код дважды?
1 ответ
Как упомянуто здесь, такты часов являются единицами времени постоянной, но зависящей от системы длины, которые возвращаются функцией clock. Упомянув, что нам нужно учитывать несколько сценариев / фактов при использовании этого метода, чтобы выяснить время выполнения фрагмента кода.
1) Время, которое представляет тик, зависит от ОС. Кроме того, есть OS-внутренние счетчики для тактов. Пожалуйста, смотрите этот вопрос SuperUser.
2) Ресурсы должны быть выделены для любого процесса для запуска в системе. Но что, если процессор занят другим, более важным процессом или даже у него закончились ресурсы? В этом случае ваш процесс будет помещен в очередь и будет выполняться с более низким приоритетом. Но так как тактовые метки хранятся во внутреннем счетчике (как упомянуто выше), он продолжает увеличиваться, хотя некоторые другие процессы тем временем используют процессор.
Заключение
Ваш метод определения времени выполнения, основанный на тактах, не даст точных результатов, но даст вам только представление о времени выполнения.