SIMD
ただしベクトル演算という用語は、広義には1命令で複数の要素を計算させるものについて、同時(並列)に計算するものも、パイプラインで計算するものも指すが、ベクトル計算機と言った場合は主として、20世紀のスーパーコンピュータに多く採用されていたパイプライン型を指すことが多い。
他の技術と同じく1990年代後半からパーソナルコンピュータのCPU/GPU、ゲーム機等にも応用された。
なお、SIMD命令を使ったとしても、プロセッサの命令実装形態によっては演算性能が向上しないケースもある。例えば256ビットSIMD命令に対応したプロセッサであっても、256ビット幅の命令を1サイクルで実行できるとは限らず、128ビットの演算器を使って2サイクルで実行する実装になっていることもある。
全ての処理をSIMDで行なえないこともないが、32ビット幅で十分な整数スカラー演算や論理演算の場合、本数の多い従来の汎用レジスタを有効利用するため、SIMDユニットは使わず通常のALUを使うことが多い。また、コンペア・アンド・スワップのような特殊命令は汎用レジスタとメモリの間でデータ交換をするため、SIMDレジスタは使えない。このような演算内容やプロセッサに合わせた最適化をコンパイラが行なってくれることも多い。
同一の演算を繰り返すような操作をスカラー計算機のように逐次的に行なうのではなく、一度に行なうものである。
例えば、4次元ベクトル同士の加算を実行する場合、X, Y, Z, Wの成分ごとに加算処理を行なう。
{ c x ← a x + b x c y ← a y + b y c z ← a z + b z c w ← a w + b w {\displaystyle \left\{{\begin{array}{l}c_{x}\leftarrow a_{x}+b_{x}\\c_{y}\leftarrow a_{y}+b_{y}\\c_{z}\leftarrow a_{z}+b_{z}\\c_{w}\leftarrow a_{w}+b_{w}\end{array}}\right.}
ここで、それぞれの成分を32ビットの単精度浮動小数点数で表すとする。32ビットのレジスタ幅を持ち、1命令で32ビットのデータを1組だけ処理できるプロセッサの場合、成分ごとの加算処理すなわち4回の加算命令を逐次実行する必要がある。一方、128ビットのレジスタ幅を持ち、1命令で32ビットのデータ4組を同時に処理できるSIMD命令セットをサポートするプロセッサの場合、1回の命令で全成分をまとめて演算することができ、処理にかかる理論上の消費サイクル数は1/4になる。