FDVM2 (1158347), страница 12
Текст из файла (страница 12)
EPS = MAX ( EPS, ABS( S - A( I, J )))
21 CONTINUE
3 CONTINUE
PRINT *, 'IT = ', IT, ' EPS = ', EPS
IF (EPS .LT. MAXEPS ) GO TO 4
2 CONTINUE
4 PRINT *, A
END
2.6. Task Parallelism for Multiblock Code
PROGRAM TASKS
C rectangular grid is distributed on two blocks
| C | K | |
| C | N1 | A1, B1 |
| C | N2 | A2, B2 |
C
PARAMETER (K=100, N = 50, ITMAX=10, N2 = K – N1 )
CHPF$ PROCESSORS P(NUMBER_OF_PROCESSORS( ))
REAL A1(N1+1,K), A2(N2+1,K), B1(N1+1,K), B2(N2+1,K)
CDVM$ TASK MB( 2 )
CHPF$ ALIGN B1( I, J ) WITH A1( I, J )
CHPF$ ALIGN B2( I, J ) WITH A2( I, J )
CHPF$ DISTRIBUTE :: A1, A2
CDVM$ REMOTE_GROUP BOUND
NP = NUMBER_OF_PROCESSORS( ) / 2
CDVM$ MAP MB( 1 ) ONTO P( 1 : NP )
CDVM$ REDISTRIBUTE A1( *, BLOCK ) ONTO MB( 1 )
CDVM$ MAP MB( 2 ) ONTO P( NP+1 : 2*NP )
CDVM$ REDISTRIBUTE A2( *, BLOCK ) ONTO MB( 2 )
C Initialization
CDVM$ PARALLEL ( J, I ) ON A1(I, J)
DO 10 J = 1, K
DO 10 I = 1, N1
IF(I.EQ.1 .OR. J.EQ.1 .OR.. J.EQ.K) THEN
A1(I, J) = 0.
B1(I, J) = 0.
ELSE
B1(I, J) = 1. + I + J
A1(I, J) = B1(I, J)
ENDIF
10 CONTINUE
CDVM$ PARALLEL ( J, I ) ON A2(I, J)
DO 20 J = 1, K
DO 20 I = 2, N2
IF(I.EQ.N2 .OR. J.EQ.1 .OR.. J.EQ.K) THEN
A2(I, J) = 0.
B2(I, J) = 0.
ELSE
B2(I, J) = 1. + ( I + N1 – 1 ) + J
A2(I, J) = B2(I, J)
ENDIF
20 CONTINUE
DO 2 IT = 1, ITMAX
CDVM$ PREFETCH BOUND
C exchange bounds
CDVM$ PARALLEL ( J ) ON A1(N1+1, J),
CDVM$*REMOTE_ACCESS (BOUND : B2( 2, J ) )
DO 30 J = 1, K
30 A1(N1+1, J) = B2(2, J)
CDVM$ PARALLEL ( J ) ON A2( 1, J),
CDVM$*REMOTE_ACCESS (BOUND : B1( N1, J ) )
DO 40 J = 1, K
40 A2(N1+1, J) = B2(N1, J)
CDVM$ TASK_REGION
CDVM$ ON MB( 1 )
CDVM$ PARALLEL ( J, I ) ON B1(I, J),
CDVM$*SHADOW_RENEW ( A1 )
DO 50 J = 2, K-1
DO 50 I = 2, N1
50 B1(I, J) = (A1( I-1, J ) + A1( I, J-1 ) + A1( I+1, J) + A1( I, J+1 )) / 4
CDVM$ PARALLEL ( J, I ) ON A1(I, J),
DO 60 J = 2, K-1
DO 60 I = 2, N1
60 A1(I, J) = B1( I, J )
CDVM$ END ON
CDVM$ ON MB( 2 )
CDVM$ PARALLEL ( J, I ) ON B2(I, J),
CDVM$*SHADOW_RENEW ( A2 )
DO 70 J = 2, K-1
DO 70 I = 2, N2-1
70 B2(I, J) = (A2( I-1, J ) + A2( I, J-1 ) + A2( I+1, J) + A2( I, J+1 )) / 4
CDVM$ PARALLEL ( J, I ) ON A2(I, J),
DO 80 J = 2, K-1
DO 80 I = 2, N2-1
80 A2(I, J) = B2( I, J )
CDVM$ END ON
CDVM$ END TASK_REGION
2 CONTINUE
PRINT *, A1, A2
END















