Performance 为什么可以';我的超便携笔记本电脑CPU在HPC中保持最高性能

Performance 为什么可以';我的超便携笔记本电脑CPU在HPC中保持最高性能,performance,x86,intel,hpc,cpu-speed,Performance,X86,Intel,Hpc,Cpu Speed,我开发了一个高性能Cholesky分解例程,在单个CPU上的峰值性能应该在10.5gflops左右(没有超线程)。但是当我测试它的性能时,有一些我不理解的现象。在我的实验中,我测量了矩阵维数N从250增加到10000的性能 在我的算法中,我应用了缓存(具有调整的阻塞因子),并且在计算期间总是以单位步长访问数据,因此缓存性能是最佳的;消除了TLB和寻呼问题 我有8GB的可用RAM,实验期间的最大内存占用不到800MB,因此不会出现交换 在实验过程中,没有像web浏览器这样的资源需求过程同时运行。

我开发了一个高性能Cholesky分解例程,在单个CPU上的峰值性能应该在10.5gflops左右(没有超线程)。但是当我测试它的性能时,有一些我不理解的现象。在我的实验中,我测量了矩阵维数N从250增加到10000的性能

  • 在我的算法中,我应用了缓存(具有调整的阻塞因子),并且在计算期间总是以单位步长访问数据,因此缓存性能是最佳的;消除了TLB和寻呼问题
  • 我有8GB的可用RAM,实验期间的最大内存占用不到800MB,因此不会出现交换
  • 在实验过程中,没有像web浏览器这样的资源需求过程同时运行。只有一些非常便宜的后台进程在运行,以记录CPU频率以及CPU温度数据每2秒
我希望无论我测试的是什么,性能(GFLOPs)都应该保持在10.5左右。但在实验中间观察到了显著的性能下降,如图1所示。 CPU频率和CPU温度如图2和图3所示。实验在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。许多人(主要是那些在重新编辑之前看到这篇文章的人)怀疑CPU过热是性能下降的主要原因。然后我回去安装了
lmsensors
linux包来跟踪这些信息,事实上,CPU温度上升了

但为了完成这张照片,我做了另一个对照实验。这一次,我给CPU一个每N之间的冷却时间。这是通过要求程序在循环开始时暂停若干秒来实现的

  • N在250-2500之间时,冷却时间为5s
  • 氮在2750~5000之间时,冷却时间为20s
  • 对于5250-7500之间的氮,冷却时间为40s
  • 最后,对于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
由于我没有将计算固定到一个内核,操作系统将交替使用两个不同的内核。采取行动更有意义

freq[i] <- max (freq0[i], freq1[i])
temp[i] <- max (temp0[i], temp1[i])

freq[i]TL:DR:你的结论是正确的。CPU的持续性能远未达到峰值。这是正常的:考虑到轻质散热片、风扇和供电,峰值性能仅作为突发交互工作负载的短期“奖金”,高于其额定持续性能

您可以在这台机器上开发/测试,但基准测试将很困难。您需要在集群、服务器或台式机上运行,或者至少在游戏/工作站笔记本电脑上运行


从你发布的CPU信息来看,你有一个Broadwell一代。它的最大涡轮为2.9GHz,TDP的持续频率为1.4GHz(6W)

对于短时间的爆炸,它可以运行得更快,产生的热量比冷却系统需要处理的热量多得多。这就是一切。它可以让像你这样的低功耗超便携笔记本电脑在网络浏览器之类的东西中具有快速的UI性能,因为interactive的CPU负载几乎总是突发的

桌面/服务器CPU(Xeon和i5/i7,但不是i3)仍然有turbo,但持续的频率更接近max turbo。e、 g.a的持续“额定”频率为4.0GHz。在该频率及以下,其使用(并转换为热量)不会超过其额定TDP 88W。因此,它需要一个能够处理88W的冷却系统。当电源/电流