使用 RDTSC 的 nanosleep 循环计数

标签 c intel cycle rdtsc

我想看看 1 纳秒在我的笔记本电脑上需要多少个周期。

笔记本电脑配置:

  1. 处理器:Intel Centrino Duo 2.0 GHz ( T7200 )
  2. 内存:2 GB

以下是计数:

  1. 1 秒耗时:1995198000(接近 20 亿次滴答,没问题)
  2. 1 毫秒:2,159,460(接近 200 万,没问题)
  3. 1 微秒:507,408(为什么?)
  4. 1 纳秒:139,000(为什么?)

直到 1 微秒,刻度与频率一致。但是,在此之下,事实并非如此。此外,我可以可靠地使用周期计数来区分 100 纳秒和 200 纳秒,而不是低于该值。

测量设置:

  1. 测量过程附加到一个处理器。
  2. 进程的优先级设置为最高。
  3. CPU 设置为始终以最高频率运行。

谁能解释一下原因?是因为以这种方式实现 sleep (我正在使用 nanosleep)吗? ?

最佳答案

来自 the specification of nanosleep :

The suspension time may be longer than requested because the argument value is rounded up to an integer multiple of the sleep resolution or because of the scheduling of other activity by the system.

关于使用 RDTSC 的 nanosleep 循环计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26654160/

相关文章:

c - 当数据类型和返回类型从 int 更改为 float 或 double 时,行列式函数中出现段错误

c - 在嵌入式系统中使用 c 中的可变长度数组是否存在问题?

循环浏览一些数字

jQuery - 循环插件暂停/播放按钮

在 IE 中具有透明度的 jQuery 循环插件

c - 使用 C 中的函数和指针将 n 个数组合并为一个

c - 在一个 _mm_load_si128 上使用两个 _mm_loadl_epi64

c - 模数 "%"和按位和 "&"的剩余部分计算导致 AVX2 上的结果不同

c - Sandy Bridge 上的 32 字节存储转发

python - c++ 中的循环类似于 python(基于范围的 for)