为什么我的超便携笔记本电脑 CPU 无法在 HPC 中保持最佳性能

2023-12-11

我开发了一个高性能Cholesky 分解例程,在单个 CPU 上应具有约 10.5 GFLOP 的峰值性能(无超线程)。但是当我测试它的性能时,有一些我不明白的现象。在我的实验中,我测量了矩阵维度 N 从 250 增加到 10000 时的性能。

  • 在我的算法中,我应用了缓存(带有调整的阻塞因子),并且在计算期间始终以单位步幅访问数据,因此缓存性能是最佳的;消除了TLB和分页问题;
  • 我有 8GB 可用 RAM,实验期间最大内存占用低于 800MB,因此不会出现交换;
  • 在实验过程中,没有像Web浏览器这样的资源消耗大的进程同时运行。只有一些非常便宜的后台进程正在运行,每 2 秒记录一次 CPU 频率和 CPU 温度数据。

我预计无论我测试的 N 是什么,性能(以 GFLOP 为单位)都应保持在 10.5 左右。但在实验中间观察到性能显着下降,如第一张图所示。

CPU频率和CPU温度如图2和3所示。实验在 400 秒内完成。实验开始时温度为51度,当CPU繁忙时温度迅速升至72度。之后慢慢增长到最高78度。 CPU频率基本稳定,温度高时没有下降。

所以,我的问题是:

  • 既然CPU频率没有下降,为什么性能会受到影响?
  • how exactly does temperature affect CPU performance? Does the increment from 72 degree to 78 degree really make things worse? enter image description here enter image description here enter image description here

CPU info

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过热是性能下降的主要原因。然后我回去安装了lm-sensorslinux包跟踪这些信息,确实,CPU温度上升了。

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

  • N在250~2500之间,冷却时间为5s;
  • N在2750~5000之间,冷却时间为20s;
  • N在5250~7500之间,冷却时间为40s;
  • 最后对于7750到10000之间的N,冷却时间为60s。

请注意,冷却时间远大于计算所花费的时间。对于 N = 10000,在峰值性能下 Cholesky 分解只需要 30 秒,但我要求 60 秒的冷却时间。

这当然是一个非常无趣高性能计算中的设置:我们希望我们的机器始终以峰值性能工作,直到完成一个非常大的任务。所以这种停顿是没有意义的。但它有助于更​​好地了解温度对性能的影响。

这次,我们看到所有 N 都达到了峰值性能,正如理论所支持的那样!CPU频率和温度的周期性特征是散热和升压的结果。温度仍然有增加的趋势,只是因为随着N的增加,工作量越来越大。这也证明了需要更多的冷却时间才能充分冷却,正如我所做的那样。

达到峰值性能似乎排除了除温度以外的所有影响。但这确实很烦人。基本上它表示计算机在 HPC 中会感到疲劳,因此我们无法获得预期的性能增益。那么开发HPC算法的意义何在呢?


OK, here are the new set of plots: enter image description here enter image description here

不知道为什么我无法上传第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信息来看,你有一个双核超线程 Intel Core M,额定可持续频率 1.20 GHz,布罗德韦尔一代。其最大睿频频率为 2.9GHz,TDP-up 可持续频率为 1.4GHz(6W 时)。

对于短时间突发,它可以运行much比其冷却系统需要处理的速度更快并产生更多的热量。这是什么英特尔的“涡轮增压”功能就是这样。它可以让像您这样的低功耗超便携笔记本电脑在网络浏览器等内容中拥有快速的 UI 性能,因为交互式的 CPU 负载几乎总是突发性的。

台式机/服务器 CPU(Xeon 和 i5/i7,但不是 i3)仍然具有睿频,但持续频率是much更接近最大涡轮增压。例如A哈斯韦尔 i7-4790k具有 4.0GHz 的持续“额定”频率。在该频率及以下频率下,它的消耗(并转化为热量)不会超过其额定 TDP 88W。因此,它需要一个能够处理 88W 功率的冷却系统。当功率/电流/温度允许时,它的时钟频率可达 4.4GHz,功耗超过 88W。 (用于计算功率历史记录以保持 88W 持续功率的滑动窗口有时可以在 BIOS 中配置,例如 20 秒或 5 秒。根据运行的代码,4.4GHz 可能不会将电流需求增加到接近峰值的任何位置。具有大量分支错误预测的代码仍然受到 CPU 频率的限制,但这远没有像 Prime95 那样使 256b AVX FP 单元饱和。)

