【发布时间】:2023-03-09 06:45:01
【问题描述】:
作为基准测试任务的一部分,我正在研究可用于测量经过时间的不同机制。我已经最终确定使用clock_gettime,但我也确实使用RDTSC 指令进行了充分的研究和测试。我有几个相同的问题(基于我在几个在线线程上阅读的内容):
在较新的处理器 (>Pentium 4) 上,TSC 以系统上 CPU 的最大频率运行。它是否正确?在那种情况下,使用滴答数和频率来确定时间是否有效?
如果上述情况属实,则表示 TSC 不受因省电和其他功能而导致的 CPU 频率变化的影响。知道这一点,这是否意味着使用
RDTSC获得的总滴答声不是采样代码使用的实际滴答声——因为代码将以 CPU 的频率运行,而不是 TSC 的频率?另外,这是否意味着使用TSC ticks和CPU频率得到的时间不是代码段实际使用的时间?我发现许多关于跨内核同步 TSC 值的不同说法(请参阅 this thread)。我不确定什么是正确的,我猜它也取决于处理器型号。但是可以假设它在较新的 CPU 上的内核之间是同步的吗? (这是不使用
sched_set_affinity)?
请注意,由于与之相关的各种问题(便携性、可靠性等),我没有使用RDTSC。这些问题只是为了提高我对 TSC 的工作原理和一般基准测试的理解。
【问题讨论】: