縮減
用途
REDUCTION 子句會更新指引建構內子句所宣告的具名變數。 除了更新項目本身之外, REDUCTION 變數的中間值不會在 平行建構中使用。
語法
- op_fnc
- 是 reduction_op 或 reduction_function ,它會出現在涉及此變數的所有 REDUCTION 陳述式中。 您不得在指引建構中為變數指定多個 REDUCTION 運算子或函數。 若要維護 OpenMP API 相符性,您必須針對 REDUCTION 子句指定 op_fnc 。
- reduction_var_ref
- 是出現在 REDUCTION 子句中之變數的變數或子物件
- reduction_op
- 是下列其中一個本質運算子: +、 -、 *、 .AND.、 .OR.、 .EQV.、 .NEQV.或 .XOR.
- reduction_function
- 是下列其中一個本質程序: MAX、 MIN、 IAND、 IOR或 IEOR。
- expr
- 不應包含 reduction_var_ref 的參照
下表顯示每一個運算子和本質的標準起始設定值。 實際起始設定值將與對應 REDUCTION 變數的資料類型一致。
| Intrinsic Operator | Initialization |
| + | 0 |
| * | 1 |
| - | 0 |
| .AND. | .TRUE。 |
| . 或。 | .FALSE。 |
| .EQV。 | .TRUE。 |
| .NEQV。 | .FALSE。 |
| .XOR。 | .FALSE。 |
| Intrinsic Procedure | Initialization |
| MAX | 最小可表示數 |
| MIN | 可呈現的最大數目 |
| IAND | 所有位元開啟 |
| IOR | 0 |
| IEOR | 0 |
規則
- REDUCTION 子句中的變數只能出現在出現 REDUCTION 子句之指引建構內的 REDUCTION 陳述式中。
- REDUCTION 陳述式中出現的兩個 reduction_var_ref在詞彙上必須相同。
- 您無法使用下列形式的 REDUCTION 陳述式: reduction_var_ref = expr operator reduction_var_ref,其中 operator 是 reduction_op以外的任何運算子。
當您在 REDUCTION 子句中指定共用區塊的個別成員時,所指定變數的儲存體不再與共用區塊的儲存體相關聯。
您在工作共用建構的 REDUCTION 子句中指定的任何變數都必須在含括的 PARALLEL 建構中共用。
出現在平行建構的 REDUCTION 子句中的變數也可以出現在工作共用建構的 PRIVATE 子句中。
如果您在具有 NOWAIT 子句的建構上使用 REDUCTION 子句,則在執行屏障同步化以確保所有執行緒都已完成 REDUCTION 子句之前, REDUCTION 變數會維持未定義。
在建構的動態範圍內, REDUCTION 變數不得出現在另一個建構的 FIRSTPRIVATE、 PRIVATE或 LASTPRIVATE 子句中,它在該建構中顯示為 REDUCTION 變數。
如果您對 REDUCTION 子句指定 op_fnc ,則 variable_name_list 中的每一個變數都必須是本質類型。 變數只能出現在指引建構的詞彙範圍內的 REDUCTION 陳述式中。 如果指引使用 trigger_constant $OMP,則必須指定 op_fnc 。
REDUCTION 子句指定出現在縮減作業中的具名變數。 編譯器會維護這類變數的本端副本,但會在結束建構時結合它們。 REDUCTION 變數的中間值會以隨機順序結合,視最先完成其計算的執行緒而定。 因此,不保證會從一個平行執行到另一個平行執行取得位元相同的結果。 即使平行執行使用相同的執行緒數目、排程類型及片段大小,也是如此。
您指定為平行建構 REDUCTION 或 LASTPRIVATE 的變數會在建構結束時定義。 如果您在多個執行緒上有並行定義或使用 REDUCTION 或 LASTPRIVATE 變數,當變數變成已定義時,您必須確定在建構結束時,執行緒已同步。 例如,如果多個執行緒遇到具有 REDUCTION 變數的 PARALLEL 建構,則必須在執行緒到達 END PARALLEL 指引時同步化這些執行緒,因為 REDUCTION 變數會在 END PARALLEL中定義。 因此,整個 PARALLEL 建構必須含括在同步化建構中。
如果 REDUCTION 子句上出現可配置陣列,則在進入包含 REDUCTION 子句的建構時,它必須具有已配置的配置狀態。 此外, REDUCTION 變數的專用副本不得在區域內取消配置或配置。
- 被任命的人
- 假設大小陣列
- THREADLOCAL 共用區塊
- THREADPRIVATE 共用區塊或其成員
- THREADPRIVATE 變數
- 可配置的 純量 物件
- Fortran 90 指標
這些規則說明在 OpenMP 指引上使用 REDUCTION 。 如果您在 INDEPENDENT 指引上使用 REDUCTION 子句,請參閱 INDEPENDENT 指引。
