我喜欢比较来自time_point
的{{1}}来自在处理器中不同内核上运行的线程中测量的内容。是否存在显着差异,例如滞后或更快/更慢的时钟?标准规定了什么?
答案 0 :(得分:4)
std
时钟没有处理器亲和力,事实上,大多数线程都没有。来自同一线程的两个时钟测量很可能是在不同的核心上进行的。
在与测量相关的超前和滞后 - 这与任何其他指令的执行没有区别;通常的管道等可能会产生影响,但我不认为这是有害的。如果它可能是有害的,您可能需要考虑其他工具,例如某些专门的平台计时工具或某种CPU特定指令。
答案 1 :(得分:3)
我将根据您在' Intel CPU 上运行此操作的评论来具体回答此问题。
我还要强调,这可能是一个备受争议的讨论,因为这非常依赖于CPU和主板。 '现代'可以是一个非常流畅的概念:)
一般说来
现代'英特尔CPU已经采用了一些机制来确保核心之间的统一滴答。但是,运行的操作系统也很重要。例如,一些Linux内核将使用时间戳计数器作为其源,因为较少的开销并且回退到(现代)高精度事件计时器,该计时器试图使核心上的时钟滴答均匀。
另外,请记住,Intel CPU有许多可影响CPU时钟频率的功耗实用程序。
最佳案例假设
我会在Linux上检查 constant_tsc 标志作为 / proc / cpuinfo 的一部分,因为可以假设TSC在核心上以固定频率运行。但是......记住上面的变化。
有一些机器状态事件,如省电和机器休眠,可能导致CPU时钟频率发生变化。在这种情况下,需要重新校准TSC,有些文档表明这只是在重新启动时。
<强>建议:强>
定位特定芯片组和操作系统并研究特定的documentation。大多数OS系列都会详细介绍其时钟源的具体信息。
根据您的时间精度要求,您可能希望切换到使用
clock_gettime(CLOCK_MONOTONIC, ...);