SIMD (Single Instruction/Multiple Data)
【シムド】
1つの命令で、複数のデータを同時に処理すること、もしくはそのための命令のこと。マルチメディアデータを取り扱うマイクロプロセッサや、DSP、スーパー・コンピュータなどにおいて実装されている。
音声や画像などのマルチメディア・データに対する処理や、3次元グラフィックス用途などでは、固定的なフォーマットのデータに対して、同じ種類の演算を繰り返し適用することが多い。そこで、1つの命令で多量のデータに対して同じ種類の演算を一斉に行うようにして、プロセッサ全体のデータ処理能力を高めるために用意されたのがSIMD命令である。
SIMDで取り扱われるデータの形式や命令セットは、プロセッサのアーキテクチャごとに異なるが、一般的には、1命令で64bitや128bitのデータに対して、一度に処理を行うことができるようになっている。このデータ幅の中に、8、16、32bitの整数型データか、32bit、64bitの浮動小数点型データを複数詰め込み、1命令ですべてのデータに対して同時に処理を行う。たとえば、8bitの固定小数点データなら128bitの中に16個格納できるので、画像処理ソフトウェアなどでは、一度に16ピクセル分の処理ができる。SIMDで実行可能な命令としては、加減乗除算、ANDやORなどの論理演算、マスク演算(マスクビットが1なら演算し、0ならスキップする。画像処理などで使用)、飽和演算(結果が最大値や最小値を超えても、最大値や最小値に丸めて演算を続行する。画像処理などで使用される)、積和演算(乗算した結果をすべて順次加算する。マルチメディア処理で広く使われる)、内積演算(グラフィックスの座標計算などで使用される)、最大/最小値、絶対値、平均値、などがある。また、パイプライン処理と組み合わせることにより、さらに演算能力を拡大することができる。
SIMD命令を実装するためには、データを格納するための比較的大量のレジスタと(データ供給が滞らないようにするため)、複数の演算器が必要となるが、もともとプロセッサ内部には、多くの浮動小数点演算用のレジスタと演算器が備えられているので、これを必要なデータ幅に分割して使うようにすれば、新たなリソースはあまり必要ない。わずかな投資で(一般的には、SIMDをサポートするために必要なリソースは、プロセッサ全体の数%といわれている)、プロセッサ全体の演算能力を飛躍的に増大させることができるため、最近の高性能なマイクロプロセッサの多くは、このような機能を備えている。
代表的なSIMD命令セットの例としては、PentiumアーキテクチャにおけるMMXテクノロジやStreaming SIMD命令、AMD K6/K7における3DNow!、PowerPCアーキテクチャのAltiVec、MIPSプロセッサにおけるMDMX(MIPS Digital Media Extension)、SPARCアーキテクチャのVIS(Visual Instruction Set)、などがある。
なお、スーパーコンピュータや、さらに高速化を求めるプロセッサなどでは、SIMD専用の演算器を複数用意して、さらに高速化を図っている。たとえば、次世代のPlayStationのために使われる予定のCPUでは、MIPSアーキテクチャのCPUをベースにして、浮動小数点の座標変換や積和演算、除算を高速に実行するための専用の演算器を複数追加している。またスーパーコンピュータでは、ベクトルレジスタという、大容量のデータ格納用領域を用意して、パイプラインを止めることなくデータを供給できるようにして、性能を向上させている。
Copyright (C) 2000-2007 Digital Advantage Corp.