【问题标题】:pragma omp shortcuts in cc中的pragma omp快捷键
【发布时间】:2016-09-29 19:22:44
【问题描述】:

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

#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 部分更好? (请让我知道我是否最好在新帖子中提出这个结尾问题)

【问题讨论】:

    标签: c global-variables pragma


    【解决方案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 之后放置 { 括号。此语句不会并行运行任何代码,它只会使全局范围变量本地化和持久化到一个线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多