複数の OpenMP* ORDERED 構造を実行するループの反復

1 つのループの反復で複数の ORDERED 構造は実行できません。

ORDERED 節と ORDERED 構造は並列で処理された結果をシーケンシャルに順序付けするのに使用されます。1 つのループ領域に複数の ORDERED 構造を含めることは不正ではありませんが、単一の反復で複数の構造を実行することは許可されていません。この診断は、この制限に違反している (またはその可能性がある) ことを示します。

ID

問題箇所

説明

1

OpenMP* の使用方法に関するエラー

2 番目の ORDERED 宣言子が実行された場所

2

OpenMP* 宣言

順序付きループの場所

3

OpenMP* 宣言

最初の ORDERED 宣言子が実行された場所


// Example A.24.3c from OpenMP* 3.0 Specification
// Copyright (C) 1997-2008 OpenMP Architecture Review Board
// This example is legal because each iteration of the loop will
// execute only one ORDERED construct.
void work(int i) { }

void a24_good(int n)
{
    int i;
    
#pragma omp for ordered
    for (i = 0; i < n; i++) {
        if (i <= 10) {
            #pragma omp ordered
            work (i);
        }

        if (i > 10) {
            #pragma omp ordered
            work (i + 1);
        }
    }
}
        
次に FORTRAN の同様の例を示します。

! Example A.24.3f from OpenMP* 3.0 Specification
! Copyright (C) 1997-2008 OpenMP Architecture Review Board
SUBROUTINE A24_GOOD(N)
INTEGER N
!$OMP DO ORDERED
    DO I = 1,N
        IF I <= N THEN
!$OMP ORDERED
            CALL WORK(I)
!$OMP END ORDERED
        END IF
        
        IF I > N THEN
!$OMP ORDERED
            CALL WORK(I+1)
!$OMP END ORDERED
        END IF
    END DO
END SUBROUTINE A24_GOOD
        

Note icon

この例は、OpenMP* 3.0 仕様からのもので、次のように著作権が保護されています。

© 1997-2008 OpenMP Architecture Review Board.

この資料は、OpenMP Architecture Review Board の著作権と本ドキュメントのタイトルが記載され、OpenMP Architecture Review Board の許諾に基づく転載である旨が明記されている場合に限り、無料で一部または全体を転載できます また、転載は OpenMP Architecture Review Board の許諾に基づいて行われたことを明記する必要があります。

© 2010 Intel Corporation. 無断での引用、転載を禁じます。