XcalableMP Programming Model and Language
61
0
XMP/C
a[16]
p[0]
p[1]
p[0]
p[1]
p[0]
p[1]
1 2 3 4
1 2 3 4
1 2 3 4 5
1 2 3 8 5
5 6 7
5 6 7 8
5
4
6 7 8
10
4
6 7 8
shadow a[1]
reflect (a)
reduce_shadow(a)
0
XMP/Fortran
a(16)
p(1)
p(2)
p(1)
p(2)
p(1)
p(2)
1 2 3 4
1 2 3 4
1 2 3 4 5
1 2 3 8 5
5 6 7
5 6 7 8
5
4
6 7 8
10
4
6 7 8
shadow a[1]
reflect (a)
reduce_shadow(a)
Fig. 47 reduce_shadow construct (1)
0
XMP/C
a[16]
p[0]
p[1]
p[0]
p[1]
p[0]
p[1]
1 2 3 4
1 2 3 4
1
8
2 3 4 5
8 2 2 3 8 5
5 6 7
5 6 7 8
5
4
6 7 8 1
10
4
6 71 61
shadow a[1]
reflect (a) width(..)
reduce_shadow(a) width(..)
0
XMP/Fortran
a(16)
p(1)
p(2)
p(1)
p(2)
p(1)
p(2)
1 2 3 4
1 2 3 4
1
8
2 3 4 5
8 2 2 3 8 5
5 6 7
5 6 7 8
5
4
6 7 8 1
10
4
6 7 16 1
shadow a(1)
reflect (a) width(..)
reduce_shadow(a) width(..)
Fig. 48 reduce_shadow construct (2)
For the above example, in XMP/C, a[3] on p[0] has a value of eight, and
a[4] on p[1] has a value of ten. Similarly, in XMP/Fortran, a(4) of p(1) has a
value of eight, and a(5) on p(2) has a value of ten (Fig. 47).
The programmers can add the periodic modifier to the width clause to
reduce shadow objects to the corresponding data object periodically.
XcalableMP C
#pragma xmp reflect (a) width(/periodic/1)
#pragma xmp reduce_shadow (a) width(/periodic/1)
XcalableMP Fortran
!$xmp reflect (a) width(/periodic/1)
!$xmp reduce_shadow (a) width(/periodic/1)
In addition to the first example, in XMP/C, a[0] on p[0] has a value of two,
and a[7] on p[1] has a value of 16. Similarly, in XMP/Fortran, a(1) in p(1)
has a value of two, and a(8) in p(2) has a value of 16 (Fig. 48).
Précédent

- 69/265

Suivant