マトリックス積は、一般に次の例のように記述されます。
DO I=1, N
DO J=1, N
DO K=1, N
C(I,J) = C(I,J) + A(I,K)*B(K,J)
END DO
END DO
END DO
B(K,J) を使用するのは、ストライド-1 での参照ではないため、通常はベクトル化できません。しかし、ループを交換すると、次の「ストライド-1 でのマトリックス積の例」に示すように、すべての参照がストライド-1 となります。
注
依存関係があるため、交換は常に可能であるとは限りません。 依存関係によって異なる結果になる可能性があります。
ストライド-1 でのマトリックス積の例:
DO J=1,N
DO K=1,N
DO I=1,N
C(I,J) = C(I,J) + A(I,K)*B(K,J)
ENDDO
ENDDO
ENDDO
詳細については、「コンパイラの最適化に関する文献」を参照してください。