LINUX.ORG.RU

Re: Определение времени выполнения в С/С++

Смотри gprof. Только зачем такая точность?

amm
()

Re: Определение времени выполнения в С/С++

Один из способов -- читать счетчик тиков процессора.
Макрос для gcc
#define rdtscll(val) __asm__ __volatile__("rdtsc" :"=A"(val))
// Type of val --- unsigned long long
#endif

rdtscll(long long & val) записывает в переменную
val число тиков процессора с момента перезагрузки машины.
Сам вызов функции занимает около 30 тиков.

Все современные процессоры обладают кэшем (область быстродоступной
памяти), если данные находятся в кэше то доступ к ним относительно
бесплатен, если данные находятся в далекой области памяти то
доступ занимает гораздо больше времени. Поэтому, первый вызов
кода может выполняться значительно дольше чем, последующие, и для
правильного измерения времени необходимо несколько раз повторить
процесс.

Пример измерения времени выполнения функции sqrt.
int main(){
const int num=7;
long long c1[num], c2[num];
double tmp;
for (int i=0; i<num; i++){
rdtscll(c1[i]);
tmp=sqrt(d2*i);
rdtscll(c2[i]);
}
for (int i=0; i<num; i++) cout << c2[i]-c1[i] << '\t';
cout << endl;
return 0;
}

Результатом выполнения будет примерно следующая строка:
5906 113 113 113 113 113 113

Таким образом, тело цикла занимает 113 тиков, из них приблизительно 40 тиков занимает работа со счетчикам, и на sqrt остается 73.

Точность измерений таким способом составляет примерно 20 тиков. Большей точности не добиться, так как время выполнения
начинает зависеть от того какой код окружает измеряемый участок.
Эта ошибка может составляет примерно 10-20 тиков, конечно без провала
на первый вызов.

pru

anonymous
()
Ответ на: Re: Определение времени выполнения в С/С++ от anonymous

Re: Re: Определение времени выполнения в С/С++

Спасибо за подробную инструкцию! А как перевести тики в секунды? Поделить на тактовую частоту процессора?

kianvl
() автор топика

Re: Re: Re: Определение времени выполнения в С/С++

! А как перевести тики в секунды? Поделить на тактовую частоту процессора?

Точно.

Хотя в тиках информация о коде более полезна. Эта величина
меньше зависит от свойств процессора и машины.

pru

anonymous
()

Re: Определение времени выполнения в С/С++

а gettimeofday() не подходит?
там же вроде как точность до одной микросекунды.

Dead ★★★★
()

Re: Определение времени выполнения в С/С++

#include <time.h>

...
clock_t t=clock();
участок на котором замеряется время
t=clock()-t;
printf("Time: %lf\n", double(t)/CLOCKS_PER_SEC);

fghj ★★★★★
()

Re: Определение времени выполнения в С/С++

valgrind + calltree

Sveta_F
()

Re: Re: Определение времени выполнения в С/С++

>там же вроде как точность до одной микросекунды.

да да меряй дальше на не real-time системе =) Каждый раз разные значения - точно не узнаешь, в списке расслыки linux-c-development - тред такой был - меряли по разному итог один - не измерить точно =)

alphex_kaanoken ★★★
()

Re: Определение времени выполнения в С/С++

man gcov

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.