一般に、マトリックス乗算 (行列積) は下の例のように記述します:
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 になります。
警告
依存関係のあるときは交換できないこともあり、交換してしまうと実行結果が異なる場合があります。
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]; } } } |