SIMD
1つの命令で、複数のデータに同じ演算を同時に行う、並列処理の方式。画像や音声、行列の計算のように、たくさんのデータに同じ処理をする場面で、処理を高速にできる。
イマシルちゃんの解説
クラスの40人分のテストに、全員に5点ずつおまけを足すことになったとするよ。
1枚ずつ順番に足していったら、40回も計算しなきゃいけないよね。
でも、「全員5点プラス!」って1回の号令で、40人が一斉に自分の答案に足したら、あっという間に終わるんだ。
1つの号令で、たくさんのデータをまとめて処理するのが、SIMDの考え方なんだよ。
より深い解説
定義
SIMD(Single Instruction, Multiple Data)は、1つの命令の流れ(命令ストリーム)で、複数のデータの流れ(データストリーム)を同時に処理する方式である。コンピュータを命令とデータの流れの数で分けるフリンの分類の一つである。
フリンの分類
| 分類 | 命令の流れ | データの流れ | 例 |
|---|---|---|---|
| SISD | 単一 | 単一 | 従来の逐次処理のプロセッサ |
| SIMD | 単一 | 複数 | ベクトルプロセッサ、CPUのSIMD命令、GPU |
| MISD | 複数 | 単一 | 実用例はほとんどない |
| MIMD | 複数 | 複数 | マルチプロセッサ、マルチコアのCPU |
SIMDの例
| 例 | 内容 |
|---|---|
| CPUのSIMD命令 | x86のAVX、ARMのNEONなど。1つの命令で、長いレジスタに詰めた複数の値をまとめて計算する |
| ベクトルプロセッサ | スーパーコンピュータで使われてきた、配列のデータをまとめて処理するプロセッサ |
| GPU | 多数の演算器で、同じ処理を大量のデータに並列に行う(SIMT と呼ばれる) |
例えば、128ビットのレジスタに32ビットの値を4つ詰めれば、1つの加算命令で4つの加算を同時に行える。
向いている処理、向かない処理
| 向いている | 向かない |
|---|---|
| 画像の各画素への同じフィルタ処理 | データごとに処理の流れ(分岐)が大きく変わる処理 |
| 音声や動画の符号化 | 前の結果を使って次を計算する、依存関係の強い処理 |
| 行列の計算、機械学習 |