当前位置: 首页 > news >正文

amd64 微架构级别对 Go 性能影响几何?v2、v3 显著,v4 待优化

amd64 微架构级别提升 Go 性能:v2、v3 显著,v4 有待优化?

Daniel Lemire 是一位软件性能专家,在全球科学家中排名前 2%(斯坦福大学/爱思唯尔 2025 年排名),也是 GitHub 上最受关注的前 1000 名开发者之一。其博客 Daniel Lemire 的博客 创办于 2004 年,目前已有 2371 篇文章和 16298 条审核通过的评论,且在领先的科技新闻聚合平台 Hacker News 上排名前 50。

菜单与业务

博客提供了相关链接,包括 我的主页、GitHub 个人资料。若企业需要帮助,可联系 Daniel Lemire,他提供 私人讲座、培训、咨询服务,也承接赞助的开源项目。同时,他不接受任何广告,但读者可以 在 GitHub 上赞助他的开源工作。

关注与订阅

读者可以加入超过 12500 名邮件订阅者的行列,也能在 GitHub 上关注、在 X 上关注 @lemire (超过 30000 名关注者),还能在 Telegram 上关注这个博客。

近期文章

  • amd64 微架构级别对 Go 有多大帮助?
  • 具身认知与能动 AI
  • 使用 AVX - 512 极快地解析 IPv6 地址
  • 所有 64 位整数中只有 17% 是两个 32 位整数的乘积
  • SIMD 加速的整数转字符串转换

近期评论

  • Xarn 评论 amd64 微架构级别对 Go 有多大帮助?
  • Steve Z 评论 具身认知与能动 AI
  • Haruto Kobayashi 评论 计算 64 位整数的位数
  • Nik 评论 所有 64 位整数中只有 17% 是两个 32 位整数的乘积
  • Daniel Lemire 评论 你可以击败二分查找

页面导航

博客还提供了多个页面链接,如 技术简史、关于我、书籍推荐 等。

文章存档

可按月份选择文章存档,如 2026 年 6 月(1 篇)、2026 年 5 月(6 篇)等,涵盖了从 2004 年到 2026 年各月的文章数量信息。

其他信息

包含 登录、文章订阅源、评论订阅源、WordPress 官网 等链接。

amd64 微架构级别对 Go 有多大帮助?

64 位英特尔和 AMD 处理器已发展数十年。为 64 位英特尔或 AMD 处理器编译 Go 程序时,编译器默认针对近 20 年前的指令集,生成的二进制文件虽能在任何 x64 芯片上运行,但错过了 2003 年以来添加的所有指令。

通常提到的 “微架构级别”,每个级别包含一组可假定存在的指令集扩展:

级别大致新增内容
v1原始的 AMD64 基线(SSE2)
v2`popcnt`、SSE4.2
v3AVX2
v4AVX - 512(F/BW/DQ/VL)

该分级体系约在 2020 年固定,如今硬件不断发展,需要添加最新的 AVX - 512 子扩展(VBMI、VBMI2、VNNI、BF16、FP16、VPOPCNTDQ 等),这些扩展服务器和消费级芯片都支持,但 `v4` 并不包含。虽然 `v1` 到 `v4` 是有用的通用标准,但要充分利用 CPU 所有功能,至少需要 `v5` 级别,甚至整个分级体系应被更细粒度的特性检测取代。

Go 工具链通过 [`GOAMD64`] 环境变量暴露了 `v1` 到 `v4` 分级体系。设置 `GOAMD64=v3` 可让编译器使用包括 AVX2 在内的所有指令,默认值是 `v1`,即最低通用标准。

为探究不同级别对性能的影响,Daniel Lemire 选择了 Roaring Bitmaps 这个用于数据库和搜索引擎的压缩位集数据结构。Roaring Bitmap 存储 32 位整数,将 32 位空间划分为 65536 个值的块,以高 16 位为键,每个块存储在只保存低 16 位的“容器”中,容器有数组容器、位图容器、游程容器三种类型,库会选择最小的那种。

他获取该库最新版本,在 Go 1.26.2 和 Roaring v2.18.2 环境下,于英特尔至强金牌 6548N(Emerald Rapids,支持包括 AVX - 512 在内的所有四个级别)上,对其自带基准测试套件进行四次运行,每个级别运行一次,每次收集八个样本。

“人口计数”(或 `popcount`,也称为汉明重量)指机器字中设置为 1 的位数,Roaring 经常用到。现代 x86 芯片有专门的 `popcnt` 指令,但该指令直到 `v2` 级别(SSE4.2,2008 年)才可用,若没有它,编译器需用多指令的位操作序列替代。

在人口计数方面,`v1` 级别无法使用 `popcnt` 指令,Go 采用软件回退方案,升级到 `v2` 后,`popcnt` 指令可用,时间几乎缩短一半,性能提升 43%,且无需更改源代码,只需设置编译器标志。不过 `v3` 和 `v4` 未带来更多提升,单个 `popcnt` 指令已是最优,AVX2 和 AVX - 512 对 Go 编译器无额外作用。

