Work Mapping
Loop directive
The loop construct specifies that each iteration of the following loop is executed by a node set
specified by the on clause, so that the iterations are distributed among nodes and executed in parallel.
- Specify the index to be divided between the loop and on statements.
In the case of a single loop statement, this can be omitted.
- on-ref specifies the template name or the node set name.
- An operation of reduction clause is defined as follows.
[F] +, *, -, .and., .or., .eqv., .neqv., max, min, iand, ior, ieor, firstmax, firstmin, lastmax, lastmin
[C] +, *, -, &, |, ^, &&, ||, max, min, firstmax, firstmin, lastmax, lastmin
Single loop
C
#pragma xmp loop on t[i]
for( i = 0; i < 20; i++){
a[i] = func(i);
}
|
Fortran
!$xmp loop on t(i)
do i=1, 20
a(i) = func(i)
end do
|
Nested loop
C
#pragma xmp loop (i,j) on t[i][j]
for( i = 0; i < 20; i++){
for( j = 0; j < 10; j++){
a[i][j] = func(i , j);
}
}
|
Fortran
!$xmp loop (i,j) on t(i,j)
do j=1, 10
do i=1, 20
a(i, j) = func(i, j)
end do
end do
|
Reduction clause
C
#pragma xmp loop on t[i] reduction(+:sum)
for( i = 0; i < 20; i++){
sum += i;
}
|
Fortran
!$xmp loop on t(i) reduction(+:sum)
do i=1, 20
sum = sum + i
end do
|
The following calculation is performed at each node (with four nodes).
C
node | calculation | sum |
p[0] | 0+1+2+3+4 | 10 |
p[1] | 5+6+7+8+9 | 35 |
p[2] | 10+11+12+13+14 | 60 |
p[3] | 15+16+17+18+19 | 85 |
|
Fortran
node | calculation | sum |
p(1) | 1+2+3+4+5 | 15 |
p(2) | 6+7+8+9+10 | 40 |
p(3) | 11+12+13+14+15 | 65 |
p(4) | 16+17+18+19+20 | 90 |
|
After the end of the loop statement,
the reduction clause causes a summation calculation to be performed based on the value of sums held at each node.
In this case, a value of 190 in C, and a value of 210 in Fotran, is assigned to the sum in each node.