我正在尝试使用Intels RDTSC进行一些性能测量,我在不同的测试中得到的变化相当奇怪。在大多数情况下,我的C基准测试需要3000000 Mio周期,然而,在某些情况下,完全相同的执行可能需要5000000个,几乎是这个数字的两倍。我尽量不让高强度的工作负载并行运行,以便获得良好的性能估计。谁知道这种巨大的时间差异是从哪里来的?我知道中断和事情可能会发生,但我没想到时间会有这么大的变化!
附言:我在一台运行Linux的奔腾处理器上运行它。
谢谢你的反馈,约翰
发布于 2010-01-24 20:33:10
我想答案是这样的:
我尽量不让高强度的工作负载并行运行
在现代操作系统中,您无法对此进行充分的控制。
发布于 2010-01-24 20:00:30
根据this Wikipedia article的说法,RDTSC (时间戳计数器)不能可靠地用于多核系统上的基准测试。不能保证所有内核在时间戳寄存器中具有相同的值。
在Linux上,最好使用POSIX clock_gettime函数。
发布于 2010-01-24 20:53:48
你必须考虑到大多数现代处理器的高速缓存。在您测量长运行时间的情况下,可能另一个进程会清除程序的缓存内容。正如Henk所指出的,在现代操作系统中发生了很多你无法控制的事情。
https://stackoverflow.com/questions/2126894
复制相似问题