これは簡単なテスト コードです。
#include <stdlib.h>
__thread int a = 0;
int main() {
#pragma omp parallel default(none)
{
a = 1;
}
return 0;
}
gcc
で問題なくこれをコンパイルしますが-fopenmp
、icc (ICC) 12.0.2 20110112
-openmp
test.c(7): エラー: OpenMP 並列プラグマ #pragma omp parallel default(none) を囲む変数リストに "a" を指定する必要があります
このタイプの変数にどのパラダイム (つまりshared
、private
、 ) が適用されるかはわかりません。threadprivate
どちらを使用するのが正しいですか?
そのスレッド ローカル変数にアクセスする関数を呼び出すと、期待どおりの動作が得られますが、明示的な並列セクション内からアクセスするのに問題があります。
編集:
これまでの私の最善の解決策は、関数を介して変数へのポインタを返すことです
static inline int * get_a() { return &a; }