GoにプラットフォームSIMD APIが実験導入

원제: Platform-Independent SIMD in Go

왜 중요한가

Goがアセンブリ不要でSIMDを利用できるようになれば、暗号処理・データ処理・AI推論など幅広い領域でのGo採用が加速する可能性がある。

Go言語チームのDavid ChaseとJunyang Shaoは2026年9月24日、Go 1.26および1.27にSIMD(Single Instruction Multiple Data)の実験的APIを追加したと発表した。Go 1.26ではamd64向け、Go 1.27ではarm64(NEON)とwasmへ対応を拡大。さらにGo 1.27では、C++のHighwayを参考にしたプラットフォーム非依存の完全ポータブルなsimdパッケージも導入された。

従来のGoでSIMDを利用するには、Goアセンブリを直接記述するしか方法がなかった。パフォーマンスが厳しく要求されるカーネル処理にしか採用されず、SIMDの恩恵を受けられるはずの多くのソフトウェアがCPUの能力を活かしきれていない状況だった。

Go 1.26でamd64向けのSIMD APIが初登場し、Go 1.27ではarm64とwasmへ拡張。同時に、アーキテクチャ依存の`archsimd`パッケージとは別に、プラットフォームおよびベクターサイズに依存しないポータブルな`simd`パッケージが実験的に導入された。

SIMDアーキテクチャは実装の多様性が大きい。wasmやPowerPC、s390xは128ビット固定、amd64は128/256/512ビットの複数サイズをサポート、RISC-V64は128〜65536ビットの可変長ベクターを持つなど、プラットフォームごとに仕様が大きく異なる。この多様性への対応が、ポータブルSIMD設計の最大の技術的課題だった。

`simd`パッケージは現在、amd64上のAVX/AVX2/AVX512、arm64のNEON、そしてwasmのSIMD命令をサポートする。SIMDハードウェアが存在しないプラットフォームでは、エミュレーションにより動作する設計となっている。なお、GoのGreen Teaガベージコレクターもすでにメモリスキャンの高速化にSIMDを活用している。

출처

go.dev — 원문 읽기 →