program test
  real :: a,b,c
  integer :: i
  open(unit=1)
  call random_seed()
  do i=100,400,10
     call mesure(i,a,b,c)
     write(1,'(1I3,3(1X,1ES14.8))')i,a,b,c
  end do
  close(1)
  contains
    subroutine mesure(n,u,v,w)
      integer, intent(in) :: n
      real, intent(out) :: u,v,w
      real, dimension(n,n) :: A,B,C
      real :: ts,te
      integer :: i,j,k
      call random_number(A)
      call random_number(B)
      ! avec matmul
      call cpu_time(ts)
      C=matmul(A,B)
      call cpu_time(te)
      u=te-ts
      ! avec deux boucles, oriente colonnes
      call cpu_time(ts)
      C=0.0
      do j=1,n
         do k=1,n
            C(:,j)=C(:,j)+A(:,k)*B(k,j)
         end do
      end do
      call cpu_time(te)
      v=te-ts
      ! avec trois boucles, oriente ligne
      call cpu_time(ts)
      do i=1,n
         do j=1,n
            C(i,j)=0.0
         end do
         do k=1,n
            do j=1,n
               C(i,j)=C(i,j)+A(i,k)*B(k,j)
            end do
         end do
      end do
      call cpu_time(te)
      w=te-ts
    end subroutine mesure
end program test
