时钟、rdtsc 和 CLOCKS_PER_SEC
Clock, rdtsc and CLOCKS_PER_SEC
我正在尝试使用 asm 和 rdtsc 实现我自己的 clock() 版本。但是我不太确定它的 return 值。是循环吗?是微秒吗?
我也对 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 时钟频率。
我正在尝试使用 asm 和 rdtsc 实现我自己的 clock() 版本。但是我不太确定它的 return 值。是循环吗?是微秒吗? 我也对 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 时钟频率。