ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DMIPS/MHz从1.57到7.4:ARM核心微架构演进与选型指南

DMIPS/MHz从1.57到7.4:ARM核心微架构演进与选型指南 1. DMIPS到底衡量什么一个跑了四十年的整数基准先看一组数据。从Cortex-A5到Cortex-A78ARM官方给出的DMIPS/MHz数值从1.57涨到了7.4看起来是翻了将近五倍。但如果只看这个数字你很容易忽略一个重要事实这个跑分指标诞生于1984年比ARM公司本身的历史还长。一个四十年前的老基准测试到今天还能用来衡量移动芯片和服务器芯片的性能差异它到底测的是什么又有什么测不到的东西DMIPS的全称是Dhrystone MIPS其中Dhrystone是一个整数运算基准测试由Reinhold Weicker在1984年设计。它模拟的是系统编程中常见的负载字符串拷贝、整数算术、数组访问、控制流跳转。测试结果经过换算以VAX 11/780这台老机器为参照——当年VAX 11/780跑这个测试能得到一个基准分其他机器跑出来的分数除以这个基准分就得到了以DMIPS为单位的相对性能。关键点在于DMIPS/MHz是把这个分数再除以运行频率。这么做的好处很明显不同核心跑在不同频率下没法直接比较绝对性能但用每MHz能跑多少DMIPS就能横向对比微架构本身的执行效率。这就像比较两辆车的动力性能时不看最高速度而看每千转能输出多少扭矩。ARM官方公布的每一代核心的DMIPS/MHz数据都可以理解为这套量化标准下的微架构效率分。但DMIPS有两个不可忽视的局限。第一它是纯整数测试不涉及浮点运算也没有真正压测内存带宽和缓存延迟。Dhrystone测试程序的代码和数据都很小能完全放进L1缓存里所以它测的基本上是CPU核心流水线本身的执行效率而不是一个完整系统的真实表现。这也是为什么后来大家还会去看SPECInt、Geekbench甚至更贴近场景的benchmark——那些测试会引入更复杂的指令混合、更大的数据集甚至包含多线程和内存访问模型。第二DMIPS的数值受编译器的优化水平影响极大。同一个A72核心用GCC和ARM Compiler分别编译Dhrystone跑出来的分数可能差出百分之二三十。所以对比不同来源的DMIPS数据时一定要确认大家用的是同一套编译器优化选项否则就是拿两把不同的尺子量同一个东西量出来的数根本没有可比性。既然知道了DMIPS的底细接下来就好办了我们把A5到A78这几代核心按代际拆开逐个看它们各自的DMIPS数据背后微架构到底发生了什么变化。2. ARMv7年代的三次跳跃A5/A7、A9、A15各自的角色2.1 A5和A7顺序执行阵营的坚守者Cortex-A5发布于2009年是ARMv7-A架构里体积最小、功耗最低的核心。它的DMIPS/MHz只有1.57今天看来寒酸得很但在当时它的定位非常明确替代ARM9和ARM11做入门级手机、电子书阅读器、还有各种嵌入式设备里的应用处理器。A5的微架构是顺序执行也就是说指令严格按照程序顺序一条条执行遇到内存访问等阻塞就只能干等。好处是芯片面积小、功耗低、设计简单对成本敏感的终端产品来说是刚需。2011年的Cortex-A7在思路上跟A5一脉相承但把性能往前推了一步DMIPS/MHz从1.57升到了1.98级流水线功耗控制在ARMv7时代的最低水平。A7最值得记住的历史角色是性能核心的伴侣ARM第一代big.LITTLE异构计算方案里Cortex-A7就是那颗负责日常轻负载的小核跟Cortex-A15搭档组成四加四架构。即便放在今天A7的应用场景也没完全消失大量入门级路由器、物联网网关上还能看到它活跃的身影原因只有一个——省电省得实在。2.2 A8和A9乱序执行带来的性能革命Cortex-A8在架构上是个里程碑它是ARM第一款超标量处理器理论上每周期能双发射两条指令DMIPS/MHz达到了2.0。A8的流水线加深到了13级频率可以拉得更高但依然是顺序执行。苹果A4处理器用的就是它iPhone 4的流畅体验在那个年代已经相当惊艳。A8的槽点在于顺序执行的结构让它对流水线停顿特别敏感一旦遇到了缓存未命中前面所有后续指令都得跟着停下来等性能波动明显。真正让ARM在消费电子领域站稳脚跟的是Cortex-A9。它是ARM第一款引入乱序执行的高性能核心DMIPS/MHz飙到了2.5。乱序执行是什么概念就好比一个高级餐厅的厨房不是按点单顺序一道菜一道菜规规矩矩地做而是哪个食材能最快准备好就先做哪个只要最后上菜的节奏正确就行。CPU内部也是一样后续指令如果互不依赖可以先跳过阻塞的指令提前执行把流水线空转的时间填满。这个能力对性能的提升是结构性的不是靠堆频率能堆出来的。A9被当时的手机厂和芯片厂用了个遍苹果A5、三星Exynos 4210、德州仪器OMAP4、英伟达Tegra 2几乎市面上所有中高端智能手机都是它的身影。从A7到A9DMIPS/MHz从1.9涨到2.5看起来只有31%的提升但在当年实际体验上的差距远比数字明显——因为乱序执行还带来了性能一致性的提升即使指令流中出现阻塞CPU也能维持较高的吞吐量不会频繁卡顿。2.3 A15的性能冲刺与功耗失控ARM在Cortex-A15上憋了一个大招。它把乱序执行窗口加大、流水线加深DMIPS/MHz直接推到了3.5比A9整整高出40%。这个数字放在当时非常惊人ARM甚至把A15称为手机上的PC处理器。但代价也极其沉重功耗和发热全面失控。搭载A15的三星Exynos 5410在Galaxy S4上跑一会儿就开始降频英伟达Tegra 4也是出了名的小火炉。我至今记得当年评测手机时某款A15设备背面烫得几乎拿不住跑分成绩在几分钟内就一路下滑。A15的教训说明了一个简单道理DMIPS/MHz只衡量了每Hz能做多少功但没告诉你这个功是用多少瓦换来的。如果功耗高到无法持续运行那纸面性能再高也只是昙花一现。ARM自己也意识到了这个问题于是中端补位选手Cortex-A12和A17登场它们介于A9和A15之间DMIPS/MHz在3.0到3.5之间但功耗控制好很多。这个时期的设计思路已经很清楚不能只冲峰值性能还得考虑实际可长时间维持的工作频率。ARMv7这个时代的DMIPS变化曲线勾勒出的是一个循序渐进的探索过程。从顺序到乱序是质变从A9到A15是量变加功耗失控。而接下来进入64位时代后ARM的布局思路发生了根本性变化。3. 64位转型期A53/A57组合拳与A72/A73的修补3.1 A53出货量最大的ARM核心之一2014年前后移动设备开始全面转向64位计算ARM顺势推出ARMv8-A架构。这一代最特殊的地方在于ARM同时发布了两个定位完全不同的核心Cortex-A53和Cortex-A57彻底拉开效率和性能两条产品线。Cortex-A53直接继承了A7的定位一个顺序执行的效率核心DMIPS/MHz为2.3。数字上比A7的1.9高了21%而且它还支持64位指令集。A53的神奇之处在于它的能效比在后续十年里都没有被超越太多无数中低端手机、平板、路由器、智能电视盒子、开发板都在用四颗A53或八颗A53的组合。Raspberry Pi 3用的就是四核A53到现在还有大量入门级Linux设备在用它。32位和64位都能跑设计简洁功耗极低这几点加起来让A53成了ARM历史上生命周期最长、出货量最大的核心之一。A53在DMIPS上的增长虽然不多但它证明了顺序执行不等于落后。只要频率合理、缓存配得够用顺序执行核心在轻负载场景下的体验并不差。问题只在于当任务负载上去了A53就容易成为瓶颈这时候就得靠旁边的性能核来接管。3.2 A57的翻车与A72的补救Cortex-A57是ARM第一款64位高性能核心目标直指A15的定位升级版DMIPS/MHz一跃来到4.1。纸面数字很漂亮但从实际产品表现来看A57重蹈了A15的覆辙——功耗和发热问题非常突出。高通骁龙810就是最典型的例子一颗八核A57A53的SoC被做成了一代火龙多家手机厂商不得不通过锁核降频来控制温度实测性能跟纸面数据差距巨大。做平板和笔记本的厂商更是望着它的功耗望而却步。ARM紧接着在2015年推出了Cortex-A72本质上是对A57的微架构优化和完善DMIPS/MHz从4.1提升到4.7功耗却比A57下降了不少。A72的实际口碑比A57好得多最让人容易记住的例子是Raspberry Pi 4它用的是一颗四核A72主频能到1.8GHz虽然绝对性能在如今看来不算强但作为一块几十美元能买到的开发板其稳定性和能效表现非常均衡。从工程开发的角度如果你手头有一个为A72调优过的Linux系统它的执行效率是比较有参考价值的——因为A72的乱序执行能力已经能驾驭大多数单板机上的日常任务了。3.3 A73效率优先的信号2016年的Cortex-A73又是一个有意思的节点。它的DMIPS/MHz只有4.8比A72的4.7只是微幅上升但功耗在同性能下比A72低了不少。这说明ARM已经不想再一味追求峰值性能增长而是开始重视性能功耗比这个维度。A73被用在华为麒麟960、高通骁龙660等芯片上日常使用体验和A72相当但发热和续航表现更好。到这个时候big.LITTLE架构也已经全面成熟大核(A7x系列)负责突发高负载小核(A5x系列)负责待机和轻负载调度器在两者之间动态切换任务。DMIPS这个指标在这种场景下的意义更多是用来确定大核该用哪一颗、小核该用哪一颗以及怎么样的频率组合能匹配目标功耗预算而不是简单地选一颗总分数最高的核心。从A53到A73这四颗核心的DMIPS增长曲线并不陡峭每代提升基本在15%以内。ARM似乎在用这几年的时间消化64位转换带来的复杂度同时把功耗墙问题一点点摸透。直到A76的出现这条温和的曲线才被彻底打破。4. A76是一次真正的架构迭代数据暴涨背后的技术逻辑2018年发布的Cortex-A76和它的前代A75在DMIPS/MHz上拉开了明显差距A75是5.2A76直接跳到6.2单代提升接近20%。这是一个什么概念在现代CPU微架构已经高度成熟的背景下单代IPC提升能超过10%都已经算大动作20%几乎是换了一代人级别的改变。那么A76到底做了什么第一个关键变化是ARM对微内核进行了彻底重构。A76不是A75的简单修补而是从前端解码、乱序执行窗口、数据预取、分支预测到Load/Store单元都重新设计了一遍。用大白话说A75时代CPU的前端每周期能拆解的指令数量有限哪怕后端执行单元再多喂不进去也是白搭。A76把前端喂料能力加宽乱序窗口加大让CPU在同频率下能塞进更多活。另一个重点是分支预测器的大幅增强——A76被正好用于服务器和数据中心场景而服务端的代码往往有大量循环和条件跳转分支预测准了流水线就不会频繁被清空重来吞吐量自然上去。第二个变化是A76大幅强化了内存级并行能力。前面提到DMIPS测的是尽量待在缓存里的运算但真实场景下内存速度对CPU性能的影响极其显著。A76在Load/Store队列、缓存带宽、内存预取算法上的优化直接提升了面对真实复杂负载时的表现。这也是为什么从A76开始基于ARM的笔记本产品开始有底气挑战入门级x86体验——苹果M1系列虽然是自研Firestorm核心但其研发思路和A76时代ARM对性能与功耗并行优化的追求是同源的。第三A76也是ARMv8.2架构的代表作加入了更多面向服务器和机器学习场景的指令集扩展。虽然这些扩展跟DMIPS本身关系不大但代表的是ARM开始从移动端IP供应商向全场景计算架构转型。A76在高通骁龙855/865、麒麟980/990以及后来的Raspberry Pi 5上都有应用市场验证非常充分。如果你拆开任何一台这几年的中高端安卓手机大概率能见到A76或基于它演化出来的核心在承担大核的工作。A76让我意识到一件事DMIPS/MHz曲线上的一个陡峭跳跃背后往往不是单一变量的优化而是整个微架构设计哲学的一次更新。数字只是结果架构才是本质。5. A78的取舍哲学同功率下的性能极限A77是A76的延续DMIPS/MHz从6.2上升到6.8属于典型的稳步迭代。到2020年的A78数字来到了7.4只比A77提升了约9%。看起来增幅并不算惊艳但A78真正的卖点不在DMIPS数字本身而在性能功耗比。ARM官方在发布时给出了两个参考口径与A77相比在同等功耗下性能提升约20%或者在同等性能下功耗降低约50%。这个同功耗下多干活的思路体现的是智能手机和嵌入式设备对续航和散热的极致敏感。A78本质上是在A77的微架构基础上针对能效做了大量电路级和流水线级的调优。支持5nm工艺是它能在同等功耗下跑出更优性能的重要条件——工艺的代际升级直接降低了同频率下的动态功耗留给芯片更多性能余量。A78还加入了LPDDR5内存的支持配合新一代内存技术内存带宽瓶颈进一步缓解不仅缓存内的DMIPS测试数字好看真实应用场景下的响应速度也明显提升。从产品布局上看A78发布时还带出了一个新思路——ARM在传统的big.LITTLE双轨之外引入了Cortex-X系列自定义核心作为性能特化的第三条轨道。Cortex-X1本质上是在A78基础上放开功耗约束、加大乱序窗口、堆高规格的产物DMIPS数字没有官方公布但真实单核性能进一步上探。这种X系列拉峰值、A系列兼顾日常、A5x系列保续航的三级组合后来成了旗舰手机和高端平板的标配。A78的DMIPS达到7.4换算成绝对性能是什么概念一颗四核A78跑到2.4GHz就有大概71,000 DMIPS的理论整数性能这个水平已经超过了不少早期入门级x86处理器。当然这里说的是理论峰值实际应用中还要看散热、频率调度和内存子系统能否跟上。但起码在2020年这个时间点ARM用A78证明了一件事在高性能计算领域每MHz的干活能力已经到了不容忽视的程度。它对单线程性能有严格要求的嵌入式场景比如工业HMI、边缘网关、高端路由器控制面都是一个非常合适的选择。6. 用DMIPS选芯的几条实操准则看了这么多年的DMIPS数据踩过不少坑之后我总结了几条在真实选型里能用得上的原则供大家参考。第一DMIPS/MHz适合用来比较同一时代、同一指令集的核心。比如在A72和A76之间比数字是有意义的高出的部分基本反映了微架构的IPC差异。但如果你拿Cortex-A7的1.9和Cortex-A78的7.4直接做除法想着快了四倍这就不靠谱了——两者的指令集版本、测试条件、编译器优化等级都不同而且实际场景里A78面对的内存瓶颈、缓存压力远远超过A7时代真实体验的差距往往比这个比值更复杂。第二别只看单核DMIPS要看整颗SoC的总吞吐和功耗预算。芯片的DMIPS/MHz是理论值整颗SoC能跑多高频率、几分之几能持续维持完全是另一回事。A15已经演示过了纸面3.5半年后手机厂集体降频锁核。相比之下A53的2.3虽然低但如果任务性质是轻量高并发的网络包转发八颗A53满载运行的总吞吐量可以远超两颗A78。选型第一步永远是定义清楚负载特征再去看对应的核心组合。第三DMIPS之外的指标同样重要。缓存大小和带宽、内存通道数、外设接口、GPU/NPU能力、软件生态、工具链支持这些都是决定项目成败的因素。举个例子如果你要做ARM Linux开发光看核心还不够还要确认SoC对Linux主线内核的支持程度、驱动质量以及交叉编译工具链的成熟度。这就像是看一套房子不能只看客厅面积还得看卫生间漏不漏水、厨房能不能通燃气。DMIPS是个很好的起点但它只是起点。第四也是我最想强调的一点能用实测数据就不要用纸面数据。同一颗A78核心放在一款散热设计拉胯的手机里和放在一款精心设计的工业平板上实际性能可以相差到三成以上。买开发板的话直接跑一遍Dhrystone或者更贴近你应用场景的sysbench、SPECInt测试拿到自己环境下的数据再下结论。我自己的习惯是拿到新板卡后先跑一遍dhrystone确认平台和笔者的配置参数再根据目标负载跑两到三个针对性benchmark留档备查。这比翻一百页datasheet都管用。回头再看A5到A78这十几年的DMIPS演化其实就是一部ARM如何在性能与功耗之间逐步找到平衡的历史A5和A7教会了ARM如何把效率做到极致A9证明了乱序执行的价值A15用功耗失控给所有人敲响了警钟A53/A57完成了64位转型A76完成了微架构的彻底更新A78则把性能功耗比推上了新台阶。每一代核心的DMIPS数字都不是孤立存在的它背后是当时最先进工艺、最合理的微架构设计、以及对真实场景需求的深刻理解。下次再看到一颗芯片标注着DMIPS/MHz的数值时希望你也能从这数字里读出芯片背后的设计逻辑和取舍哲学。
返回列表