Лучший метод тайминга на C?

gettimeofday(), вероятно, сделает performance то, что вы хотите.

Если вы performance используете оборудование timing Intel, вот как считывать performance-tuning показания счетчика команд perfomance ЦП в реальном времени. Он efficiency сообщит вам количество циклов timers процессора, выполненных с performance-tuning момента загрузки процессора. Это, вероятно, самый code-efficiency точный счетчик с наименьшими efficiency накладными расходами, который efficiency вы можете получить для измерения perfomance производительности.

Обратите c внимание, что это количество performance-tuning циклов ЦП. В Linux вы можете timer получить скорость процессора android-performance из / proc / cpuinfo и разделить, чтобы perfomance получить количество секунд. Преобразование slow этого в двойное очень удобно.

Когда c я запускаю это на своем компьютере, я android-performance получаю

11867927879484732
11867927879692217
it took this long to call printf: 207485

Вот Intel developer's guide, который дает tuning массу подробностей.

#include 
#include 

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);
}

c

performance

timer

timing

2022-10-12T16:42:50+00:00