从密集位图构建容器时,`FromDense array` 基准测试会获取 8 KB 位向量并构建最紧凑容器,涉及人口计数和扫描设置位位置。当 256 位寄存器可用时,编译器可对循环进行自动向量化,`v2` 之后性能持续提升。`v2` 通过使用标量 `popcnt`/`tzcnt` 指令将时间缩短 21%,`v3`(AVX2)将提升幅度翻倍至 38%,`v4` 无额外提升。

集合操作中,`IntersectionCardinality` 基准测试计算两个位图交集元素数量,`v2` 作用不大,`v3` 让编译器将按位与和计数循环扩展到 256 位寄存器,时间缩短 22%。

总结如下:

  1. 在现代硬件上,应使用 `v2` 或更高级别,生成的二进制文件可在数据中心和非老旧笔记本电脑上运行。
  2. `v3` 级别值得进一步研究。
  3. 部分基准测试中,`v4` 级别本应有用但实际未起作用,怀疑是 Go 编译器表现不佳。

当然,用户应自己进行基准测试。

文章信息

本文《amd64 微架构级别对 Go 有多大帮助?》由 Daniel Lemire 发表于 _Daniel Lemire 的博客_,2026 年 6 月 6 日,https://lemire.me/blog/2026/06/06/how-much-do-amd64-microarchitecture-levels-help-in-go/。

作者信息

Daniel Lemire 是魁北克大学(TELUQ)的计算机科学教授,可 查看 Daniel Lemire 的所有文章。文章发表于 2026 年 6 月 6 日,作者 Daniel Lemire,分类 []。

评论信息

有读者 Xarn 于 2026 年 6 月 8 日下午 4:40 评论,提到从文档来看,“Go 工具链目前不会生成任何 AVX512 指令”,并可 回复。

评论回复

若想发表回复,需填写评论、姓名、电子邮件等信息,电子邮件地址不会公开。还可 通过电子邮件订阅 该博客(非商业性质,无广告,每周发送邮件),发布代码可考虑使用 tohtml 等工具格式化。

文章导航

上一篇文章是 具身认知与能动 AI,同时可查看 使用条款。

http://www.rkmt.cn/news/1495037.html

相关文章:

  • 2026柳州市家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!本地防水补漏公司为您排忧解难!您附近的专业防水团队 - 企业资讯
  • 2026闵行二手冰箱销售厂家实力榜:六家本土服务商核心优势与联系电话全解析 - 品牌发掘
  • 2026福州市家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!本地防水补漏公司为您排忧解难!您附近的专业防水团队 - 企业资讯
  • 5分钟上手UnityExplorer:免费终极工具实现Unity游戏实时调试与动态修改
  • 嵌入式低功耗设计实战:从MCU电气特性到电池续航优化
  • 计算机毕业设计之django基于大数据分析的门户信息推荐系统的设计与实现
  • 别再手动维护接口文档了!用Showdoc+代码注释5分钟自动生成(附PHP/Java示例)
  • 数据分析师 vs 算法工程师,选错方向薪资差一万
  • 2026金华市家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!本地防水补漏公司为您排忧解难!您附近的专业防水团队 - 企业资讯
  • 终极指南:5分钟彻底修复Windows软件运行库缺失问题
  • 鸿蒙 PC 开发环境对比:Electron vs Qt,各跑一个最小 Demo 看完你就懂了
  • 10个Marp指令技巧:从零开始创建专业演示文稿
  • MATLAB语音处理GUI工具:实时录音、IIR滤波调节、频谱可视化与变声效果一键生成
  • 韭菜盒子VSCode插件:程序员投资效率提升的终极指南
  • 2026济南画室实地攻略:高分画室前五名亲测体验分享 - 品研笔录
  • 如何用Laigter为游戏精灵自动生成专业级光照贴图
  • 【实战避坑】Electron 最小 Demo 在鸿蒙 PC(API 23 / HarmonyOS 6.1)跑通:从旧版 libelectron 闪退到新版双模块的迁移记录
  • 2026苏州市家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!本地防水补漏公司为您排忧解难!您附近的专业防水团队 - 企业资讯
  • Android Studio中文界面终极指南:3个步骤快速实现界面汉化
  • 石材晶面处理是什么?抛光和晶面到底差在哪(2026版) - 宁波融诚石业
  • 坐标西安,新房除甲醛怎么找靠谱公司?这份指南收藏好 - 商业测评
  • 保姆级教程:手把手教你配置华三AC对接绿洲平台,实现企业无线认证
  • 终极阴阳师智能挂机脚本:3小时搭建24小时自动刷御魂系统
  • 【2027最新】基于SpringBoot+Vue的高校教师电子名片系统管理系统源码+MyBatis+MySQL
  • 2026 企业级全流程 AI 标书工具深度评测:从招文解析到资产沉淀
  • 2026牡丹江市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 开源漫画阅读器:纯净阅读体验的技术实现与应用指南
  • 视频修复新纪元:如何用Untrunc拯救你的珍贵数字记忆
  • Windows/Linux的‘钩子’(LSM)与可信计算3.0是怎么‘握手’的?一个实际配置案例讲明白
  • 别再用微信传大文件了!5款不限速的文件传输与数据同步工具推荐