OpenMP* COPYPRIVATE 変数は外部スコープで PRIVATE または THREADPRIVATE でなければならない

COPYPRIVATE 節の変数は、囲まれたコンテキストでは PRIVATE または THREADPRIVATE にする必要があります。

OpenMP* 仕様では、COPYPRIVATE 節の変数は SINGLE 構造の PRIVATE 節または FIRSTPRIVATE 節では使用できません。C/C++ プログラムの場合、COPYPRIVATE 節のクラス型の変数 (またはその配列) には、アクセス可能なあいまいでないそのクラス型の代入演算子が必要です。FORTRAN の場合、大きさ引き継ぎ配列は COPYPRIVATE 節には記述できません。ALLOCATABLE 属性の配列は、COPYPRIVATE 節が適用されるすべてのスレッドにおいて同じ境界で割り当てられていなければなりません。

ID

問題箇所

説明

1

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

変数が不適切に使用された場所


    module mod
    contains
    subroutine sub(priv)
!$OMP SINGLE
    print *, "SING", priv
    priv = 2
    do while (priv == 2)
        print *, "SINGLE", priv
    end do
!$OMP END SINGLE COPYPRIVATE(priv)
    end subroutine sub
    end module mod

    use mod
    integer, parameter :: N = 10
    integer x
    priv = N
    x = 1
!$OMP PARALLEL DEFAULT(SHARED) NUM_THREADS(2)
!$OMP MASTER
    print *, "MAST", priv
    do while (priv == 10)
        print *, "MASTER", priv
    end do
    priv = 1
!$OMP END MASTER
    do i = 1, 10000
        x = 1 - x
    end do
    call sub(priv)
!$OMP END PARALLEL
    end
        

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