我正在尝试使用 asm 和 rdtsc 实现我自己的 clock() 版本。但是我很不确定它的返回值。是循环吗?还是微秒?我也对 CLOCKS_PER_SEC 感到困惑。这怎么可能是恒定的?
是否有任何一种公式可以将这些值关联起来?
您可以在此处找到 rdtsc 参考实现:
https://github.com/LITMUS-RT/liblitmus/blob/master/arch/x86/include/asm/cycles.h
TSC 计算自复位以来的周期数。如果需要以秒为单位的时间值单位,还需要读取 CPU 时钟频率并将 TSC 值除以频率。但是,如果启用 CPU 频率缩放,这可能不准确。最近的英特尔处理器包括一个恒定速率 TSC(由 Linux 的 /proc/cpuinfo 中的“constant_tsc”标志标识)。对于这些处理器,TSC 以处理器的标称频率运行,而不管由于涡轮增压或省电状态而导致的实际 CPU 时钟频率如何。