gpt4 book ai didi

c++ - 共享或私有(private) openmp 代码中的结构化类型变量

转载 作者:行者123 更新时间:2023-11-30 20:33:17 24 4
gpt4 key购买 nike

我想在 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
}
}
}

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

最佳答案

您的结构体中没有数组。只有指针。 lvl 也只是一个指针。数据共享子句(例如 shared)仅适用于变量本身(lvl 指向的地址)。

顺便说一句,如果您不指定数据共享属性,则在并行区域范围之外定义的变量将隐式共享。内部定义的变量隐式是私有(private)。建议始终尽可能在本地定义变量,这样可以更轻松地编写正确的代码。

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

关于c++ - 共享或私有(private) openmp 代码中的结构化类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45800278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com