2

OpenMP を使用して、マルチスレッド オブジェクト指向の C++ コードを作成しています。単純さと一般性のために、いくつかの変数と関数をテンプレート クラスで定義する必要があります。threadprivateスレッド プライベート変数の永続性機能を利用して、テンプレート クラスに埋め込まれたり、テンプレート クラスを呼び出したりする他の関数やソース ファイルでそれらを使用できるようにしたいと考えています。しかし、次のエラーが表示されます: " ... is not file, namespace, or block scope variable " ファイル、名前空間、またはブロック スコープ変数に対してのみディレクティブを使用できることはわかっていますが、ディレクティブthreadprivateを適用する代替手段があるかどうか疑問に思っていましたthreadprivateクラスのメンバーにも。私の総コードレイアウトは次のようなものです:

template<typename T> class EntContainer
{
private:
T** empties;
e_NumPointers;
e_nLists;
.
.
.
public:
#pragma omp threadprivate(empties, e_NumPointers, e_nLists)
void function
{
// do some paralle stuff using #pragma omp parallel 
}
}

前もって感謝します

4

1 に答える 1

0

OpenMP 3.0 ドラフトでは、静的クラス メンバーで threadprivate を使用できますが、#pragma omp threadprivate は、threadprivate 静的クラス メンバーを含むクラスの定義内に存在する必要があり、字句的にすべての使用の前に配置する必要があります。ソース

メンバーを静的にし、#pragma omp threadprivate ディレクティブを宣言のすぐ下に移動すると、エラーが修正されます。

于 2017-03-23T12:49:15.207 に答える