【发布时间】:2018-11-25 18:53:58
【问题描述】:
std::chrono 提供多个时钟来测量时间。同时,我想 CPU 评估时间的唯一方法是计算周期数。
问题 1:除了计算周期之外,cpu 或 gpu 是否有其他方法来评估时间?
如果是这样,因为计算机计算周期的方式永远不会像原子钟那样精确,这意味着计算机的“秒”(period = std::ratio<1>)实际上可能比实际的更短或更大其次,从长远来看,导致计算机时钟和 GPS 之间的时间测量存在差异。
问题 2:正确吗?
某些硬件具有不同的频率(例如空闲模式和加速模式)。在这种情况下,这意味着周期数在一秒钟内会发生变化。
问题 3: cpu 和 gpus 测量的“循环计数”是否因硬件频率而异?如果是,那么std::chrono 是如何处理的?如果不是,那么一个周期对应于什么(比如什么是“基本”时间)?有没有办法在编译时访问转换?有没有办法在运行时访问转换?
【问题讨论】:
-
Fwiw,所有现代时计都是通过计算定期发生的事件来工作的。这一趋势始于 1656 年,当时第一个摆钟“计数”了摆动摆的摆动。随着时间的推移,这将改变石英晶体振动并最终改变为原子振动。但是几个世纪以来,基本的“通过计数来测量时间”方法一直保持不变。例外:最新的进展是让一个时钟询问另一组时钟现在几点,进行对话,并就正确时间达成共识。例如。这是 NTP。
标签: c++ time cpu benchmarking chrono