program test implicit none REAL time_begin, time_end integer, parameter :: n=2000; REAL(8) :: a(n,n), b(n,n), c(n,n),as(n,n), bs(n,n) integer, parameter :: m = 1 integer :: i, j, k, l call RANDOM_NUMBER(as) call RANDOM_NUMBER(bs) c=0.d0 a=as b=bs call cpu_time(time_begin) do i = 1,m a(1,1) = a(1,1) + 0.1d0 c = MATMUL(a,b) enddo call cpu_time(time_end) PRINT *, 'Time, MATMUL: ',time_end-time_begin, c(1,1) c=0.d0 a=as b=bs call cpu_time(time_begin) do i = 1,m a(1,1) = a(1,1) + 0.1d0 c=0.d0 do j=1,n do k=1,n do l=1,n c(l,k) =c(l,k)+ a(l,j)*b(j,k) enddo enddo enddo enddo call cpu_time(time_end) PRINT *, 'Time, MAT MUL custom: ',time_end-time_begin, c(1,1) c=0.d0 a=as b=bs call cpu_time(time_begin) do i = 1,m a(1,1) = a(1,1) + 0.1d0 call dgemm('n','n',n, n, n, 1.0d0, a, n, b, n, 0.0d0, c, n) enddo call cpu_time(time_end) PRINT *, 'dgemm: ',time_end-time_begin, c(1,1) end program |