その中でプログラマがコントロール可能な並列処理として登場したのが、SIMD(Single Instruction Multiple Data)です。
SIMD
SIMDが実現する事はその名の通り、一つの命令により複数のデータを扱う事です。
下記の計算を行う場合に通常のCPU命令では、4回足し算の命令を実行する必要があります。
- A+B
- C+D
- E+F
- G+H
SIMDを利用して計算を行うには扱うデータに制限があります。
前述の足し算の例では下記の制限が出来ます。
- 左辺の4つの値をひとかたまりのデータとして隣り合った場所に並べる事
- 右辺の4つの値をひとかたまりのデータとして隣り合った場所に並べる事
- 結果の出力場所も4つの値の結果がひとかたまりのデータとして隣り合った場所になる事
こんな面等な機能を何に使うんだという話が出てきそうですが、ベクトルの計算をする場合にはとても便利に使えます。
SIMDの命令には足し算の他に、引き算、掛け算、割り算、逆数を計算したり、 平方根を計算する命令まで存在し、明らかにベクトルの計算をする為の機能が各種そろっています。
また、ひとかたまりのデータとして扱わなければいけない制限も、ベクトルとして扱う場合には、問題になりません。
インテルのCPUではMMXペンティアムからMMXとして搭載され、その後SSEとして拡張が現在も続けられています。
ここで重要な事は、並列処理がプログラマにコントロールされる事により、今までと比べて大きな処理速度向上が可能な事。そして並列処理を行う為には、プログラムの構造が元々並列処理に向いている必要があると言うことです。
0 件のコメント:
コメントを投稿