openMP lastprivate和firstprivate为同一变量
openMP lastprivate and firstprivate to the same variable
是否正确应用firstprivate和lastprivate在同一变量?
例如:void main (){
int a= 100, i;
#pragma omp for firstprivate(a) lastprivate(a)
for(i = 0; i <9; i++){
bla bla bla;
}
printf("a= %d",a);
}
谢谢!
在OpenMP规范版本4.0,Section 2.14.3中写:
指定给定变量的列表项不能出现在同一指令的多个子句中,除非一个变量可以同时出现在
firstprivate
和lastprivate
子句中。
允许这样做实际上很有意义。firstprivate
在进入并行区域时影响列表变量的值,而lastprivate
在退出并行区域时影响列表变量的值。两者都是不冲突的,并且它们的组合使用允许某些变量通过区域"传播",并通过并行代码以与顺序情况相同的方式修改它们的值。这对于并行循环来说是有意义的。
在firstprivate(x)和parallel region子句中,变量x可以被识别为具有某个值的初始变量,该值定义在所有团队线程的某个地方。每个团队线程都有自己的私有x。在并行区子句中的lastprivate(x)中,表示循环的最后一次迭代。X将在最后一次迭代中获得最终值。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 将包含C样式数组的对象初始化为成员变量(C++)
- 当vector是tje全局变量时,c++中vector的内存管理
- 通过多个头文件使用常量变量
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- openMP lastprivate和firstprivate为同一变量
- 通过Openmp任务访问实例变量(隐式firstprivate)时出现分段错误