Используйте команду rdtsc
для измерения времени с максимальным разрешением и минимально возможными издержками:
#include <iostream>
#include <cstdint>
int main() {
uint64_t a = __builtin_ia32_rdtsc();
uint64_t b = __builtin_ia32_rdtsc();
std::cout << b - a << " cpu cycles\n";
}
Вывод:
19 cpu cycles
Для преобразованияциклы в наносекунды делят циклы на базовую частоту процессора в ГГц.Например, для i7-7700k с тактовой частотой 4,2 ГГц делить на 4,2.
TSC - это глобальный счетчик ЦП, общий для всех ядер.
Современные ЦП имеют постоянный TSC, который имеет одинаковые значенияСкорость независимо от текущей частоты процессора и повышения.Ищите constant_tsc
в /proc/cpuinfo
, flags
поле.
Также обратите внимание, что __builtin_ia32_rdtsc
более эффективен, чем встроенная сборка, см. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48877