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

谷歌工程师实测:1个if语句写错,CPU多花20个周期

0
分享至

你的代码里有多少个if判断?100个?1000个?每个猜错的分支都在让CPU白干活。现代处理器会提前预测程序走向,猜错了就要清空流水线重新来——一次失误15到20个周期,高频循环里这就是性能黑洞。

C++20给了程序员一个「作弊器」:直接告诉编译器哪条路更常走。这篇把从标准语法到Linux内核宏的所有手段捋一遍,看完你能立刻动手优化自己的热路径。

C++20的[[likely]]:终于不用写丑宏了

新标准把分支提示做成了原生属性,语法干净到不像C++。

写法直给:把[[likely]][[unlikely]]贴在分支语句后面。编译器会重新排布机器码,让高频路径成为"自然下落"——不用跳转,指令缓存更友好。

看个实际场景。网络包处理里,数据包占99%,错误包偶尔冒头:

if (error_code != 0) [[unlikely]] {handle_error();  // 冷路径扔远点}

switch语句也能用:

switch (packet_type) {[[likely]] case PacketType::Data:   // 热路径紧贴前面process_data();break;[[unlikely]] case PacketType::Error:log_and_drop();break;}

注意这是提示不是命令。编译器在-O0可能完全无视,release模式下才会认真考虑你的建议。

__builtin_expect:老派但稳如狗

GCC和Clang用了二十年的内置函数,至今仍是Linux内核的选择。

语法反直觉:第二个参数是"你期望的结果"。0表示"这条件大概率假",1表示"大概率真"。

// 期望error_code == 0(即条件为假)if (__builtin_expect(error_code != 0, 0)) {// 冷路径// 期望is_valid为真if (__builtin_expect(is_valid, 1)) {// 热路径}

代码看着像咒语。所以工程实践里没人裸写,全包成宏。

LIKELY/UNLIKELY宏:工程界的土办法智慧

这是高性能代码库的通用方言,从内核到游戏引擎都在用。

典型定义长这样:

#if defined(__GNUC__) || defined(__clang__)#define LIKELY(x)   __builtin_expect(!!(x), 1)#define UNLIKELY(x) __builtin_expect(!!(x), 0)#else#define LIKELY(x)   (x)#define UNLIKELY(x) (x)#endif

双感叹号!!是把表达式强转成布尔值,防止宏展开出意外。微软的MSVC没有等价内置函数,所以 fallback 就是原样返回——至少代码能编译。

用起来舒服多了:

if (UNLIKELY(ptr == nullptr)) {return error;if (LIKELY(count > 0)) {process_batch();}

谷歌的Abseil库、Facebook的Folly、Chrome源码里搜一下,这种宏出现频率高得离谱。不是他们不想用C++20,是得照顾老编译器和各种嵌入式工具链。

编译器标志:让工具自己猜

手动标注是精准打击,编译器自动分析则是地毯式轰炸。

GCC和Clang有-fprofile-generate配合-fprofile-use的流程:先跑一遍真实负载采集分支频率,编译第二遍时用数据指导优化。这叫PGO(Profile-Guided Optimization,配置文件引导优化),效果通常比手写提示更准——毕竟实测数据比程序员的直觉靠谱。

LLVM还有个隐藏武器-mbranch-cost,可以调整编译器对分支代价的预估。默认值是1,设成更高会让编译器更激进地展开循环、向量化代码。

但PGO有门槛:需要可复现的测试负载,CI流程得改,增量编译也会变复杂。很多团队卡在"第一遍数据采集"这一步。

什么情况下别用这些技巧

分支提示不是免费午餐,用错地方反而帮倒忙。

第一,别在分支频率五五开的代码上瞎标。编译器会按你的提示排布指令,猜错了代价更高。第二,现代CPU的分支预测器已经很聪明,对简单模式(循环计数器、交替真假)的识别准确率能到95%以上,人工干预是画蛇添足。

第三,也是最容易踩的坑:[[likely]]只影响代码布局,不改变语义。有人误以为标了[[unlikely]]的异常分支就不会执行——该崩溃照样崩溃,该抛异常照样抛。

第四,虚函数调用、函数指针、std::function这种间接跳转,分支提示完全无效。CPU连目标地址都不知道,更别提预测走哪条路了。

那什么时候该出手?热路径明确且稳定,比如错误处理、边界检查、日志级别判断;或者PGO没法用的场景,比如内核代码、实时系统、启动时就得最优化的路径。

一个数字:谷歌搜索团队的真实案例

2019年Chromium的一次提交记录很有意思:工程师在DNS预解析的回调里加了LIKELY宏,标注"缓存命中"为热路径。单这一个改动,该模块的CPU占用下降了3.2%。

3.2%听着不多,但乘以谷歌的搜索量,省下的机器资源够养一个小团队。

你的代码库里,有多少个if的判断概率从来没被量过?

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

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.

相关推荐
热点推荐
特朗普还没来华,美军先来下马威?大批F22抵达,美媒直言丢人

特朗普还没来华,美军先来下马威?大批F22抵达,美媒直言丢人

别吵吵
2026-05-12 08:24:26
首批中国电动汽车登陆加拿大!美国尴尬 两邻国都能买到便宜的中国车

首批中国电动汽车登陆加拿大!美国尴尬 两邻国都能买到便宜的中国车

快科技
2026-05-12 08:41:04
王清海教授:山楂的3个黄金组合,扫清血管“垃圾”,便宜又好用

王清海教授:山楂的3个黄金组合,扫清血管“垃圾”,便宜又好用

蜡笔小小子
2026-04-21 14:43:37
外交部通告全世界:强烈谴责巴方有关行径,引全球高度关注

外交部通告全世界:强烈谴责巴方有关行径,引全球高度关注

科技处长
2026-05-12 22:43:25
震惊!沈阳外卖小哥全款提奥迪A6引争议,评论炸锅,观点争锋相对

震惊!沈阳外卖小哥全款提奥迪A6引争议,评论炸锅,观点争锋相对

火山詩话
2026-05-10 09:52:37
云南KTV事件升级!县局调查以后,纪委再次介入,连省厅也在关注

云南KTV事件升级!县局调查以后,纪委再次介入,连省厅也在关注

小鋭有话说
2026-05-12 12:21:50
男子500万拿去炒股,8年后脑瘤急需30万手术,看到账户余额懵了

男子500万拿去炒股,8年后脑瘤急需30万手术,看到账户余额懵了

荔枝人物记
2025-11-14 11:57:27
特斯拉:再次突破

特斯拉:再次突破

新浪财经
2026-05-11 10:29:59
又一家中国厂商量产DDR5内存条!最高64GB

又一家中国厂商量产DDR5内存条!最高64GB

3DM游戏
2026-05-12 11:57:10
美国体操丑闻再爆发!教练暗藏摄像头,偷拍6至14岁少女换衣

美国体操丑闻再爆发!教练暗藏摄像头,偷拍6至14岁少女换衣

夜白侃球
2026-05-12 10:32:21
李晨在《跑男》委屈到骨子里,被新嘉宾嘲讽、节目组针对,陈赫提他红了眼,刘浩存力挺

李晨在《跑男》委屈到骨子里,被新嘉宾嘲讽、节目组针对,陈赫提他红了眼,刘浩存力挺

科学发掘
2026-05-10 18:54:06
比亚迪大汉谍照曝光:大唐同款门把手、方向盘,续航有望破千

比亚迪大汉谍照曝光:大唐同款门把手、方向盘,续航有望破千

IT之家
2026-05-12 09:11:11
浅谈关于外星文明的“费米悖论”,到底在哪里出现了悖论?

浅谈关于外星文明的“费米悖论”,到底在哪里出现了悖论?

宇宙时空
2026-05-11 21:40:04
四太太带儿媳奚梦瑶买豪宅,两人豪掷约1.7亿港元入手李泽楷新盘

四太太带儿媳奚梦瑶买豪宅,两人豪掷约1.7亿港元入手李泽楷新盘

小蜜情感说
2026-05-12 15:48:13
大连一烧烤店内女子用铁签给狗撸串,还让它坐在卡座上,市监局介入后店铺停业整顿,店主:已销毁全部铁签,向所有顾客致歉

大连一烧烤店内女子用铁签给狗撸串,还让它坐在卡座上,市监局介入后店铺停业整顿,店主:已销毁全部铁签,向所有顾客致歉

大风新闻
2026-05-12 10:08:22
射程覆盖大半个中国!土耳其突然亮剑,这枚导弹让全球坐不住了

射程覆盖大半个中国!土耳其突然亮剑,这枚导弹让全球坐不住了

花寒弦絮
2026-05-11 09:12:59
港圈:你可以跟英皇唱反调,但千万给容祖儿难堪!45岁的她凭什么

港圈:你可以跟英皇唱反调,但千万给容祖儿难堪!45岁的她凭什么

她时尚丫
2026-05-11 22:27:40
女生索要13天工资被老板辱骂“傻不拉几”,街道办回应:已告知单位离职5日内结清

女生索要13天工资被老板辱骂“傻不拉几”,街道办回应:已告知单位离职5日内结清

潇湘晨报
2026-05-12 19:43:44
市监局回应女子用烧烤铁签喂狗:店主已主动停业整顿,正在做全面消杀,张贴禁止宠物入内告示

市监局回应女子用烧烤铁签喂狗:店主已主动停业整顿,正在做全面消杀,张贴禁止宠物入内告示

极目新闻
2026-05-12 15:54:06
出乎所有人预料,特朗普修改访华计划,中方官宣,他必须多来一天

出乎所有人预料,特朗普修改访华计划,中方官宣,他必须多来一天

温读史
2026-05-11 18:52:22
2026-05-12 23:48:49
野生运营
野生运营
懂点产品,懂点AI,正在努力给平淡日子搞点新花样。
2565文章数 34关注度
往期回顾 全部

科技要闻

宇树发布载人变形机甲,定价390万元起

头条要闻

特朗普称将同中方讨论对台军售和黎智英案 外交部回应

头条要闻

特朗普称将同中方讨论对台军售和黎智英案 外交部回应

体育要闻

骑士终于玩明白了?

娱乐要闻

白鹿风波升级!掉粉20万评论区沦陷

财经要闻

利润再腰斩 京东干外卖后就没过过好日子

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

教育
时尚
艺术
本地
健康

教育要闻

“5块钱能吃啥早餐?”小学儿子索要20元早餐费,家长却翻出烟盒

普通人真该学学如何穿搭!多穿裙子比裤子更时髦,大方提气质

艺术要闻

这位画家的油画美人让人惊叹不已!

本地新闻

用苏绣的方式,打开江西婺源

干细胞能让人“返老还童”吗

无障碍浏览 进入关怀版