- #1

- 3

- 0

## Main Question or Discussion Point

I am getting a ton of errors trying to compile this. I am including PAPI and ATLAS calls but so far I think those calls are working ok.

For each subroutine, I am getting "unclassifiable statement" for the subroutine definition as well as "unexpected implicit none" and "expecting end program statement" at the end.

It also won't let me use abs to compare the matrices. I am sure my syntax is wrong but I am new to fortran and I am not sure how I am supposed to write it.

What are the obvious syntax problems and errors I am making?

For each subroutine, I am getting "unclassifiable statement" for the subroutine definition as well as "unexpected implicit none" and "expecting end program statement" at the end.

It also won't let me use abs to compare the matrices. I am sure my syntax is wrong but I am new to fortran and I am not sure how I am supposed to write it.

Code:

```
#include /mnt/scratch/sw/papi-3.6.2/include/fpapi.h
program main
implicit none
integer:: i,j,k,M,N
integer:: tinitial,tfinal
real(8):: epsilon
real(8):: r1,r2,r3,r4,r5,r6
real(8):: t1,t2,t3,t4,t5,t6
real(8), allocatable:: A(:,:),B(:,:),C(:,:),D(:,:)
epsilon = 2.22e-16
open(unit=1,file="optimization.dat")
do M=1,100
N = 10*M
allocate(A(N,N),B(N,N),C(N,N),D(N,N))
call random_number(A)
call random_number(B)
call random_number(C)
call m1(N,A,B,C,D)
call m2(N,A,B,C,D)
call m3(N,A,B,C,D)
call m4(N,A,B,C,D)
call m5(N,A,B,C,D)
call m6(N,A,B,C,D)
write(*,*) N,r1,r2,r3,r4,r5,r6
write(1,*) N,t1,t2,t3,t4,t5,t6
end do
subroutine m1 (N,A,B,C,D)
implicit none
tinitial = rtime
do i=1,N
do j=1,N
do k=1,N
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
D(i,j)=C(i,j)
tfinal = rtime
t1 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r1 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m1
subroutine m2 (N,A,B,C,D)
implicit none
tinitial = rtime
do i=1,N
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
D(i,j)=C(i,j)
tfinal = rtime
t2 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r2 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m2
subroutine m3 (N,A,B,C,D)
implicit none
tinitial = rtime
do j=1,N
do i=1,N
do k=1,N
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
D(i,j)=C(i,j)
tfinal = rtime
t3 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r3 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m3
subroutine m4 (N,A,B,C,D)
implicit none
tinitial = rtime
do j=1,N
do k=1,N
do i=1,N
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
D(i,j)=C(i,j)
tfinal = rtime
t4 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r4 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m4
subroutine m5 (N,A,B,C,D)
implicit none
tinitial = rtime
do k=1,N
do i=1,N
do j=1,N
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
D(i,j)=C(i,j)
tfinal = rtime
t5 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r5 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m5
subroutine m6 (N,A,B,C,D)
implicit none
tinitial = rtime
do k=1,N
do j=1,N
do i=1,N
C(i,j)=C(i,j)+A(i,k)*B(k,j)
end do
end do
end do
D(i,j)=C(i,j)
tfinal = rtime
t6 = tfinal-tinitial
call dgemm('No','No',N,N,N,1.0d0,A(N,N),i,B(N,N),k,1.0d0,C(N,N),i)
r6 = dlange(F,N,N,(C-D(i,j)))/(C*epsilon)
deallocate(A,B,C,D)
return
end subroutine m1
close(1)
end program
```

Last edited: