时钟,rdtsc和CLOCKS_PER_SEC

时间:2016-04-18 14:26:43

标签: c cpu unistd.h

我正在尝试使用asm和rdtsc实现我自己的clock()版本。但是我很不确定它的回报价值。这是周期吗?奥德是微秒? 我也对CLOCKS_PER_SEC感到困惑。这怎么可以不变?

是否存在将这些值设置为关系的任何公式?

1 个答案:

答案 0 :(得分:3)

您可以在此处找到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时钟频率。

https://en.wikipedia.org/wiki/Time_Stamp_Counter