Goにプラットフォーム非依存のSIMDが登場、一度書けばどこでも動く

Platform-Independent SIMD in Go

Goにプラットフォーム非依存のSIMDが登場、一度書けばどこでも動く

Go 1.27では、実験的なプラットフォーム非依存SIMDパッケージ「simd」が導入された。アーキテクチャごとのarchsimdパッケージの差異を隠蔽し、固定サイズのベクトルを型システムから排除。AVX、AVX2、AVX512、NEON、wasm SIMDをサポートし、SIMD非対応環境ではエミュレーションで動作する。GOEXPERIMENT=simdで利用可能。

異なるSIMDアーキテクチャ間の相違は、サポートする演算だけでなく、ベクトルの表現方法にまで及ぶ。
  1. ImJasonH

    https://imjasonh.github.io/playground/palette-swap/ は、提供された画像の色を wasm で、完全にブラウザ内でローカルに置き換え、ポータブル SIMD と非ポータブル archsimd、非 SIMD をベンチマークします。

    このケースでは、ポータブル SIMD は非ポータブル SIMD より約11%遅いですが、どちらも非 SIMD より約5倍高速です。

  2. u8

    これが Go を愛する理由だ。誰もこれを求めていなかったのに、彼らは時間をかけて正しく実装し、Go をメモリ安全な高水準システム言語として推し進め続けている。

  3. mshockwave

    最近見た多くのポータブル SIMD ソリューション(例えば Fearless SIMD)の中で、これが SVE や RISC-V vector (RVV) のような非固定ベクタをより簡単にサポートできる最初のものだと言いたい。彼らがこの決定をしたことを嬉しく思う。

  4. sixdimensional

    私がやっていたプロジェクトで、音声認識と音声合成のモデルを Go でネイティブに実行する(CGO_ENABLED=0 なので C 依存なし)ために実験的な SIMD をテストし、非 SIMD と SIMD を比較しました。

    正式なベンチマークはありませんが、SIMD の作業が単なる Go と比べて計算パフォーマンスを測定可能なほど改善したと経験的に言えます。これらの改善が、Go ランタイムを今後この種の作業のさらにより良いターゲットにするのに役立つと非常に楽観視しています。特にクロスプラットフォームなのでなおさらです。

  5. beached_whale

    C++ は最新版で std::simd を導入しつつあり、私はできるだけ少ない intrinsic ビルトインでベクトル化を書くことに完全に賛成です。最適でなくても、スカラー演算よりはるかに優れています。

  6. melodyogonna

    非常に素晴らしく、Mojo がポータブル SIMD を扱う方法にかなり近いです。

    私のお気に入りの2つの言語がついに SIMD を簡単に使えるようにしたのを見るのは素晴らしいです。パフォーマンスのための非常に低い果実なのに、なぜか言語は何年もこれを無視してきました。ポータブル SIMD は、いくらかのパフォーマンスペナルティがあっても、ベクトル演算が必要なときは常にスカラー計算を上回ります。それなのに言語実装は常に、ハードウェア固有の SIMD API が唯一の方法であるかのように想定してきたようです。それは、パフォーマンスが絶対に重要な特殊なケースを除いて SIMD を使い物にならなくし、日常のプログラミングで誰でも使えるものではなくしてしまいました。

  7. qprofyeh

    この機能は、すでにマルチコアで動作している Go プロジェクトの低レベルパフォーマンスを最適化する多くの扉を開きます。IIRC、SIMD とその変種を標準ライブラリでサポートしている言語は多くありません。最近 Go が新しいことを試みている方法が好きです。

  8. metaltyphoon

    頼むから、公式ページにシンタックスハイライトを追加してくれ!それ以外は素晴らしい

この日のほかの記事

2026-09-25