时钟、rdtsc 和 CLOCKS_PER_SEC

标签 c cpu unistd.h

我正在尝试使用 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/

相关文章:

c - 在格式化输出时使用变量而不是常量,并且需要将其左对齐

c - 如何向字符数组添加填充和换行符

ios - 如何替换或解决 unistd.h 中的 __TVOS_PROHIBITED 依赖项

c - 管道无法通过 pthread_t 工作

php - usleep() php5 使用了 40% 的空闲 CPU

multithreading - CPU线程和程序线程有什么区别

c++ - 从 C/C++ 代码执行 RDMSR 和 WRMSR 指令

c - C 的参数行选项解析

c - 如何从 ps 中隐藏 execl() 参数?

c - FRDM-KL46Z 内部引用时钟为 48 MHz?