XcalableMP Programming Model and Language
21
int a[8][8];
5 #pragma xmp align a[i][j] with t[i][j]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8,8)
5 !$xmp align a(j,i) with t(j,i)
The programmer can align an n-dimensional array with an m-dimensional
template for n > m (Fig. 17).
XcalableMP C
#pragma xmp nodes p[4]
#pragma xmp template t[8]
#pragma xmp distribute t[block] onto p
int a[8][8];
5 #pragma xmp align a[i][ * ] with t[i]
XcalableMP Fortran
!$xmp nodes p(4)
!$xmp template t(8)
!$xmp distribute t(block) onto p
integer :: a(8,8)
5 !$xmp align a( * ,i) with t(i)
When an asterisk is specified as a subscript in a dimension of the target array
in the align directive, the dimension is “collapsed” (i.e. not distributed). In the
sample program above, the first dimension of the array a is distributed onto the
node array p while the second dimension is collapsed.
In XMP/C, a[0:2][:] will be allocated on p[0] while, in XMP/Fortran,
a(:,1:2) will be allocated on p(1).
The programmer also can align an n-dimensional array with an m-dimensional
template for n < m (Fig. 18).
XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[8][8]
#pragma xmp distribute t[block][block] onto p
int a[8];
5 #pragma xmp align a[i] with t[i][ * ]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8)
5 !$xmp align a(i) with t( * ,i)
21
int a[8][8];
5 #pragma xmp align a[i][j] with t[i][j]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8,8)
5 !$xmp align a(j,i) with t(j,i)
The programmer can align an n-dimensional array with an m-dimensional
template for n > m (Fig. 17).
XcalableMP C
#pragma xmp nodes p[4]
#pragma xmp template t[8]
#pragma xmp distribute t[block] onto p
int a[8][8];
5 #pragma xmp align a[i][ * ] with t[i]
XcalableMP Fortran
!$xmp nodes p(4)
!$xmp template t(8)
!$xmp distribute t(block) onto p
integer :: a(8,8)
5 !$xmp align a( * ,i) with t(i)
When an asterisk is specified as a subscript in a dimension of the target array
in the align directive, the dimension is “collapsed” (i.e. not distributed). In the
sample program above, the first dimension of the array a is distributed onto the
node array p while the second dimension is collapsed.
In XMP/C, a[0:2][:] will be allocated on p[0] while, in XMP/Fortran,
a(:,1:2) will be allocated on p(1).
The programmer also can align an n-dimensional array with an m-dimensional
template for n < m (Fig. 18).
XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[8][8]
#pragma xmp distribute t[block][block] onto p
int a[8];
5 #pragma xmp align a[i] with t[i][ * ]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8)
5 !$xmp align a(i) with t( * ,i)
