TL;DR

1 つの命令を複数のデータに適用するアーキテクチャ。

仕組み

SIMD は 1966 年に Michael J. Flynn が提唱した計算機アーキテクチャの分類(フリンの分類)の 1 つである。Wikipedia の例では、4 次元ベクトルの加算を従来のプロセッサで行うと、成分ごとに 4 回の加算命令を順に実行する。128 ビットのレジスタに 32 ビットのデータを 4 つ詰めて扱える SIMD のプロセッサなら、1 回の命令で 4 つの成分をまとめて計算でき、理論上の消費サイクル数は 1/4 になる。

同じ演算を大量のデータに適用する処理で効果が大きく、数値計算、画像処理、信号処理、マルチメディア処理に使われる。

例

x86 の MMX、SSE、AVX、ARM の NEON、SVE、PowerPC の AltiVec など、CPU の拡張命令として実装されている。GPU も SIMD を取り入れた設計になっている。

注意点

命令セットはプロセッサごとに異なるので、手作業でベクトル化したコードは移植性と保守性が下がる。コンパイラの自動ベクトル化なら移植性を保ちやすいが、どこまで速くなるかはコンパイラの解析能力に左右される。

関連

出典