共享或私有openmp代码中的结构化类型变量

时间:2017-08-21 14:56:37

标签: c++ c openmp

我想在openmp并行代码中将变量作为共享变量传递,但我不确定如何将结构化变量传递给共享变量。这是我的代码: 我不确定这是否是正确的方法:

struct lvl{
int *L;
int *list;
};

struct lvl* lvls(int s,int k){
    struct lvl* lvls =malloc(sizeof (struct lvl));
    lvls->L = (int*)calloc(s+1, sizeof(int));
    lvls->list=(int*)calloc(k+1,sizeof(int));
    return lvls;
}
int main(int argc, char *argv[])
{
int n=100;
int k=200;
struct lvls *lvl = lvls(n,K);
#pragma omp parallel num_threads(threadnum) private(k,bi,b,kstart,kend,v,bmax,max,bwt) firstprivate(BinAff,Blist) shared(capacity,lvl)
 {
       #pragma omp for schedule (static,100)
        for (u=0;u<G->n;u++){
           //some code in here 
        }
  }
}

不,我想知道shared(lvl)是否是构建struct(L和list)共享数组的两个数组的正确方法?如果不是我该怎么办?我尝试了shared (lvl->L,lvl->list),但是我遇到了一些编译错误。

1 个答案:

答案 0 :(得分:0)

struct中没有数组。只有指针。 lvl也只是一个指针。数据共享条款(例如shared)仅适用于变量本身(地址lvl指向)。

顺便说一句,如果您没有指定数据共享属性,那么在并行区域范围之外定义的变量将隐式shared。内部定义的变量隐式private。建议尽可能在本地定义变量,这样可以更容易地编写正确的代码。

例如,私有变量(例如k)未在并行区域内初始化。