SIMD
single instruction multiple data(シングルインストラクション マルチプルデータ、SIMD[1])とはフリンの分類のひとつで、命令列は1つだが、それを複数のデータ列に適用する、コンピュータの並列化の形態を指す。この手法にもとづく演算をパック演算(パックド演算)やベクトル演算という。
解説[編集]
例えばFortranにおけるdoループのような、同一の演算を繰り返すような操作をスカラー計算機のように逐次的に行うのではなく、一度に行うものである。
例えば、通常32ビットのデータを受け付けるプロセッサなら128ビットのデータを4回のクロックで計算するが、128ビットのデータを受け付けるプロセッサは、1回のクロックで処理が済む。ただ多くの場合、128ビットを使い切るデータはあまりなく、一般に128ビットを2分割し64ビットとして使うか、4分割して32ビットとして使うが、結局それぞれ1回のクロックで2倍、4倍のデータ処理が可能になり、結果として相対的に低いクロックでも高い性能を引き出しやすい。
例えば音声データの音量を倍にしたいとする。デジタルデータではある瞬間の音量が数値とされて記録されているので、全ての値を倍にすればよい。このように大量のデータに同じ処理を施すときに性能を発揮するため、一般にはマルチメディアの処理に向いているとされる。
SIMD型で、複数の演算装置を並列に使用する計算を初期に試みたコンピュータとしては、ILLIAC IVがある。これに対し、Cray-1のような典型的なベクトル型スーパーコンピュータでは並列に計算するのではなく、パイプライン処理により1個の演算装置を休ませることなく計算させ続ける。ただしベクトル演算という用語は、広義には1命令で複数の要素を計算させるものについて、同時(並列)に計算するものも、パイプラインで計算するものも指すが、ベクトル計算機と言った場合は主として、20世紀のスーパーコンピュータに多く採用されていたパイプライン型を指すことが多い。
他の技術と同じく1990年代後半からパーソナルコンピュータ、ゲーム機等にも応用された。
全ての処理をこれで行えないこともないが、例えば画像にぼかし処理を100回かける等の場合、単純に0から99まで数え上げる手法を用いることがある。このような場合では、単純に変数を1つ用意して0に1を99になるまで足し続けるが、これがはみ出さないように格納するためには1バイト(8ビット:0~255の数値を表現可能)で十分なので、128ビットの処理幅を持つプロセッサでは無駄が大量に発生するため、SIMDユニットは使わず通常のALUを使うことが多く、こういったプロセッサに合わせた最適化もコンパイラが行ってくれることも多い。
例[編集]
マイクロプロセッサ[編集]
命令拡張[編集]
- x86のMMX・3DNow!・ストリーミングSIMD拡張命令 (SSE)
- x64のAVX
- PowerPCのAltiVec (VMX)
- ARMのNEONなど(ARMアーキテクチャ#SIMD)
- SPARCのVIS (en:Visual Instruction Set)
- MIPSのMIPS-3D (en:MIPS-3D)・MDMX (en:MDMX)
- PA-RISCの MAX (en:Multimedia Acceleration eXtensions)
- Emotion EngineのCPUコアもSIMD拡張命令を持っている
- など
演算装置[編集]
演算装置自体がSIMD型のもの
GPU[編集]
GPUはSIMD型がほとんどである。ただし、GPGPU対応が進むにつれて、1プロセッサで複数のデータを扱うSIMDだけではなく、複数のプロセッサを用いて実現されるハードウェアマルチスレッドに対して同一の命令を発行することで複数のデータを同時に処理するSIMTの併用が主流となっている。
もともとGPUはRGBAを同時に演算する128ビットの4-way SIMDが主流だったが、1サイクルで1回の単精度浮動小数点数もしくは32ビット整数の融合積和演算 (FMA) を行なうスカラー型プロセッサを複数束ねるSIMTが主流となった。しかしその後、単精度演算器にて半精度浮動小数点数演算を2回行なう2-way SIMDや、8ビット整数演算を4回行なう4-way SIMDをサポートするGPUも出現し、SIMDとSIMTの併用が始まっている[2]。
- NVIDIA製GPUでは32個のハードウェアスレッド集合をWarpと呼ぶ。
- AMD Radeon、AMD FireProシリーズなど
- AMD製GPUでは64個のハードウェアスレッド集合をWavefrontと呼ぶ。
物理演算プロセッサ[編集]
3Dゲームに必要な物理演算を高速化する為、SIMDを利用。
- PhysX(用のチップ)
汎用アクセラレータ[編集]
PCI Express接続の汎用SIMDアクセラレータ。倍精度の行列演算を高速に行う目的で、ワークステーション、スーパーコンピュータなどに搭載される。
- CSX600 - クリアスピードによるメニーコアSIMD演算ユニット
脚注[編集]
- ^ 英語では「シムディー」のように読まれる。日本では「シムド」と呼ぶことがある。
- ^ 【後藤弘茂のWeekly海外ニュース】NVIDIA次世代SoC「Xavier」は進化版DenverとVoltaを搭載 - PC Watch
関連項目[編集]
| ||||||||||||||||||||
| ||||||||||||||||||||||||