Каков наилучший / наиболее эффективный способ измерения времени при запуске программы на C? - PullRequest
0 голосов
/ 18 апреля 2019

Как я могу записывать время выполнения моей программы каждый раз, когда я вставляю ввод? Я попробовал этот конкретный метод:

clock_t tStart = clock(),tEnd;

И после печати вывод:

tEnd = clock();
printf("Time taken: %.6fs\n", (double)(tEnd - tStart) / CLOCKS_PER_SEC);

Однако иногда я получаю только 0, когда вычисляю милисекунды. Есть ли способ улучшить это?

Ответы [ 3 ]

3 голосов
/ 18 апреля 2019

Есть ли способ улучшить это?

Если у вас нет лучшего таймера, как предложено в ответе jspcal, тогда другое решение - повторить ту же самую операцию большогоколичество раз, а затем разделите прошедшее время на количество повторений:

const int REPS = 10000;
clock_t tStart = clock(),tEnd;
for (int i = 0; i < REPS; i++) {
    // do your work here
}
tEnd = clock();
double time = (double)(tEnd - tStart)/REPS;
printf("Time taken: %.6fs\n", time / CLOCKS_PER_SEC);
2 голосов
/ 18 апреля 2019

Возможно, попробуйте таймер с более высоким разрешением, который может быть доступен на вашей платформе:

Linux: clock_gettime(CLOCK_REALTIME, &timeSpec)
Windows: QueryPerformanceCounter(&performanceCount)
1 голос
/ 18 апреля 2019

В unix, используйте time, который разветвляется и запускает программу, и делает get_rusage() после выхода ребенка.

Таким образом, вам не нужно настраивать саму программу.


plasser@pisbak:$ time ./a.out omg.dat 

real    0m10.276s
user    0m9.986s
sys 0m0.291s
plasser@pisbak:$ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...