168
H. Sakagami
lx, ly, lz are Fortran array size of first, second, third dimension, and nx, ny, nz are a
number of division in X, Y, Z directions, respectively. These are also variable names
in the program shown in Listings.
The code is also hand-coded with MPI using the same domain decomposition
methods to compare performances.
Listing 1 Typical XMP programs using the global-view programming model for only Z domain
decomposition method
1 integer parameter :: lx=..., ly=..., lz=...
2 integer parameter :: nz=...
3 !$XMP NODES proc(nz)
4 !$XMP TEMPLATE t(lx,ly,lz)
5 !$XMP DISTRIBUTE t( * , * ,BLOCK) ONTO proc
6 real * 8 :: physval(6,lx,ly,lz)
7 real * 8 :: ram
8 !$XMP ALIGN ( * , * , * ,k) WITH t( * , * ,k) :: physval
9 !$XMP SHADOW (0,0,0,1) :: physval
10 ...
11 !$XMP LOOP (iz) ON t( * , * ,iz)
12 !$OMP PARALLEL DO PRIVATE(iy,ix)
13 do iz = 1, lz
14 do iy = 1, ly
15 do ix = 2, lx-1
16
...
17
physval(..,ix,iy,iz) = ... &
18
physval(..,ix-1,iy,iz) ... physval(..,ix+1,iy,iz)
19
...
20 ...
21 !$XMP LOOP (iz) ON t( * , * ,iz)
22 !$OMP PARALLEL DO PRIVATE(iy,ix)
23 do iz = 1, lz
24 do iy = 2, ly-1
25 do ix = 1, lx
26
...
27
physval(..,ix,iy,iz) = ... &
28
physval(..,ix,iy-1,iz) ... physval(..,ix,iy+1,iz)
29
...
30 ...
31 !$XMP REFLECT (physval)
32 !$XMP LOOP (iz) ON t( * , * ,iz)
33 !$OMP PARALLEL DO PRIVATE(iy,ix)
34 do iz = 2, lz-1
35 do iy = 1, ly
36 do ix = 1, lx
37
...
38
physval(..,ix,iy,iz) = ... &
39
physval(..,ix,iy,iz-1) ... physval(..,ix,iy,iz+1)
40
...
41 ...
42 !$XMP LOOP (iz) ON t( * , * ,iz) REDUCTION(max:ram)
43 !$OMP PARALLEL DO REDUCTION(max:ram) PRIVATE(iy,ix)
Précédent

- 174/265

Suivant