Program Commtime
implicit none
integer n, k
parameter ( n = 4096 )
parameter ( k = 500 )
real*8, dimension(n,n) :: A, B
real*8 time0,time0i,time1,time1i
integer i,j,mclock
!hpf$ processors procs(4,4)
!hpf$ distribute(block,block) onto procs::A
!hpf$ align with A :: B
! fill the array with random numbers between 0. and 1.
do i = 1, n
do j = 1, n
call random_number(A(i,j))
enddo
enddo
print *, "Matrix A initialized."
time0 = time1 = 0.0
time0i = real(mclock())/100.0
do i = 1,k
B = cshift( A, 1, 1 )
! B = cshift( A, 3, 1 ) ! Case 4
! B(1:n-1:1,:) = A(2:n:1,:) ! Triplet Notation (line 1)
! B(n,:) = A(1,:) ! Triplet Notation (line 2)
B = A*B
enddo
time0 = time0 + real(mclock())/100.0 - time0i
time0 = time0/(k*1.0)
time1i = real(mclock())/100.0
do i = 1,k
B = A*B
enddo
time1 = time1 + real(mclock())/100.0 - time1i
time1 = time1/(k*1.0)
time0 = time0 - time1
print *, ' N :' , n
print *, ' k :' , k
print *, ' Time taken per CSHIFT for 16 processors (sec) :' ,time0
print *, ' Finished.'
stop
end