我正在尝试使用 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 频率缩放,这可能不准确。最近的 Intel 处理器包括恒定速率 TSC(由 Linux 的/proc/cpuinfo 中的“constant_tsc”标志标识)。对于这些处理器,TSC 会以处理器的标称频率滴答作响,而不管实际 CPU 时钟频率如何(由于 Turbo 或节能状态)。
https://en.wikipedia.org/wiki/Time_Stamp_Counter
关于时钟、rdtsc 和 CLOCKS_PER_SEC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696812/