Я использую Ubuntu 12.04 и использую компилятор gcc для компиляции моих программ на C / C ++. Я хочу сравнить функцию. AFAIK, есть две стандартные функции для расчета времени в системах POSIX, и обе они показывают ошибочные результаты в Ubuntu:
gettimeofday clock_gettime
Вот мой код:
int main()
{
float msec=0;
//struct timespec start,end;
struct timeval start,end;
//clock_gettime(CLOCK_MONOTONIC_RAW,&start);
//clock_gettime(CLOCK_REALTIME,&start);
gettimeofday(&start,NULL);
get_height(); //function i want to benchmark
/* usleep(1000000);*/
//clock_gettime(CLOCK_REALTIME,&end);
gettimeofday(&end,NULL);
//msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_nsec-start.tv_nsec)/(float)1000000;
msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_usec-start.tv_usec)/(float)1000;
printf("%0.2f ms.\n",msec); //41-44
}
Проблема в том, что отображаемая миллисекунда показывает ошибочные / разные результаты при каждом запуске программы. Некоторые показания образца: 38,16 мс. 42,72 мс 35,70 мс 45,13 мс.
Однако, когда я тестирую с помощью функции usleep (), результат показывает 1000 мс. должным образом. Любое представление о том, какую библиотеку / функцию я должен использовать для точного определения времени моих функций?
РЕДАКТИРОВАТЬ: Это поможет уточнить, что указанные функции clock_gettime неточны только в Ubuntu 12.04. Я тестировал на других машинах, где он показал точные результаты. Даже в окнах эквивалентные функции query_performance_counter () показали точные результаты.