Слайд 2Назначение функций замера времени
Функции замера времени необходимы для оценки эффективности работы алгоритма,
процессора, памяти, файловой системы, сети …
Слайд 3Методика тестирования
Фиксирование времени начала теста
Запуск тестируемой операции
Фиксирование времени окончания теста
Отображение результатов теста
Слайд 4Функция clock
Библиотечная функция определена в заголовочном файле time.h
Прототип clock_t clock();
Возвращает время, прошедшее
с момента запуска программы в единицах 1/CLK_TCK секунды
Используется в Windows
Слайд 5Пример использования функции clock
#include
#include
int main()
{ double pi;
clock_t t;
t=clock(); // начало
замера времени
pi = pi_calculate();
t=clock()-t; // окончание замера времени
printf("Time: %lf msec Pi = %lf\n",t*1000.0/CLK_TCK,pi);
return 0;
}
Слайд 6Достоинства и недостатки функции clock
Достоинства:
высокая платформенная независимость
Недостатки:
низкая точность, при высокой загрузке процессора
– неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы
Слайд 7Команда RDTSC
Платформенно-зависимый вариант для x86
Возвращает число тактов с момента запуска процессора
Используется в
Windows и UNIX для процессоров Intel
Слайд 8Пример использования команды RDTSC
#include
#define FREQ 1995 // Частота процессора, MHz
// функция возвращает
значение счетчика тактов процессора
unsigned long tick()
{
__asm rdtsc
}
int main(int argc, char* argv[])
{
unsigned long t1,t2;
double t, pi;
t1=tick(); // начало замера
pi = pi_calculate();
t2=tick(); // конец замера
t=(double)(t2-t1)/FREQ;
printf("Time: %ld mcsec Pi = %lf\n",t,pi);
return 0;
}
Слайд 9Достоинства и недостатки команды RDTSC
Достоинства:
максимально возможная точность
Недостатки:
зависимость от архитектуры процессора
ухудшение точности при
высокой загрузке процессора
Слайд 10Функция gettimeofday
Библиотечная функция определена в заголовочном файле sys\time.h
Прототип int gettimeofday(struct timeval* tv,
struct timezone* tz);
Время можно вычислить из структуры timeval
Используется в UNIX
Слайд 11Пример использования функции gettimeofday
#include
struct timeval tv1,tv2,dtv;
struct timezone tz;
void time_start() {
gettimeofday(&tv1, &tz); }
double time_stop()
{
gettimeofday(&tv2, &tz);
dtv.tv_sec= tv2.tv_sec - tv1.tv_sec;
dtv.tv_usec=tv2.tv_usec - tv1.tv_usec;
if(dtv.tv_usec<0) { dtv.tv_sec--; dtv.tv_usec+=1000000; }
return dtv.tv_sec*1000.0+dtv.tv_usec/1000.0;
}
Слайд 12Пример использования функции gettimeofday
#include
int main()
{ double pi;
time_start(); // начало замера времени
pi
= pi_calculate();
// окончание замера времени
printf("Time: %lf msec Pi = %lf\n",time_stop(),pi);
return 0;
}
Слайд 13Достоинства и недостатки функции gettimeofday
Достоинства:
высокая платформенная независимость
Недостатки:
низкая точность, при высокой загрузке процессора
– неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы
Слайд 14Функция times
Библиотечная функция определена в заголовочном файле sys/times.h
Прототип clock_t times(struct tms *buf);
Возвращает
время, прошедшее с момента запуска программы в единицах 1/CLK_TCK секунды
Используется в UNIX
Слайд 15Пример использования функции times
#include
#include
struct tms tmsBegin,tmsEnd;
void time_start() { times(&tmsBegin); }
double
time_stop()
{ times(&tmsEnd);
return ((tmsEnd.tms_utime-tmsBegin.tms_utime)+
(tmsEnd.tms_stimetmsBegin.tms_stime))*1000.0/CLK_TCK;
}
Слайд 16Пример использования функции times
#include
int main()
{ double pi;
time_start(); // начало замера времени
pi
= pi_calculate();
// окончание замера времени
printf("Time: %lf msec Pi = %lf\n",time_stop(),pi);
return 0;
}