XcalableMP Programming Model and Language
11
XcalableMP Fortran
!$xmp nodes p(3, * )
When the programmer runs the sample code with 12 nodes, the node array p
has a shape of 4 × 3, in C, or 3 × 4, in Fortran.
Note The programmer can put an asterisk only in the last dimension, in XMP/Fortran, or the first dimension, in XMP/C, of the node array.
Hint The dynamic node array may interfere with compiler optimizations. In
general, programs with static ones achieve better performance.
The programmer can declare a node subarray derived from an existing node array.
Node subarrays can be used, for example, to optimize inter-node communication by
reducing the number of nodes participating in the communication.
XcalableMP C
#pragma xmp nodes p[16]
#pragma xmp nodes q[8]=p[0:8]
#pragma xmp nodes r[4][2]=p[8:8]
XcalableMP Fortran
!$xmp nodes p(16)
!$xmp nodes q(8)=p(1:8)
!$xmp nodes r(2,4)=p(9:16)
In line 1, a node array p including 16 nodes is declared. In line 2, a node
subarray q corresponding to the first half of p is declared. In line 3, a twodimensional node subarray r corresponding to the latter half of p is declared.
The programmer can declare an n-dimensional node subarray derived from an
m-dimensional one (Fig. 7).
XcalableMP C
#pragma xmp nodes p[4][2]
#pragma xmp nodes row[4]=p[:][ * ]
#pragma xmp nodes col[2]=p[ * ][:]
XcalableMP Fortran
!$xmp nodes p(2,4)
!$xmp nodes row(4)=p( * ,:)
!$xmp nodes col(2)=p(:, * )
In line 1, a two-dimensional node array p including 4 × 2 nodes is declared. In
line 2, a node subarray row derived from a single row of p is declared. In line 3, a
node subarray col derived from a single column of p is declared.
11
XcalableMP Fortran
!$xmp nodes p(3, * )
When the programmer runs the sample code with 12 nodes, the node array p
has a shape of 4 × 3, in C, or 3 × 4, in Fortran.
Note The programmer can put an asterisk only in the last dimension, in XMP/Fortran, or the first dimension, in XMP/C, of the node array.
Hint The dynamic node array may interfere with compiler optimizations. In
general, programs with static ones achieve better performance.
The programmer can declare a node subarray derived from an existing node array.
Node subarrays can be used, for example, to optimize inter-node communication by
reducing the number of nodes participating in the communication.
XcalableMP C
#pragma xmp nodes p[16]
#pragma xmp nodes q[8]=p[0:8]
#pragma xmp nodes r[4][2]=p[8:8]
XcalableMP Fortran
!$xmp nodes p(16)
!$xmp nodes q(8)=p(1:8)
!$xmp nodes r(2,4)=p(9:16)
In line 1, a node array p including 16 nodes is declared. In line 2, a node
subarray q corresponding to the first half of p is declared. In line 3, a twodimensional node subarray r corresponding to the latter half of p is declared.
The programmer can declare an n-dimensional node subarray derived from an
m-dimensional one (Fig. 7).
XcalableMP C
#pragma xmp nodes p[4][2]
#pragma xmp nodes row[4]=p[:][ * ]
#pragma xmp nodes col[2]=p[ * ][:]
XcalableMP Fortran
!$xmp nodes p(2,4)
!$xmp nodes row(4)=p( * ,:)
!$xmp nodes col(2)=p(:, * )
In line 1, a two-dimensional node array p including 4 × 2 nodes is declared. In
line 2, a node subarray row derived from a single row of p is declared. In line 3, a
node subarray col derived from a single column of p is declared.
