Visual Studio 2010 の OpenMP 実装には、外部変数を threadprivate として使用できない重大なバグがあるようです。次のコードはコンパイルされません。
file.c
#include <omp.h>
/* Declaration of external variable. */
extern int My_Var;
#pragma omp threadprivate (My_Var)
void MyFunc(void) { My_Var = 1;}
エラーメッセージは次のとおりです。
error C3053:
'My_Var' : 'threadprivate' is only valid for global or static data tems.
明らかに、コンパイラは変数のリンケージ属性について混乱しています。
複数のファイルでグローバル変数を参照するのが最も一般的です。したがって、この問題によりthreadprivate
、実際のプログラムではディレクティブが使用できなくなります。
このバグを処理するためのトリックがあるのだろうか。残念ながら、私の場合、この問題により OMP を完全に使用できなくなります。
ありがとうございました、
アレックス