SIMD
single instruction multiple data(SIMD[1]、直訳では「単一命令多重データ」などとなる)とは、演算装置において1回の命令で複数データに対する同一の処理を同時に行う手法を指す。演算装置設計手法の一つ。この手法にもとづく演算をベクトル演算(パック演算、パックド演算とも)という。
目次 |
解説 [編集]
例えばFortranにおけるdoループのような、同一の演算を繰り返すような操作をスカラー演算のように逐次的に行うのではなく、一度に行うものである。
例えば、通常32ビットのデータを受け付けるプロセッサなら128ビットのデータを4回のクロックで計算するが、128ビットのデータを受け付けるプロセッサは、1回のクロックで処理が済む。ただ多くの場合、128ビットを使い切るデータはあまりなく、一般に128ビットを2分割し64ビットとして使うか、4分割して32ビットとして使うが、結局それぞれ1回のクロックで2倍、4倍のデータ処理が可能になり、結果として相対的に低いクロックでも高い性能を引き出しやすい。
例えば音声データの音量を倍にしたいとする。デジタルデータではある瞬間の音量が数値とされて記録されているので、全ての値を倍にすればよい。このように大量のデータに似たような処理を施すときに性能を発揮するため、一般にはマルチメディアの処理に向いているとされる。
大量のデータを処理するスーパーコンピュータではよく見られた手法だが、他の技術と同じく1990年代後半からパーソナルコンピュータ、ゲーム機等にも応用された。
全ての処理をこれで行えないこともないが、例えば画像にぼかし処理を100回かける等の場合、単純に0から99まで数え上げる手法を用いることがある。このような場合では、単純に変数を1つ用意して0に1を99になるまで足し続けるが、これがはみ出さないように格納するためには1バイト(8ビット:0~255の数値を表現可能)で十分なので、128ビットの処理幅を持つプロセッサでは無駄が大量に発生するため、通常はSIMDユニットは使わず、通常のALUを使うことが多い(こういったプロセッサに合わせた最適化はコンパイラが行ってくれることも多い)。
主な搭載プロセッサ [編集]
CPU用途のプロセッサ [編集]
CPUにおいては、ALUの補助として用いられることが多いが、Cell のSPEのようにALU自体が SIMD のものもある。
- PowerPC 74xx 系
- PowerPC 970 系
- PowerPC G4 Gekko Broadway
- Xenon
- Cell PPE
- Cell SPE(プレイステーション3のCPU)
- POWER 5(AltiVecと呼ばれるユニット)
- Pentium III 以降の Pentium(SSEと呼ばれるユニット。 尚、この前身となる MMX と呼ばれる技術があった)
- PlayStation 2などゲーム機でも3D表示の座標変換に行列演算を多用するため、ベクトル演算機能が採用されている。
GPU用途のプロセッサ [編集]
GPUは多くの場合ピクセルパイプラインがSIMDであることが多いようである。
物理演算のプロセッサ [編集]
3Dゲームに必要な物理演算を高速化する為、SIMDを利用。
汎用アクセラレータ [編集]
PCI Express 接続の汎用SIMDアクセラレータ。倍精度浮動小数点行列演算を高速に行う目的で、ワークステーション、HPCなどに搭載される。
- CSX600 - クリアスピード社によるメニーコアSIMD演算ユニット
脚注 [編集]
関連項目 [編集]
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||