一般に、マトリックス乗算(行列積)は下の例のように記述します。
一般的なマトリックス乗算 |
---|
for(i=0; i<N; i++) { for(j=0; j<n; j++) { for(k=0; k<n; k++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } } |
b[k][j] の用法は、ストライドが1ではないため、通常はベクトル化できません。ただし、下の例に示すように、そのループを交換すると、すべてのストライドが1になります。
注意
依存関係のあるときは交換できないこともあり、交換してしまうと実行結果が異なる場合があります。
ストライドが1のマトリックス乗算 |
---|
for(i = 0; i<N; i++) { for(k=0; k<n; k++) { for(j=0; j<n; j++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } } |