pragma omp快捷方式c

时间:2016-09-29 19:22:44

标签: c global-variables pragma

我需要在程序的并行化部分中使用一些全局变量。所以我写了这个:

#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 的部分是否等同于:

...
#pragma omp privatethread(x,matrix) parallel for
...

声明 #pragma omp parallel 然后 #pragma omp privatethread 并首先声明 #pragma omp privatethread 然后 #pragma omp parallel for ?我是否必须在{privathread部分之后?

#pragma omp privatethread(x,matrix)
{ //<-- here
#pragma omp for

最后,这是在c中使用大型向量的好方法还是在我的pragma omp中使用malloc并删除privatethread部分更好? (如果我在新帖子中提出这个结束问题,请告诉我们)

1 个答案:

答案 0 :(得分:1)

1.以下代码会给您一个错误。即使您删除了for。

...
#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
} 

正如您所看到的那样,您不必在 #pragma omp privatethread 之后放置{括号。此语句并不会并行运行任何代码,它只会构成全局范围变量local和持久化到一个线程。