您的笔记本电脑的最大睿频比额定频率高 2.4 倍。高端 Haswell 台式机 CPU 只能升频 1.1 倍。最大持续频率已经非常接近最大峰值限制,因为它需要一个良好的冷却系统来跟上这种热量的产生。还有一个可以提供那么大电流的固态电源。

Core M 的目的是让 CPU 能够can将自身限制在超低功率水平(1.2GHz 时额定 TDP 为 4.5W,1.4GHz 时额定 TDP 为 6W)。因此,笔记本电脑制造商可以安全地设计一个又小又轻的冷却和电力传输系统,并且只能处理那么多的电力。 “场景设计功率”仅为 3.5W,这应该代表实际代码的散热要求,而不是 Prime95 等最大功率的东西。

即使是“普通”ULV 笔记本电脑 CPU 的持续额定功率为 15W,高功率游戏/工作站笔记本电脑 CPU 的额定功率为 45W。当然,笔记本电脑供应商将这些 CPU 放入具有更强大散热器和风扇的机器中。看到维基百科上的表格,并比较桌面/服务器 CPU(也在同一页面上)。


巅峰表现的实现似乎排除了所有影响 除了温度之外。但这确实很烦人。基本上它说 那台计算机在 HPC 中会感到疲倦,所以我们无法达到预期 性能增益。那么开发HPC算法的意义何在呢?

重点是在热限制不太严重的硬件上运行它们!像 Core M 这样的超低功耗 CPU 是一个不错的开发平台,但是not一个好的 HPC 计算平台。

即使是配备 xxxxM CPU(而不是 xxxxU CPU)的笔记本电脑也可以。 (例如,设计用于持续运行 CPU 密集型内容的“游戏”或“工作站”笔记本电脑)。或者在 Skylake 系列中,“xxxxH”或“HK”是 45W 移动 CPU,至少是四核。


