网易首页 > 网易号 > 正文 申请入驻

同样一堆数字,排个序为什么能快6倍?

0
分享至

同样一组数字,只是提前排好序,处理速度就能快出6倍。这不是玄学,是CPU里一条叫分支预测的流水线在起作用。

很多人听过"CPU会猜if往哪边走,猜错就变慢"这个说法,但真正的工程谜题没被解开:CPU为什么非得猜?硬件靠什么记住过去的分支?猜错的那一瞬间,芯片里到底发生了什么?为什么一次猜错要毁掉15到20个时钟周期的工作?


把if语句底下那层硅片机制拆开看,答案就清楚了。

1.89秒和11.42秒的差距

先看一段标准的C基准测试。分配一个含32768个随机整数的数组,数值在0到255之间,然后循环10万次,把大于等于128的值累加进一个求和变量。

用gcc -O2编译后,结果分成两种:

  • 开启std::sort排序:约1.89秒
  • 不排序、保持随机数组:约11.42秒

循环做的算术运算完全一样,处理的整数集合也完全一样,但未排序的版本慢了600%。

用Linux perf给两次运行做性能剖析,硬件性能计数器直接给出了证据。未排序数组这边,耗时11.42秒,跑了38820114920个周期,指令数26400180410,每周期指令数(IPC)只有0.68,分支数3276800000,分支预测失败1638104210次,占全部分支的49.99%。

排序数组这边,耗时1.89秒,周期数6425890120,指令数23910240000,IPC达到3.72,分支数同样是3276800000,但分支预测失败只有328140次,占比0.01%。

未排序时,CPU有一半的分支预测是错的,49.99%这个数字,基本等于抛硬币。吞吐量从每周期3.72条指令塌到0.68条。要理解原因,得看指令流水线。

CPU为什么必须猜

现代CPU核心,比如Intel Raptor Lake、AMD Zen 4/Zen 5、Apple M系列,不是那种执行完一条指令再取吓一条的解释器。它是一座深度流水线、乱序、超标量的工厂,有14到20多个独立阶段。

取指阶段用程序计数器从L1指令缓存里读16到64个原始字节;译码阶段把变长的x86机器码翻译成固定长度的内部微操作;寄存器重命名把架构寄存器映射到几百个物理推测寄存器,消除假数据依赖;分发和重排序缓冲区把微操作放进保留站,等输入就绪;执行阶段由多个并行ALU、向量单元和加载/存储流水线乱序算出结果;写回和退休阶段再严格按程序顺序把结果提交到架构状态。

一个6宽的核心跑在4GHz,取指引擎每四分之一纳秒就得往流水线里塞6条新指令。

这时候遇到一个条件分支:比较eax和128,大于等于就跳转。条件取决于eax里的值,而eax可能正在从L1缓存加载,或者在等前一次计算。ALU要到第14或15阶段才知道跳转的真实结果。

如果CPU停下来等ALU算完,每个分支都会让流水线卡住15到20个时钟周期。分支大约占典型编译代码的15%到20%,也就是每5到7条指令就有一个分支,等分支会让CPU吞吐量下降超过75%。

CPU等不起。它必须在第1阶段就预测结果,然后沿着假设的路径推测性地取指。

硬件怎么猜

硬件分支预测发生在专用硅片单元里,和取指同时进行。

分支目标缓冲区(BTB)是一块按程序计数器低位索引的专用缓存。CPU还没译码出刚取到的指令是什么,就得先知道两件事:这条指令是不是分支?如果跳转,目标地址在哪?分支执行时,BTB会存下它的目标地址,之后再次取到同一个程序计数器,BTB能在0到1个时钟周期内给出目标地址。

预测条件分支是跳转还是不跳转,早期CPU用1位历史标志。1位预测的问题出在循环退出惩罚上:一个跑1000次的循环,1位预测器会错两次,一次是循环终止时,一次是……

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
董路哀叹:邵佳一0-5比当年卡马乔1-5还恶心 一件事我喊了10年没人听

董路哀叹:邵佳一0-5比当年卡马乔1-5还恶心 一件事我喊了10年没人听

风过乡
2026-10-03 06:56:46
胡锡进发微博忘删AI回复“需要我帮你通读核对吗?”,网友:比自己写便宜

胡锡进发微博忘删AI回复“需要我帮你通读核对吗?”,网友:比自己写便宜

可达鸭面面观
2026-10-01 14:43:37
熟女人妻街头穿搭,紧身瑜伽裤勾勒丰腴曲线简约灰调穿出松弛魅力

熟女人妻街头穿搭,紧身瑜伽裤勾勒丰腴曲线简约灰调穿出松弛魅力

只要高兴就好
2026-09-29 08:28:05
国庆集中式大休假,已跟不上流动中国节奏?

