【发布时间】:2022-01-15 19:52:35
【问题描述】:
我有一个 python 脚本(在 Linux fwiw 下运行),我想通过以不同方式重写一些瓶颈部分来加快速度,以查看哪个更好/更快。
我可以使用 cProfile 测量运行时间或对其进行检测,但问题是我使用的是现代笔记本电脑/cpu。从运行到下一个的运行时间变化多达 5% - 据我所知,这是由于各种形式的 CPU 节流(温度/功率)。
这使得检查实际代码性能差异变得非常困难。有什么方法可以弥补这一点和/或轻松测量 CPU 完成的实际工作吗?
【问题讨论】:
-
热节流并不是可以解释这种差异的唯一原因(尽管它起着重要作用)。事实上有减速的来源。这包括例如上下文切换(例如,浏览器是干扰运行基准测试的好应用程序,但即使像 ssh 连接这样的事情也可能产生微小的影响)、分配的内存对齐、代码本身的地址、分配的页面在虚拟和物理中的分布内存、操作系统调度和操作系统自身内部数据结构的行为,更不用说 I/O。
-
This talk 部分解释了这一点,并提供了一种工具来更好地处理这种统计噪音。并非所有减速源都可以消除。许多处理器不提供设置固定频率的方法,并且主流操作系统在性能方面远非稳定(实时系统更好)。 HPC 系统通常通过仅运行少数关键进程、调整操作系统(例如减少内核调用、线程绑定)和处理器配置(例如频率和内存控制)来成功地将噪声降低到 1-2%。