进一步阅读:

  • 现代微处理器 90 分钟指南!
  • [现代处理器中的电源传输] - 一般背景,包括 Pentium 4 遇到的“电源墙”。 (https://www.realworldtech.com/power-delivery/) - 对 CPU/主板设计进行真正深入的技术探讨,以及为非常突发的需求提供稳定的低电压的挑战,以及在改变频率时对 CPU 请求更多/更少电压的快速反应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的超便携笔记本电脑 CPU 无法在 HPC 中保持最佳性能 的相关文章

随机推荐

  • 为什么这个汇编程序会输出相同的字符串两次?

    此凯撒密码程序生成解密字符串 长度始终为 10 并输出为 output txt 文件 例如下面的代码创建 txt 文件 ILIKEASSEM HOWAREYOUU 但是当我运行这段代码时 该文件是 ILIKEASSEM ILIKEASSEM
  • 除以零后的余数

    我知道数学中不允许除以零 但是我可以使用零模吗 我应该得到什么答案 例如 10 0 5 0 标准将其定义为 未定义 在几乎所有处理器中 求模都是通过与除法相同的功能来执行的 在现代较大的处理器中 它是一条指令 例如 x86 大多数情况下 该
  • CSS 选择器中的空格

    在选择器中 空格可以指示后代 不过 我发现空格也可以忽略 根据我的测试 这就是我的think它的意思是 周围可以使用空格 和上下文字符 例如 and gt 空格可能not用于伪类和元素字符 and 以及属性选择器 空格可能not与类和 id
  • 链接服务器 SQLNCLI 问题。 “没有活跃的交易”

    我尝试执行存储过程并将其结果简单地插入到临时表中 并且收到以下消息 无法执行该操作 因为 OLE DB 提供程序 SQLNCLI 对于链接服务器 MyServerName 无法开始分布式 交易 用于链接服务器的 OLE DB 提供程序 SQ
  • 使用 CSS 无限移动多个背景

    我有两个背景 body background image url img nemo png url img ocean png 我该如何制作nemo png background左右无限移动但不影响ocean png background
  • 如何使用外部 CSS 覆盖内联样式?

    我有使用内联样式的标记 但我无权更改此标记 如何仅使用 CSS 覆盖文档中的内联样式 我不想使用 jQuery 或 JavaScript HTML div style font size 18px color red Hello World
  • 报告长期运行的 Celery 任务的结果

    Problem 我已将长时间运行的任务分割为逻辑子任务 因此我可以在每个子任务完成时报告其结果 然而 我试图报告一项实际上永远不会完成的任务的结果 而不是在进行过程中产生值 并且正在努力使用我现有的解决方案来做到这一点 背景 我正在为我编写
  • 如何在满足给定条件时终止Python中的多进程? [复制]

    这个问题在这里已经有答案了 假设我有这个功能 def f while True x generate something if x condition return x if name main p Pool 4 我想在多进程中运行此函数
  • 使用clone()和printf的段错误

    我正在尝试如何clone 在 Linux 3 10 0 327 3 1 el7 x86 64 中为线程实现 我正在运行这段代码 偶尔会出现段错误 我知道如果我使用CLONE THREAD那么就没有办法检查线程是否完成 但是为什么printf
  • 如何让列表视图只显示3个项目

    我有一个列表视图 其中正在加载 10 个项目 我希望滚动时只显示 3 个项目 我不想通过调整列表高度来做到这一点 即使滚动很小 意味着没有项目应该部分显示 我也只想显示 3 个项目 如何实现这一目标 提前致谢 我将发布一个代码 我用它来填充
  • Android ListActivity行点击

    我有一个显示有关玩家的信息的活动 这部分工作正常 我使用了适配器 但是我应该将检测行何时被单击的代码放在哪里 PlayersActivity java package com democratandchronicle billstraini
  • 保存自定义首选项的值

    我创建了一个新的首选项 它直接延伸自CheckboxPreference 在这个类中我添加了一个简单的新boolean价值 我现在的问题是如何存储这个新值 如果用户点击正常CheckboxPreference该值自动存储在首选项中 我希望这
  • 图例与饼图重叠

    在 python 中使用 matplotlib 图例与我的饼图重叠 尝试了 loc 的各种选项 例如 最佳 1 2 3 但无济于事 关于如何准确提及图例位置 例如从饼图边界给出填充 或至少确保它不重叠有什么建议吗 简短的回答是 您可以使用p
  • firebase 从 firestore js sdk 缓存检索文档是否收费

    我正在使用 firebase JS SDK 离线持久化已启用 这会自动将我检索到的文档缓存在 JS SDK 中 我执行这个查询 once firebase firestore doc path to doc get twice fireba
  • 在快速路由文件中使用 socket.io

    我正在尝试将 Socket io 与 Node js 结合使用 并发送到路由逻辑内的套接字 我有一个相当标准的 Express 3 设置 其中有一个位于路由中的 server js 文件 然后我有一个位于路由文件夹中的 index js 该
  • 为什么打印功能没有在正确的时间运行? [复制]

    这个问题在这里已经有答案了 这是我的代码 import time as t print hello end t sleep 1 print hello end t sleep 1 print hello end t sleep 1 我的问题
  • Imagemagick 去饱和黑/白?

    想把它变成黑白的 不知道该使用 imagick 的什么 handle data file get contents http www bungie net Stats Reach Nightmap ashx http www bungie
  • AttributeError:“CountVectorizer”对象没有属性“get_feature_names”

    该代码之前可以运行 没有显示任何错误 这是一个情感分析机器学习项目 该代码基于字数统计的逻辑回归模型 c CountVectorizer stop words english def text fit X y model clf model
  • jqGrid 使用“filterToolbar”在客户端进行过滤

    我必须向完全在客户端管理的 jqGrid 添加过滤 数据仅从服务器加载一次 我需要使用 filterToolbar 来过滤网格数据 但如果客户端有默认搜索机制 则无法找到信息 服务器端搜索是做到这一点的唯一方法吗 谢谢 科斯明 不幸的是 搜
  • 为什么我的超便携笔记本电脑 CPU 无法在 HPC 中保持最佳性能

    我开发了一个高性能Cholesky 分解例程 在单个 CPU 上应具有约 10 5 GFLOP 的峰值性能 无超线程 但是当我测试它的性能时 有一些我不明白的现象 在我的实验中 我测量了矩阵维度 N 从 250 增加到 10000 时的性能