为什么我的超便携笔记本电脑 CPU 无法在 HPC 中保持最佳性能
Why can't my ultraportable laptop CPU maintain peak performance in HPC
我开发了一个高性能 Cholesky 分解例程,它在单个 CPU(没有超线程)时应该有大约 10.5 GFLOPs 的峰值性能。但是在测试它的性能时,有一些现象我不明白。在我的实验中,我测量了矩阵维数 N 从 250 增加到 10000 时的性能。
- 在我的算法中,我应用了缓存(调整了阻塞因子),并且在计算过程中始终以单位步长访问数据,因此缓存性能最佳; TLB 和分页问题被消除;
- 我有 8GB 可用 RAM,实验期间的最大内存占用量在 800MB 以下,因此没有发生交换;
- 在实验过程中,没有像网络浏览器这样的资源需求进程同时处于运行。只有一些非常便宜的后台进程是 运行 记录 CPU 频率以及每 2s CPU 温度数据。
对于我正在测试的 N,我希望性能(以 GFLOPs 为单位)保持在 10.5 左右。但是在实验中间观察到明显的性能下降,如第一张图所示。
CPU频率和CPU温度见第二和第三图。实验在 400 秒内结束。实验开始时温度是51度,CPU一忙就迅速升到72度。之后它慢慢地增长到最高的78度。 CPU频率基本稳定,温度高了也没有下降
那么,我的问题是:
- 既然CPU频率没有下降,为什么性能会下降?
- 温度究竟如何影响 CPU 性能?从 72 度增加到 78 度真的会让事情变得更糟吗?
CPU 信息
System: Ubuntu 14.04 LTS
Laptop model: Lenovo-YOGA-3-Pro-1370
Processor: Intel Core M-5Y71 CPU @ 1.20 GHz * 2
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0,1
Off-line CPU(s) list: 2,3
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Stepping: 4
CPU MHz: 1474.484
BogoMIPS: 2799.91
Virtualisation: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 4096K
NUMA node0 CPU(s): 0,1
CPU 0, 1
driver: intel_pstate
CPUs which run at the same hardware frequency: 0, 1
CPUs which need to have their frequency coordinated by software: 0, 1
maximum transition latency: 0.97 ms.
hardware limits: 500 MHz - 2.90 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 500 MHz and 2.90 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.40 GHz.
boost state support:
Supported: yes
Active: yes
更新 1(对照实验)
在我原来的实验中,CPU一直忙于从N = 250到N = 10000。很多人(主要是那些在重新编辑之前看到这个post的人)怀疑过热CPU 是性能下降的主要原因。然后我回去安装了lm-sensors
linux包来跟踪这些信息,果然CPU温度上升了。
但为了完成图片,我做了另一个对照实验。这次,我给 CPU 每个 N 之间的冷却时间。这是通过要求程序在 N 的循环迭代开始时暂停几秒钟来实现的。
- N在250~2500之间,冷却时间为5s;
- N在2750~5000之间,冷却时间为20s;
- N在5250到7500之间,冷却时间为40s;
- 最终N在7750到10000之间,冷却时间为60s
请注意,冷却时间远远大于计算所花费的时间。对于 N = 10000,Cholesky 分解在峰值性能下只需要 30 秒,但我要求 60 秒的冷却时间。
这在高性能计算中肯定是一个非常无趣的设置:我们希望我们的机器一直以最佳性能工作,直到完成一个非常大的任务。所以这种停止是没有意义的。但它有助于更好地了解温度对性能的影响。
这一次,我们看到所有 N 都达到了峰值性能,正如理论所支持的那样! CPU 频率和温度的周期性特征是冷却和升压。温度仍然有增加的趋势,只是因为随着N的增加,工作量越来越大。正如我所做的那样,这也证明需要更多的冷却时间才能充分冷却。
峰值性能的实现似乎排除了温度以外的所有影响。但这真的很烦人。基本上它说计算机会在 HPC 中疲劳,所以我们无法获得预期的性能提升。那么开发HPC算法的意义何在?
好的,这是一组新的情节:
不知道为什么第6张图上传不了。所以根本不允许我在添加第 6 个数字时提交编辑。所以很抱歉,我无法附上 CPU 频率的数字。
更新 2(我如何测量 CPU 频率和温度)
感谢 Zboson 添加 x86 标签。以下 bash
命令是我用来测量的:
while true
do
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq >> cpu0_freq.txt ## parameter "freq0"
cat sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq >> cpu1_freq.txt ## parameter "freq1"
sensors | grep "Core 0" >> cpu0_temp.txt ## parameter "temp0"
sensors | grep "Core 1" >> cpu1_temp.txt ## parameter "temp1"
sleep 2
done
由于我没有将计算固定到 1 个核心,操作系统将交替使用两个不同的核心。采取
更有意义
freq[i] <- max (freq0[i], freq1[i])
temp[i] <- max (temp0[i], temp1[i])
作为整体测量。
TL:DR: 你的结论是正确的。您的 CPU 的持续表现远未达到顶峰。这是正常现象:考虑到轻型散热器、风扇和功率传输,峰值性能仅可作为突发性交互式工作负载的短期“奖励”,高于其额定持续性能。
您可以在此机器上开发/测试,但基准测试会很困难。您需要 运行 在集群、服务器或台式机上,或者至少在游戏/工作站笔记本电脑上。
根据您发布的 CPU 信息,您有 dual-core-with-hyperthreading Intel Core M with a rated sustainable frequency of 1.20 GHz,Broadwell 一代。它的最大睿频为 2.9GHz,TDP-up 可持续频率为 1.4GHz(6W 时)。
对于短时间爆发,它可以运行快得多并且产生的热量比其冷却系统需要处理的热量多得多.这就是 Intel's "turbo" feature 的意义所在。它让像您这样的低功耗超便携笔记本电脑在 Web 浏览器等方面具有快速的 UI 性能,因为来自交互式的 CPU 负载几乎总是突发的。
Desktop/server CPUs(Xeon 和 i5/i7,但不是 i3)仍然有涡轮增压,但持续频率是 很多 接近最大涡轮增压。例如a Haswell i7-4790k 具有 4.0GHz 的持续“额定”频率。在该频率及以下,它不会使用(并转化为热量)超过其 88W 的额定 TDP。因此,它需要一个可以处理 88W 的冷却系统。当power/current/temperature 允许时,它可以时钟高达 4.4GHz 并使用超过 88W 的功率。 (用于计算功率历史以保持 88W 持续功率的滑动 window 有时可在 BIOS 中配置,例如 20 秒或 5 秒。根据 运行ning 的代码,4.4GHz 可能不会增加电流需求接近峰值的任何地方。例如,有很多 b运行ch 错误预测的代码仍然受到 CPU 频率的限制,但它不会像 Prime95 那样接近饱和 256b AVX FP 单元。 )
您笔记本电脑的最大睿频比额定频率高 2.4 倍。高端 Haswell 台式机 CPU 只能提升 1.1 倍频。最大持续频率已经非常接近最大峰值限制,因为它需要一个良好的冷却系统来跟上这种热量的产生。还有能提供那么大电流的固态电源
Core M 的目的是CPU可以将自身限制在超低功率水平(额定TDP 在 1.2GHz 时为 4.5W,在 1.4GHz 时为 6W)。因此,笔记本电脑制造商可以安全地设计一个小巧轻便的冷却和供电系统,并且只处理那么大的功率。 “场景设计功率”仅为 3.5W,这应该代表实际代码的热需求,而不是像 Prime95 这样的最大功率的东西。
即使是“普通”ULV 笔记本电脑 CPU 的额定持续功率为 15W,高功率 gaming/workstation 笔记本电脑 CPU 的额定功率为 45W。当然,笔记本电脑供应商将这些 CPU 放入具有更强大的散热器和风扇的机器中。查看 table on wikipedia,并比较桌面/服务器 CPUs(也在同一页上)。
The achievement of peak performance seems to rule out all effects
other than temperature. But this is really annoying. Basically it says
that computer will get tired in HPC, so we can't get expected
performance gain. Then what is the point of developing HPC algorithm?
重点是 运行 它们在热限制不太严重的硬件上!像 Core M 这样的超低功耗 CPU 是一个不错的开发平台,但 不是 一个好的 HPC 计算平台。
即使是 xxxxM CPU 而不是 xxxxU CPU 的笔记本电脑也可以。 (例如,设计用于持续 运行 CPU 密集型工作的“游戏”或“工作站”笔记本电脑)。或者在 Skylake 系列中,“xxxxH”或“HK”是 45W 移动设备 CPUs,至少是四核。
进一步阅读:
- 现代微处理器
90 分钟指南!
- [现代处理器中的功率传输] - 一般背景,包括 Pentium 4 运行 进入的“功率墙”。
(https://www.realworldtech.com/power-delivery/) - 对 CPU/主板设计进行真正深入的技术研究,以及为非常突发的需求提供稳定的低电压的挑战,以及对 CPU 请求更多/更少电压的快速反应因为它改变了频率。
我开发了一个高性能 Cholesky 分解例程,它在单个 CPU(没有超线程)时应该有大约 10.5 GFLOPs 的峰值性能。但是在测试它的性能时,有一些现象我不明白。在我的实验中,我测量了矩阵维数 N 从 250 增加到 10000 时的性能。
- 在我的算法中,我应用了缓存(调整了阻塞因子),并且在计算过程中始终以单位步长访问数据,因此缓存性能最佳; TLB 和分页问题被消除;
- 我有 8GB 可用 RAM,实验期间的最大内存占用量在 800MB 以下,因此没有发生交换;
- 在实验过程中,没有像网络浏览器这样的资源需求进程同时处于运行。只有一些非常便宜的后台进程是 运行 记录 CPU 频率以及每 2s CPU 温度数据。
对于我正在测试的 N,我希望性能(以 GFLOPs 为单位)保持在 10.5 左右。但是在实验中间观察到明显的性能下降,如第一张图所示。
CPU频率和CPU温度见第二和第三图。实验在 400 秒内结束。实验开始时温度是51度,CPU一忙就迅速升到72度。之后它慢慢地增长到最高的78度。 CPU频率基本稳定,温度高了也没有下降
那么,我的问题是:
- 既然CPU频率没有下降,为什么性能会下降?
- 温度究竟如何影响 CPU 性能?从 72 度增加到 78 度真的会让事情变得更糟吗?
CPU 信息
System: Ubuntu 14.04 LTS
Laptop model: Lenovo-YOGA-3-Pro-1370
Processor: Intel Core M-5Y71 CPU @ 1.20 GHz * 2
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0,1
Off-line CPU(s) list: 2,3
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Stepping: 4
CPU MHz: 1474.484
BogoMIPS: 2799.91
Virtualisation: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 4096K
NUMA node0 CPU(s): 0,1
CPU 0, 1
driver: intel_pstate
CPUs which run at the same hardware frequency: 0, 1
CPUs which need to have their frequency coordinated by software: 0, 1
maximum transition latency: 0.97 ms.
hardware limits: 500 MHz - 2.90 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 500 MHz and 2.90 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 1.40 GHz.
boost state support:
Supported: yes
Active: yes
更新 1(对照实验)
在我原来的实验中,CPU一直忙于从N = 250到N = 10000。很多人(主要是那些在重新编辑之前看到这个post的人)怀疑过热CPU 是性能下降的主要原因。然后我回去安装了lm-sensors
linux包来跟踪这些信息,果然CPU温度上升了。
但为了完成图片,我做了另一个对照实验。这次,我给 CPU 每个 N 之间的冷却时间。这是通过要求程序在 N 的循环迭代开始时暂停几秒钟来实现的。
- N在250~2500之间,冷却时间为5s;
- N在2750~5000之间,冷却时间为20s;
- N在5250到7500之间,冷却时间为40s;
- 最终N在7750到10000之间,冷却时间为60s
请注意,冷却时间远远大于计算所花费的时间。对于 N = 10000,Cholesky 分解在峰值性能下只需要 30 秒,但我要求 60 秒的冷却时间。
这在高性能计算中肯定是一个非常无趣的设置:我们希望我们的机器一直以最佳性能工作,直到完成一个非常大的任务。所以这种停止是没有意义的。但它有助于更好地了解温度对性能的影响。
这一次,我们看到所有 N 都达到了峰值性能,正如理论所支持的那样! CPU 频率和温度的周期性特征是冷却和升压。温度仍然有增加的趋势,只是因为随着N的增加,工作量越来越大。正如我所做的那样,这也证明需要更多的冷却时间才能充分冷却。
峰值性能的实现似乎排除了温度以外的所有影响。但这真的很烦人。基本上它说计算机会在 HPC 中疲劳,所以我们无法获得预期的性能提升。那么开发HPC算法的意义何在?
好的,这是一组新的情节:
不知道为什么第6张图上传不了。所以根本不允许我在添加第 6 个数字时提交编辑。所以很抱歉,我无法附上 CPU 频率的数字。
更新 2(我如何测量 CPU 频率和温度)
感谢 Zboson 添加 x86 标签。以下 bash
命令是我用来测量的:
while true
do
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq >> cpu0_freq.txt ## parameter "freq0"
cat sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq >> cpu1_freq.txt ## parameter "freq1"
sensors | grep "Core 0" >> cpu0_temp.txt ## parameter "temp0"
sensors | grep "Core 1" >> cpu1_temp.txt ## parameter "temp1"
sleep 2
done
由于我没有将计算固定到 1 个核心,操作系统将交替使用两个不同的核心。采取
更有意义freq[i] <- max (freq0[i], freq1[i])
temp[i] <- max (temp0[i], temp1[i])
作为整体测量。
TL:DR: 你的结论是正确的。您的 CPU 的持续表现远未达到顶峰。这是正常现象:考虑到轻型散热器、风扇和功率传输,峰值性能仅可作为突发性交互式工作负载的短期“奖励”,高于其额定持续性能。
您可以在此机器上开发/测试,但基准测试会很困难。您需要 运行 在集群、服务器或台式机上,或者至少在游戏/工作站笔记本电脑上。
根据您发布的 CPU 信息,您有 dual-core-with-hyperthreading Intel Core M with a rated sustainable frequency of 1.20 GHz,Broadwell 一代。它的最大睿频为 2.9GHz,TDP-up 可持续频率为 1.4GHz(6W 时)。
对于短时间爆发,它可以运行快得多并且产生的热量比其冷却系统需要处理的热量多得多.这就是 Intel's "turbo" feature 的意义所在。它让像您这样的低功耗超便携笔记本电脑在 Web 浏览器等方面具有快速的 UI 性能,因为来自交互式的 CPU 负载几乎总是突发的。
Desktop/server CPUs(Xeon 和 i5/i7,但不是 i3)仍然有涡轮增压,但持续频率是 很多 接近最大涡轮增压。例如a Haswell i7-4790k 具有 4.0GHz 的持续“额定”频率。在该频率及以下,它不会使用(并转化为热量)超过其 88W 的额定 TDP。因此,它需要一个可以处理 88W 的冷却系统。当power/current/temperature 允许时,它可以时钟高达 4.4GHz 并使用超过 88W 的功率。 (用于计算功率历史以保持 88W 持续功率的滑动 window 有时可在 BIOS 中配置,例如 20 秒或 5 秒。根据 运行ning 的代码,4.4GHz 可能不会增加电流需求接近峰值的任何地方。例如,有很多 b运行ch 错误预测的代码仍然受到 CPU 频率的限制,但它不会像 Prime95 那样接近饱和 256b AVX FP 单元。 )
您笔记本电脑的最大睿频比额定频率高 2.4 倍。高端 Haswell 台式机 CPU 只能提升 1.1 倍频。最大持续频率已经非常接近最大峰值限制,因为它需要一个良好的冷却系统来跟上这种热量的产生。还有能提供那么大电流的固态电源
Core M 的目的是CPU可以将自身限制在超低功率水平(额定TDP 在 1.2GHz 时为 4.5W,在 1.4GHz 时为 6W)。因此,笔记本电脑制造商可以安全地设计一个小巧轻便的冷却和供电系统,并且只处理那么大的功率。 “场景设计功率”仅为 3.5W,这应该代表实际代码的热需求,而不是像 Prime95 这样的最大功率的东西。
即使是“普通”ULV 笔记本电脑 CPU 的额定持续功率为 15W,高功率 gaming/workstation 笔记本电脑 CPU 的额定功率为 45W。当然,笔记本电脑供应商将这些 CPU 放入具有更强大的散热器和风扇的机器中。查看 table on wikipedia,并比较桌面/服务器 CPUs(也在同一页上)。
The achievement of peak performance seems to rule out all effects other than temperature. But this is really annoying. Basically it says that computer will get tired in HPC, so we can't get expected performance gain. Then what is the point of developing HPC algorithm?
重点是 运行 它们在热限制不太严重的硬件上!像 Core M 这样的超低功耗 CPU 是一个不错的开发平台,但 不是 一个好的 HPC 计算平台。
即使是 xxxxM CPU 而不是 xxxxU CPU 的笔记本电脑也可以。 (例如,设计用于持续 运行 CPU 密集型工作的“游戏”或“工作站”笔记本电脑)。或者在 Skylake 系列中,“xxxxH”或“HK”是 45W 移动设备 CPUs,至少是四核。
进一步阅读:
- 现代微处理器 90 分钟指南!
- [现代处理器中的功率传输] - 一般背景,包括 Pentium 4 运行 进入的“功率墙”。 (https://www.realworldtech.com/power-delivery/) - 对 CPU/主板设计进行真正深入的技术研究,以及为非常突发的需求提供稳定的低电压的挑战,以及对 CPU 请求更多/更少电压的快速反应因为它改变了频率。