Dev & Code 3 h agoブックマークに追加
ミッチェル・ハシモト(HashiCorp創設者)が、シンプルな命題を提示するエッセイにサイン。広いCPU時代において、SIMDを知らないことは、テーブル上に4倍から16倍のパフォーマンスを残すことだ。
Mitchell Hashimoto - HashiCorpの共同創業者で、現在は個人として積極的に貢献している(現在はZigで作られた端末エミュレータGhosttyに取り組んでいる) - は、単にEveryone Should Know SIMDというタイトルの長い記事を公開した。論点は一行で要約できる:CPUの周波数が停滞し、ベクトルレジスタが拡大する世界において、SIMDを無視することは、パフォーマンスの桁違いの向上を逃すことになる。
SIMD(Single Instruction, Multiple Data)は、CPUの命令で、同じ操作を複数の値に同時に適用するものを指す - 例えば、1サイクルで8つのfloatを加算したり、16バイトを一気に比較したりする。現代のx86-64 CPUでは、これはSSE / AVX / AVX2 / AVX-512の命令セットである。ARM(Apple Silicon、Neoverseサーバー)では、NEONとSVEである。
この議論は新しいものではない - SIMDはMMX(1996年)から存在している。変わった点は以下の通りである:
float32または64個のint8を保持できる。中心的なメッセージ:SIMDはグラフィックスエンジンやビデオコーデックのコーダーだけのものではない。大量のデータ操作 - JSONパーサ、フルテキスト検索エンジン、文字列比較、統計計算、画像フィルタリング、ハッシュ - は、ベクトル化によって大幅にパフォーマンスが向上する。
具体的な事例:
std::sortを3-5倍上回るパフォーマンスをSIMDによって実現している。要するに、これはもはやニッチな技術ではなく、大規模なデータ処理に関わる基本的なスキルである。
SIMDは手動で行うと難しいとされており、x86とARM間で移植性が低い。現在、3つの実用的なアプローチがある:
core::simd、Zigの@Vector組み込み)。「標準的な」アプリケーション開発者にとって、ポータブルライブラリ(Highway、std::simd、Zigの@Vector)からのアプローチは、低レベルのイントラシックスに深入りすることなく、主要な利益を得るための入口となる。
Hashimotoの指摘は正しい:マネージドランタイム(JavaScript、Python、Go)で育った開発者の世代は、CPUが10年間、彼らのコードで決して使用されていない計算手段を提供していることをよく知らない。これは非難ではなく、事実である。そして、これらの手段をクリティカルパスに接続したときの投資対効果は驚異的である。
覚えておくべきこと
std::simd、Zigの@Vector)は、入門を容易にする。本記事は人工知能により作成され、人間の編集管理のもとで校閲されています。