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