順序付きループ以外で実行される OpenMP* ORDERED 宣言子

OpenMP* ORDERED 宣言子は、ORDERED 節のループでのみ許可されます。

ORDERED 宣言子は、並列で実行された処理結果をシーケンシャルに順序付けるのに使用されます。ORDERED 宣言子を実行する並列ループは、それ自身が ORDERED 節でマークされる必要があります。この診断は、この制限に違反している (またはその可能性がある) ことを示します。

順序付きループ以外に順序付きループが含まれていても不正ではありません。ORDERED としてマークされなければならない唯一のループは、本文が直接 ORDERED 宣言子を実行するループです。

ID

問題箇所

説明

1

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

ORDERED 宣言子の場所

2

OpenMP* 宣言

必要な ORDERED 節が不足しているループの場所


// Example A.24.1c from OpenMP* 3.0 Specification
// Copyright (C) 1997-2008 OpenMP Architecture Review Board
#include <stdio>

void work(int k)
{
    #pragma ordered
    printf(" %d\n", k);
}

void a24(int lb; int ub; int stride)
{
    int i;
    #pragma omp parallel for ordered schedule(dynamic)
    for (i = lb; i < ub; i += stride) {
        work(i);
    }
}

int main(int argc, char **argv)
{
    a24(0, 100, 5);
    return 0;
}
        
次に FORTRAN の同様の例を示します。

! Example A.24.1f from OpenMP* 3.0 Specification
! Copyright (C) 1997-2008 OpenMP Architecture Review Board
SUBROUTINE WORK(K)
    INTEGER K
!$OMP ORDERED
    WRITE(*,*) k
!$OMP END ORDERED

SUBROUTINE SUBA24(LB, UB, STRIDE)
    INTEGER LB, UB, STRIDE
    INTEGER I

!$OMP PARALLEL DO ORDERED SCHEDULE(DYNAMIC)
    DO I = LB, UB, STRIDE
        CALL WORK(I)
    END DO
!$OMP END PARALLEL DO

END SUBROUTINE SUBA24

PROGRAM A24
    CALL SUBA24(0, 100, 5)
END PROGRAM A24
        

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. 無断での引用、転載を禁じます。