! --------------------------------------- ! Example program ! ! FORALL loop ! with a comparison of speed to a do loop ! ! Syntax: ! forall (loop limits) ! compute something ! end forall ! ! --------------------------------------- program test implicit none integer, parameter:: n=7000 integer:: i,j,k real(kind(1.d0)):: t0,t1,A(n,n),tdo,tforall,avtdo,avtforall avtforall = 0.d0 avtdo = 0.d0 print*,'TIMINGS' write(*,'(4a12)') 'DO','FORALL','AV. DO','AV. FORALL' do k = 1, 100 ! ! fill A using a forall loop ! call cpu_time(t0) !forall (i=1:n,j=1:n) ! A(i,j) = i+j !end forall ! same forall using a one-line form forall(i=1:n,j=1:n) A(i,j)=i+j call cpu_time(t1) print*,A(50,60) tforall = t1-t0 ! ! fill A using ordinary do-loop ! call cpu_time(t0) do i = 1, n do j = 1, n A(i,j) = i+j end do end do call cpu_time(t1) print*,A(50,60) tdo = t1-t0 ! ! collect average timings ! avtdo = avtdo + tdo avtforall = avtforall + tforall write(*,'(4f12.3)') tdo,tforall,avtdo/k,avtforall/k end do end program test