如果您想要一致的结果,一次运行一个基准测试将提高这种可能性 - 因为不同的任务更有可能:
- 从一个 CPU 移动到另一个 CPU(从而使加载到缓存中的任何内容都没有意义)。
- 造成内存带宽和缓存压力,导致干扰另一个进程。
如果您在播放 MP3、下载大片长片等的同时运行基准测试,那么您将不知道这是否确实干扰(或干扰了多少)您的 CPU 密集型任务 - 您可以,可能反过来说,如果音乐开始变得断断续续,或者下载超时...... ;) 与并行运行多个任务一样,缓存和从处理器到处理器内核的移动将是最重要的影响。
您可能会发现,如果您在“一切都开启”的情况下运行一组基准测试,而在“一切都关闭”的情况下运行另一组基准测试,那并没有什么区别。但你也可能会发现它确实有所作为。
这同样适用于运行一个或多个基准测试。尝试并行运行 6 个,并比较每个基准测试本身在没有其他运行的情况下运行的时间。
你只有通过比较不同的案例才能知道这一点。
如果没有影响,您可以在进行基准测试时继续播放音乐、下载最新的大片等,因为您知道 0.01% 的差异对应用程序的整体性能并不重要。
根据经验,我发现如果你在后台运行一堆其他“轻”的东西通常不会有太大的不同,但它会增加从一次运行到另一次运行的变化量。同样,如果基准测试运行半小时,则可能无关紧要 - 毕竟,从一次运行到另一次运行,您可能会在运行时有足够的变化,仅仅是从 CPU 和操作系统中不同的一般事物来看,纯粹是由于“事情不会每次都完全相同”的因素,它不会产生足够的差异。
如果您正在做小的优化,例如切换编译器选项,结果差异为 0.5%,但运行之间的差异为 1%,那么您需要运行多次运行以显示实际差异,以及来自其他进程的更多干扰,您无法衡量微小变化的可能性就越大。有时,许多小的变化一起可以产生显着的差异(例如,如果你移动一个函数 F1 以允许它被内联,然后对函数 F2 做同样的事情,它们加起来相当于 1% 的改进,但单独它是不可测量的,因为它隐藏在噪音中)。噪音越大,您就越有可能“错过”一些微小但最终有益的变化。