コンテンツにスキップ

ベクトル化

出典: フリー百科事典『ウィキペディア(Wikipedia)』

: vectorize

 - 

1

1




SIMD

High Performance Fortran

[]


Fortran1do

do[]


do1
do i = 1, 100
    a(i) = a(i) * b(i)
end do

if文を含むdoループ[編集]

以下のような、if文を含むdoループは、それをサポートするハードウェアがあればベクトル化が可能である。

do i = 1, 100
    if (a(i) > 0.0) then
        a(i) = a(i) * 2.0
    end if
end do

この場合、たとえばSXシリーズでは、

  • 配列aの各要素について、if文を満たすか満たさないかを判断するマスクベクトルを作成。
  • マスクが真の部分だけを演算する、ベクトル命令を生成。

という方法でベクトル化を行なう。

多重ループ[編集]

多重ループは、全部まとめて1つのベクトル命令を生成することもある。また、効率化をはかるために、内側のループと外側のループを入れ替える場合もある。これは、ベクトル化を行なうためには、データがメモリ上で連続している必要があるからである。 たとえば、二次元配列を演算する場合、内側のループが連続したメモリをアクセスするようになっていない場合には、演算する順番を入れ替えて(すなわちdoループの内側と外側を入れ替えて)ベクトル化が容易になるようにする。

関連項目[編集]

参考文献[編集]

  • 近藤良三「SXシステムの言語処理系」『NEC技報』第39巻第1号、1986年、NAID 40004407108