HeadlinesBriefing favicon HeadlinesBriefing.com

Go 1.26/1.27 SIMD API 平台无关

Hacker News •
×

Go 1.26和1.27包含单指令多数据(SIMD)操作的实验性API。SIMD是许多现代CPU的本机特性,可让软件在单个指令中对数据向量执行统一操作,例如单个指令相加8对float64值。它可以显著加速许多计算密集型任务,从密码学到数据处理再到AI。事实上,Go的绿茶垃圾回收器甚至使用SIMD加速扫描内存中的存活对象。在这些新实验性API之前,从Go访问此功能的唯一方法是编写Go汇编语言。

Go 1.26引入了针对amd64的SIMD API,Go 1.27为arm64(具体为NEON)和wasm添加了API。然而,SIMD API的一个基本挑战在于平台间巨大的差异,而不仅仅是它们支持什么操作,甚至包括向量如何表示。为了完全访问这些平台的广度,这些API位于架构依赖的archsimd包中。

但Go 1.27超越了这些架构依赖的API,引入了一个实验性的、完全可移植的、平台且尺寸无关的SIMD接口,大致基于C++的Highway。其目标是支持一次编写、 anywhere near-asm-performance(接近汇编性能)的“simd”代码,这些代码在具有SIMD支持的平台上运行,并在不(目前)具备SIMD支持的平台上提供有竞争力的仿真。当前simd包支持amd64上的AVX、AVX2和AVX512,arm64上的NEON,以及wasm的SIMD指令。

SIMD架构在多个维度上各有不同,包括向量大小、掩码方法和操作原语。每个架构都提供自己的重新排列向量元素的原语,并支持不同的与 crypto 相关的操作。即使是基本的算术运算也可能有不同的支持;例如,wasm缺少64位整数向量的比较操作。