共享或私有 openmp 代码中的结构化类型变量
Structured type variable in shared or private openmp code
我想在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 和列表(的两个数组都成为共享数组的正确方法?如果不是,我该怎么办?我尝试做shared (lvl->L,lvl->list)
但我得到一些编译错误。
您的struct
中没有数组。只有指针。lvl
也只是一个指针。数据共享条款(例如shared
( 仅适用于变量本身(lvl
指向的地址(。
顺便说一下,如果不指定数据共享属性,则在并行区域范围之外定义的变量将隐式shared
。内部定义的变量隐式private
。建议始终尽可能在本地定义变量,这样可以更轻松地编写正确的代码。
例如,私有变量(如k
(不会在并行区域中初始化。
相关文章:
- C++ 中模板化类型的类层次结构
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题
- 如何为结构类型变量赋值
- 在无序映射的结构化绑定中推导类型
- 无法使用类型为"结构节点 *"的左值初始化类型为"结构节点 *"的参数
- 您自己的类型的结构化绑定,不是结构或元组(通过公共成员函数)
- 共享或私有 openmp 代码中的结构化类型变量
- 没有模板变量的模板化类型和其他使用此类的模板化类型
- 成员变量的结构化绑定
- 如何根据构造函数参数使用超类类型初始化成员变量?
- 是否可以在没有结构的情况下创建新的类型变量?
- 如何使用变量参数化类型?C++
- 完美转发使用结构化绑定声明的变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 您可以在类型上使用结构化绑定违反ODR吗?
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员
- 将结构化数据类型从Fortran传递到C
- 如何在C 中的标准堆栈中推动结构类型变量
- 如何在c++中连接两个结构体类型变量