在现代CPU上进行基准测试时,如何考虑节流



我有一个python脚本(在Linux fwiw下运行(,我想通过用不同的方式重写一些瓶颈部分来加快速度,看看哪一个更好/更快。

我可以测量运行时间,也可以使用cProfile进行检测,但问题是我使用的是现代笔记本电脑/cpu。从运行到下一次运行的运行时间变化了5%——据我所知,这是由于各种形式的CPU节流(温度/功率(。

这使得很难检查实际的代码性能差异。有什么方法可以弥补这一点和/或轻松测量CPU所做的实际工作吗?

禁用turbo或其他供应商所称的升压时钟可能是可行的,因此时钟频率保持在笔记本电脑可以维持的基线频率。

运行CPU的速度要慢得多(比如1.6GHz而不是3或更多(会改变DRAM缓存未命中与分支预测失误的相对成本,因为DRAM仍然需要类似的纳秒数量,但时钟周期要少得多。因此,如果你比较的东西涉及到这种权衡,那就不完美了。I/O与CPU类似。

如果你能让你的系统在几个不同的低但稳定的频率下运行,即使对于对内存延迟和带宽敏感的工作负载,你也可以推断出在更高频率下的性能:bandwidth博士在一篇博客文章中解释了这一点,文章中有他HPC会议演讲中的幻灯片。


对于大多数CPU绑定的东西(而不是内存或I/O(,perf stat ./my_program可能很有用:在核心时钟周期中查看时间,而不是秒。这甚至不试图控制缓存未命中成本与核心效应的相对差异,但如果您使用的是Linux或其他操作系统,该操作系统具有可以使用硬件性能计数器的方便探查器,则会很方便。(通常只在裸机上工作,而不是在虚拟机中;大多数虚拟机不会虚拟化性能监控单元。

另见绩效评估的惯用方法?用于与保持频率稳定无关的其他基准考虑。

请参阅为什么可以';我的超便携式笔记本电脑CPU在HPC中保持峰值性能,例如,在运行功率密集型负载时,超便携式笔记本计算机的CPU频率与时间的关系,以及CPU设计的原因。

最新更新