Matrix multiplication is commonly written as shown in the following example.
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
The use of B(K,J), is not a stride-1 reference and therefore will not normally be vectorizable. If the loops are interchanged, however, all the references will become stride-1 as in the Matrix Multiplication with Stride-1 example that follows.
Note
Interchanging is not always possible because of dependencies, which can
lead to different results.
Example of Matrix Multiplication with Stride-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
For additional information, see publications on Compiler Optimizations.