program mymatrixmultiply use mymm real, allocatable :: a(:,:), b(:,:), c(:,:) integer val1(8), val2(8), t1, t2 ! print *, 'enter array size and number of iterations to run' ! read *, nn, iters nn = 3000 iters = 5 print *, 'Matrix Multiply: using nn = ', nn, 'iters = ', iters if( nn .le. 1 ) then print *, 'invalid array size: ', nn stop endif if( iters .le. 1 ) then iters = 1 endif allocate(a(nn,nn)) allocate(b(nn,nn)) allocate(c(nn,nn)) do j = 1,nn do i = 1,nn b(i,j) = i*1000 + j c(i,j) = i+j a(i,j) = -3 enddo enddo do itime = 1,iters call cpu_time(r1); call date_and_time(values=val1) call multiply_matrices( a, b, c, nn ) call date_and_time(values=val2) call cpu_time(r2); t1 = val1(8) + 1000*(val1(7)+60*val1(6)+60*(val1(5))) t2 = val2(8) + 1000*(val2(7)+60*val2(6)+60*(val2(5))) print *, "date_and_time milliseconds=", t2-t1 rmsec = 1000.*(r2-r1) print *, " cpu_time milliseconds=", rmsec print *, " matrix size =", nn rnn = nn; print *, " MFLOP =", rnn*rnn*rnn*2. print *, " MFLOP/S =", rnn*rnn*rnn*2. /( rmsec*1000.) print *, " a(nn-2,nn-5) = ", a(nn-2,nn-5) enddo end program