【しむでぃー】

SIMD とは?

公開:
💡 同じ計算を、複数の値へ一度に指示する

1つの命令で複数のデータ要素へ同じ演算を行う方式。画像や音声、数値計算などに利用される。複数コアによる並列実行とは別の仕組み。

📌 このページのポイント
SIMD 4レーンの加算の説明用の例 1 + 10 11 2 + 20 22 3 + 30 33 4 + 40 44 入力A 入力B 結果 同じ演算を各位置へ指示。4倍の速度を保証する図ではない
同じ計算を、複数の値へ一度に指示する
ひよこ ひよこ
同じ足し算をたくさんするとき、一度にできないの?
ペンギン先生 ペンギン先生
複数の値に同じ演算を指示するSIMDが使える場合があるよ。たとえば4組の数を別々に足す代わりに、1つのベクトル加算命令で扱うような仕組みだね。
ひよこ ひよこ
4組なら、どんなふうに計算するの?
ペンギン先生 ペンギン先生
説明用に、1・2・3・4と10・20・30・40を各位置で足すと、11・22・33・44になる。各位置をレーンと考えればよいよ。隣り合う要素を全部足して合計する処理とは違うんだ。
ひよこ ひよこ
4つのCPUコアを使うの?
ペンギン先生 ペンギン先生
それとは別だよ。1つのコアでもSIMD命令を使える。複数コアへ仕事を分ける並列処理と組み合わせることもできるけれど、SIMDという言葉だけではコアの数は決まらないんだ。
ひよこ ひよこ
じゃあ4倍速くなるのかな?
ペンギン先生 ペンギン先生
必ずではないよ。データをメモリから読む時間、要素ごとの分岐、前の結果が必要な計算などが影響する。4レーンという数字は扱える要素の例で、処理全体の速度倍率ではないよ。
ひよこ ひよこ
自分のプログラムでも使えるの?
ペンギン先生 ペンギン先生
コンパイラが自動でSIMD化する場合や、対応ライブラリや命令を使う場合があるよ。IntelのSSEやAVXなどは実装例だね。対象CPUの対応を確認し、使えない環境での代替経路と、同じ結果になることも確かめよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SIMD」は「同じ計算を、複数の値へ一度に指示する」と押さえておこう!
📖 おまけ:英語の意味
「Single Instruction, Multiple Data」 = 単一命令・複数データ
💬 Single Instruction, Multiple Dataは「単一命令・複数データ」という意味の表現だよ。

参考資料

← 用語集にもどる