C=A*BのFORTRANプログラムNO.1

    2003/08/28 日立製作所 & 早稲田大学 後 保範 ( Ushiro Yasunori )
--------------------------------------------------------------

1. 概要

 実密行列を係数とする行列乗算C=A*Bを計算する。非連続アクセスをする悪い例である。
他との比較のために掲載しているので、本例のプログラムは作成しない事。
Cのプログラム(連続アクセス版)をそのままFORTRANに移植するとこのようになる。
行列A,B,CのサイズはそれぞれNxL,LxM,NxMである。

2. プログラム

C=================================================================C
      SUBROUTINE MULT1(A,B,C,N,M,L,ND)
C=================================================================C
C  Real-Dense Matrix Multiplication                               C
C   C = A*B  with IKJ-Type                                        C
C-----------------------------------------------------------------C
C    A(ND,L)   R*8, In,  First Input Matrix (A) , Size N*L        C
C    B(ND,M)   R*8, In,  Second Input Matrix (B), Size L*M        C
C    C(ND,M)   R*8, Out, Output Matrix (C)      , Size N*M        C
C    N         I*4, In,  Matrix Size of A(Column), C(Column)      C
C    M         I*4, In,  Matrix Size of B(Row), C(Row)            C
C    L         I*4, In,  Matrix Size of A(Row), B(Column)         C
C    ND        I*4, In,  Array Size of A,B,C                      C
C-----------------------------------------------------------------C
C    Written by Yasunori Ushiro,   2003/08/28                     C
C        ( Hitachi Ltd. and Waseda University )                   C
C=================================================================C
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION A(ND,L), B(ND,M), C(ND,M)
C   Clear C
      do i=1,N
        do j=1,M
          C(i,j) = 0.0
        end do
      end do
C   C=C+A*B
      do i=1,N
        do k=1,L
          AW = A(i,k)
          do j=1,M
            C(i,j) = C(i,j) + AW*B(k,j)
          end do
        end do
      end do
C
      RETURN
      END