16. reduction指示文¶
集約演算を行います. loop指示文 のreduction節と意味は同じですが,reduction指示文は任意の箇所に記述することができます.
- XMP/Cプログラム
#pragma xmp nodes p[4]
:
sum = xmpc_node_num() + 1;
#pragma xmp reduction (+:sum)
- XMP/Fortranプログラム
!$xmp nodes p(4)
:
sum = xmp_node_num()
!$xmp reduction (+:sum)
on節を伴ってノード集合の範囲を指定することもできます. 下記の例では,4ノード中の後半の2ノードの値のみが集約演算の対象となります.
- XMP/Cプログラム
#pragma xmp nodes p[4]
:
sum = xmpc_node_num() + 1;
#pragma xmp reduction (+:sum) on p[2:2]
- XMP/Fortranプログラム
!$xmp nodes p(4)
:
sum = xmp_node_num()
!$xmp reduction (+:sum) on p(3:4)
指定できる演算子は下記の通りです.
- XMP/Cプログラム
+
*
-
&
|
^
&&
||
max
min
- XMP/Fortranプログラム
+
*
-
.and.
.or.
.eqv.
.neqv.
max
min
iand
ior
ieor
注釈
reduction節はループ文を伴うため,firstmax・firstmin・lastmax・lastminの演算子が必要ですが, reduction指示文はループ文を伴わないため,それらの演算子はありません.
注釈
reduction指示文はreduction節と同様に,集約変数が浮動小数点型の場合は,計算順序の違いにより,逐次実行と並列実行で結果がわずかに異なる場合があります.