Высокое разрешение, низкая нагрузка для процессоров Intel
Если вы используете аппаратное обеспечение Intel, здесь показано, как считать счетчик команд процессора в режиме реального времени. Он сообщит вам количество циклов ЦП, выполненных с момента загрузки процессора. Вероятно, это самый точный счетчик, который вы можете получить для измерения производительности.
Обратите внимание, что это количество циклов ЦП. В Linux вы можете получить скорость процессора из / proc / cpuinfo и разделить, чтобы получить количество секунд. Преобразование в двойное число весьма удобно.
Когда я запускаю это на своей коробке, я получаю
11867927879484732
11867927879692217
it took this long to call printf: 207485
Вот руководство для разработчиков Intel *1013*, в котором содержится множество деталей.
#include < stdio.h > // stackoverflow bug: pre tag eats the filenames,
#include < stdint.h > // so i had to put spaces in the angle brackets
inline uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax, %%eax\n"
"cpuid\n"
"rdtsc\n"
: "=a" (lo), "=d" (hi)
:
: "%ebx", "%ecx");
return (uint64_t)hi << 32 | lo;
}
main()
{
unsigned long long x;
unsigned long long y;
x = rdtsc();
printf("%lld\n",x);
y = rdtsc();
printf("%lld\n",y);
printf("it took this long to call printf: %lld\n",y-x);
}