国庆集中式大休假,已跟不上流动中国节奏?

解筱文
2026-10-03 08:24:18
太硬了!尼克斯铁人!四年1.32亿!尼克斯值得吗?

太硬了!尼克斯铁人!四年1.32亿!尼克斯值得吗?

篮球盛世
2026-10-03 13:06:52
名古屋亚运会官方更正,中国金牌数从154枚更正为155枚!

名古屋亚运会官方更正,中国金牌数从154枚更正为155枚!

第五才子
2026-10-02 09:44:44
2000年,歹徒长途客车起色心,3名女子被强奸5次,43人冷眼旁观!

2000年,歹徒长途客车起色心,3名女子被强奸5次,43人冷眼旁观!

法网恢恢
2026-09-06 23:15:14
辽宁发布双预警!暴雨、冰雹、10级大风……

辽宁发布双预警!暴雨、冰雹、10级大风……

新浪财经
2026-10-03 14:04:50
古特雷斯临走前说大实话,当众撕开两大强国遮羞布,整整憋了九年

古特雷斯临走前说大实话,当众撕开两大强国遮羞布,整整憋了九年

莹莹的历史说
2026-08-29 02:32:14
拳王泰森来瞻仰毛主席遗容,他出来说了一句这辈子都没敢说的话

拳王泰森来瞻仰毛主席遗容,他出来说了一句这辈子都没敢说的话

游文刀
2026-09-30 00:14:51
周波任天津市委政法委分管日常工作的副书记

周波任天津市委政法委分管日常工作的副书记

极目新闻
2026-10-02 18:10:55
93万元!路虎揽胜新车官宣:9月30日,正式发布

93万元!路虎揽胜新车官宣:9月30日,正式发布

3C毒物
2026-10-01 01:56:50
都说酒后易做荒唐事,看完网友经历,实在替人脸红!

都说酒后易做荒唐事,看完网友经历,实在替人脸红!

夜深爱杂谈
2026-07-22 20:15:40
终于明白大佬们精力充沛的原因了!网友:大家终于醒悟了!

终于明白大佬们精力充沛的原因了!网友:大家终于醒悟了!

另子维爱读史
2026-09-27 20:12:23
够狠!王励勤终于动真格的了,直接砍掉前主席的后花园

够狠!王励勤终于动真格的了,直接砍掉前主席的后花园

以茶带书
2026-06-21 16:00:21
直到张本智和被曝“性丑闻”,我才理解,为何樊振东执意要去德国

直到张本智和被曝“性丑闻”,我才理解,为何樊振东执意要去德国

大中国
2026-10-03 15:13:05
南宁骑行圈风波尘埃落定!梁女士退婚失业,鸟哥销号隐身,一时冲动突破底线,结局只能自食苦果

南宁骑行圈风波尘埃落定!梁女士退婚失业,鸟哥销号隐身,一时冲动突破底线,结局只能自食苦果

火山詩话
2026-10-03 11:29:58
没想到,负债累累的前夫黄有龙,竟给50岁赵薇留下“一手好牌”

没想到,负债累累的前夫黄有龙,竟给50岁赵薇留下“一手好牌”

温一壶皎月
2026-10-03 10:50:52
马斯克的星链覆盖150多个国家,为何始终无法进入中国?

马斯克的星链覆盖150多个国家,为何始终无法进入中国?

壹知眠羊
2026-09-27 07:07:22
仅21岁广西姑娘凌晨去世,男友三次改婚期,最后聊天记录看哭全网

仅21岁广西姑娘凌晨去世,男友三次改婚期,最后聊天记录看哭全网

青杉依旧啊啊
2026-10-02 16:04:23
2026-10-03 17:07:00
算力游侠
算力游侠
游走在API与报错之间,用魔法(AI)打败魔法的非硬核玩家。
177文章数 93关注度
往期回顾 全部

科技要闻

英伟达盘中创历史新高,市值逼近6万亿美元

头条要闻

马斯克断崖式分手4娃高管 女方并非小娇妻而是大女主

头条要闻

马斯克断崖式分手4娃高管 女方并非小娇妻而是大女主

体育要闻

这个讨论了一夏天的问题,马刺有答案了吗

娱乐要闻

假期快乐!贾乃亮晒和甜馨国庆出游照

财经要闻

4亿台电视挂墙落灰 为何没人愿意开了?

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

本地
家居
手机
游戏
教育

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

家居要闻

2026建博会(广州) 公装联探展交流活动

手机要闻

“争气机”换更强“争气芯”:全系韬芯片之华为Mate 90发布,央视报道称走出世界半导体的新路

昆汀狂喜 《GTA6》实体收藏被恶搞 全变女主玉足周边

教育要闻

光大银行2027录用名单:北方工业大学9人,人大7人!

无障碍浏览 进入关怀版