【发布时间】:2017-03-23 20:49:15
【问题描述】:
我正在通过 OpenMP 编写一个多线程的面向对象的 c++ 代码。为了简单和通用,我不得不在模板类中定义我的一些变量和函数。我想让它们threadprivate 来利用线程私有变量的持久性特性,并能够在嵌入或调用模板类的其他函数或源文件中使用它们。但我收到以下错误:
“...不是文件、命名空间或块范围变量”
我知道我只能将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
}
}
提前致谢
【问题讨论】:
-
如果将它们声明为
static类成员,OpenMPI 是否允许它们成为线程私有的? -
您似乎将 MPI 实现 Open MPI 误认为是线程范式 OpenMP。
-
不!将它们声明为静态无济于事