The following program example shows the use of the PARALLEL REGION and the PARALLEL DO directives:
PROGRAM ATIMESB
PARAMETER M=512, N=512, P=512
REAL time1,time2
REAL*8 A,B,C
DIMENSION A(1:M,1:N), B(1:N,1:P), C(1:M,1:P)
C Initialize the matrices
C*KAP* PARALLEL REGION SHARED (A,B) LOCAL (J,I)
C*KAP* PARALLEL DO
DO 10 J=1,N
DO 10 I=1,M
A(I,J) = 1.5
10 CONTINUE
C*KAP* PARALLEL DO
DO 20 J=1,P
DO 20 I=1,N
B(I,J) = 3.0
20 CONTINUE
C*KAP* END PARALLEL REGION
C Compute C = A * B
CALL CSETTIME()
time1 = CTIMEC()
CALL MATMUL(A, M, B, N, C, P)
time2 = CTIMEC()
write(*,*)'elapsed time in seconds is:',(time1-time2)
END
SUBROUTINE MATMUL(A, LDA, B, LDB, C, LL)
REAL A(LDA,LDB), B(LDB,LL), C(LDA,LL)
INTEGER LDA,LDB,LL
C*KAP* PARALLEL REGION SHARED (A,LDA,B,LDB,C,LL) LOCAL (J,K,I)
C*KAP* PARALLEL DO
DO 20 J=1,LL
DO 20 I=1,LDA
C(I,J) =0.0
DO 20 K=1,LDB
C(I,J) = C(I,J) + ( A(I,K) * B(K,J) )
20 CONTINUE
C*KAP* END PARALLEL REGION
RETURN
END