2

これは簡単なテスト コードです。

#include <stdlib.h>

__thread int a = 0;

int main() {

    #pragma omp parallel default(none)
    {
        a = 1;
    }

    return 0;
}

gccで問題なくこれをコンパイルしますが-fopenmpicc (ICC) 12.0.2 20110112-openmp

test.c(7): エラー: OpenMP 並列プラグマ #pragma omp parallel default(none) を囲む変数リストに "a" を指定する必要があります

このタイプの変数にどのパラダイム (つまりsharedprivate、 ) が適用されるかはわかりません。threadprivateどちらを使用するのが正しいですか?

そのスレッド ローカル変数にアクセスする関数を呼び出すと、期待どおりの動作が得られますが、明示的な並列セクション内からアクセスするのに問題があります。

編集:

これまでの私の最善の解決策は、関数を介して変数へのポインタを返すことです

static inline int * get_a() { return &a; }
4

1 に答える 1