一个 CPU 周期(cycle) 的时长取决于 CPU 的主频(clock frequency),它是每秒钟产生的时钟脉冲数。 通俗来讲即是节拍数 时间(秒) = 周期数 / CPU 主频(Hz)
2.4 GHz = 2.4 × 10⁹ Hz
每个周期 = 1 / 2.4GHz ≈ 0.4167 ns
Arm测试节拍指令
// 读取 PMCCNTR_EL0(计数器)
static inline uint64_t read_cycles() {
uint64_t value;
asm volatile("isb; mrs %0, pmccntr_el0" : "=r"(value));
return value;
}
x86测试节拍指令
//可用 GCC 内联汇编或 _rdtsc()
unsigned long long start = __rdtsc();
//或者
uint64_t read_tsc_serialized() {
uint32_t lo, hi;
__asm__ __volatile__ (
"cpuid\n\t" // 防止乱序
"rdtsc\n\t"
: "=a"(lo), "=d"(hi)
: "a"(0) // cpuid 参数 eax=0
: "rbx", "rcx" // 被 cpuid 修改
);
return ((uint64_t)hi << 32) | lo;
}