我有一些全局变量,需要在程序的并行化部分中使用。所以我写了这个:
#define N 2000
int x[N], matrix[N][N]
int main(int argc, char **argv)
...
#pragma omp parallel
{
#pragma omp privatethread(x,matrix)
#pragma omp for
for(int k=0; k<100;++k)
/*some function to modify values of x and matrix differently
from run to run*/
...
}
...
使用#的部件是否相当于:
...
#pragma omp privatethread(x,matrix) parallel for
...
声明#务实omp并行,然后声明#务实omp私有线程与首先声明#语用omp私有线程,然后声明#语用omp并行用于之间有什么区别吗?我一定要在私密部分之后放个{?
#pragma omp privatethread(x,matrix)
{ //<-- here
#pragma omp for
最后,这是在c中使用大型向量的好方法,还是在我的语用omp中使用malloc并删除私有线程部分更好?(请告诉我,如果我在一个新的帖子中问这个结尾的问题更好)
发布于 2017-02-24 10:53:15
1.下面的代码给出了一个错误。即使你移除了。
...
#pragma omp privatethread(x,matrix) parallel for
...
声明必须遵循以下语法
#pragma omp threadprivate (list)
2.两者之间没有差别,
#pragma omp parallel
{
#pragma omp privatethread(list)
//CODE
}
和
#pragma omp privatethread(list)
#pragma omp parallel
{
//CODE
}
如您所见,您不必在#杂注omp私有线程 .This语句之后放置{方括号,它只会使全局作用域变量局部性和持久化到线程。
https://stackoverflow.com/questions/39778396
复制相似问题