2026 年 9 月 24 日,Go 官方博客发表《Platform-independent SIMD in Go》,介绍 Go 1.26 与 Go 1.27 中的实验性 SIMD API。此前在 Go 里使用 SIMD 只能手写汇编,Go 1.26 先为 amd64 提供 SIMD API,Go 1.27 又把支持扩展到 arm64(NEON)与 wasm,并新增完全可移植、与平台和向量宽度无关的 simd 包,思路参考 C++ 的 Highway。本文从编程语言与运行时视角解读。
SIMD 与语言特性的缺口
SIMD(单指令多数据)是现代 CPU 的原生能力,能在一条指令里对一组数据执行同样的运算,例如一次完成 8 对 float64 的相加,从而显著加速密码学、数据处理与 AI 等计算密集任务。Go 的 Green Tea 垃圾回收器就用 SIMD 加速扫描内存中的存活对象。但在新 API 出现前,Go 里访问该能力只能靠手写汇编,代价高昂,只有真正关键的算力内核才值得这么做,大量本可受益的代码因此闲置了 CPU 能力。
从架构相关到平台无关
官方介绍,Go 1.26 引入面向 amd64 的 SIMD API,Go 1.27 增加了 arm64(NEON)与 wasm 的 API。SIMD API 的难点在于平台差异巨大:不仅支持的运算不同,向量的表示方式也不同——有的平台提供 128 至 512 位的定长向量,有的平台向量宽度要到程序启动时才能查询。为完整覆盖这些平台,这批 API 放在与架构相关的 archsimd 包中。
新增可移植的 simd 包
Go 1.27 在此基础上进一步引入实验性的、完全可移植、与平台和尺寸无关的 SIMD 接口,思路大致参考 C++ 的 Highway。其目标是在支持 SIMD 的平台上支持“一次编写、接近汇编性能”的 simd 代码,同时在没有(或尚未有)SIMD 支持的平台上提供合格的仿真实现。这延续了 Go 一贯的取舍:把可移植性放在性能细节之前,同时让编译器与运行时承担平台差异的适配。
对性能工程的影响
对编译器与运行时团队,这是一次标准库与语言层面补齐底层算力表达能力的动作;对编写数据处理、加解密与数值计算的开发者,它意味着不必再为每个架构维护一份汇编实现。官方明确当前仍属实验阶段,接口与支持范围可能变化,生产使用前需评估仿真路径的性能与精度表现。
小结
Go 官方博客于 2026 年 9 月 24 日介绍 Go 1.27 的实验性平台无关 SIMD API,以 archsimd 架构相关接口与可移植 simd 包为看点,是编程语言与运行时领域补齐底层性能表达能力的一次值得关注的进展。