来自std :: chrono的时钟可以在不同的核心上有所不同

max*_*max 9 c++ multicore c++-chrono

我喜欢比较在处理器中不同核心上运行的线程中的time_points std::chrono::high_resolution_clock.是否存在显着差异,例如滞后或更快/更慢的时钟?标准规定了什么?

Int*_*uAi 3

我将根据您在“现代” 英特尔 CPU上运行此评论的评论来专门回答这个问题。

我还要强调的是,这可能是一个极具争议性的讨论,因为这在很大程度上取决于 CPU 和主板。“现代”可以是一个非常流动的概念:)

一般来说

“现代”英特尔 CPU 已经采用了一些机制来确保跨内核的统一滴答声。但是,您运行的操作系统也很重要。例如,由于开销较小,某些 Linux 内核将使用时间戳计数器作为其源,并依靠(现代)高精度事件计时器来尝试保持跨内核的时钟滴答一致。

另外,请记住,Intel CPU 有许多可能影响 CPU 时钟频率的功耗实用程序。

最佳情况假设

我会检查constant_tsc标志作为Linux上/proc/cpuinfo的一部分,因为这样就可以假设TSC跨核心以固定频率运行。但是......记住上面的变化。

诸如省电和机器休眠之类的机器状态事件可能会导致 CPU 时钟频率发生变化。在这种情况下,需要重新校准 TSC,并且一些文档表明这仅在重新启动时进行。

推荐:

针对特定的芯片组和操作系统并研究特定的文档。大多数操作系统系列都会提供有关其时钟源细节的详细信息。

根据您的时间精度要求,您可能需要切换使用

clock_gettime(CLOCK_MONOTONIC, ...); 
Run Code Online (Sandbox Code Playgroud)