Hasty Briefsbeta

双语

Platform-Independent SIMD in Go

10 hours ago
  • Go 1.26 和 1.27 引入了实验性的 SIMD API,最初支持 amd64,随后扩展到 arm64 和 wasm。
  • 一个新的便携式 simd 包提供了与平台无关的 SIMD 操作接口,基于 C++ 的 Highway 库。
  • simd 包抽象了不同架构间的向量大小、掩码和操作差异,并为不支持的平台提供模拟。
  • 支持的架构包括 amd64(AVX、AVX2、AVX512)、arm64(NEON)和 wasm,其他架构通过模拟运行。
  • 向量类型以 simd.Float32s 命名,操作包括加载/存储、算术、比较、转换等。
  • 通过 GODEBUG 设置(simd=0,128,256,512)可以测试不同的 SIMD 级别或模拟模式。
  • 实现使用编译器中的 AST 重写技术,为每种向量长度生成专门的副本。
  • 未来计划包括添加 SVE 支持、更多操作(如 OnesCount、归约)以及功能变体。