我正在尝试使用asm和rdtsc实现我自己的clock()版本。但是我很不确定它的回报价值。这是周期吗?奥德是微秒? 我也对CLOCKS_PER_SEC感到困惑。这怎么可以不变?
是否存在将这些值设置为关系的任何公式?
答案 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时钟频率。