OpenMP Tutorial学习笔记(10)OpenMP指令之数据范围属性的子句
来源:互联网 发布:皮皮学拼音软件 编辑:程序博客网 时间:2024/05/11 17:16
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#Clauses
(1)Summary:
在OpenMP的指令中,有一系列的子句,子句中一大部分子句是和数据属性相关的,也是指令很重要的一部分。称之为”Data Scope Attribute Clauses“,或者称之为”Data-sharing Attribute Clauses“。掌握数据属性的使用是OpenMP学习和理解的很重要的一部分,由于OpenMP是基于内存共享的,所以很多数据默认就是共享的。这些数据共享属性的子句通常用于特定的指令中,一般为parallel, do/for, sections等。
(2)private子句:
private (list)private子句指定列表中的变量对于每个线程都是私有的。
说明:private子句的特性,
对于team中的每个线程,一个同样类型的新的对象被声明;
所有对原来的对象的引用都被新对象的引用替代;
声明为private的变量被认为是对于每个线程没有初始化的。
以下是private和threadprivate的比较:
Fortran: variable or common blockC/C++: variable
Fortran: common blockWhere DeclaredAt start of region or work-sharing groupIn declarations of each routine using block or global file scopePersistent?NoYesExtentLexical only - unless passed as an argument to subroutineDynamicInitializedUse FIRSTPRIVATEUse COPYIN
(3)shared子句
shared (list)shared子句将列表中的变量声明为对于team内的所有线程共享。
说明:shared子句的特性,
一个共享变量只存在于一个内存地址,所有的线程都能读或写其地址;
开发者要自己保证访问共享变量的正确性(通过同步,如critical)。
(4)default子句
default (shared | none)default子句指定parallel区域的所有变量的默认scope。
说明:default子句的特性,
可以使用其它子句如shared/private等覆盖默认的指定;
C/C++标准没有规定可以指定private作为default(Fortran支持),当然,编译器可以自行实现;
指定none作为default的值,那么并行块中的所有变量都需要显式定义数据范围属性。
另外,对于一个parallel并行块,只能指定一个default值。
(5)firstprivate子句
firstprivate (list)
firstprivate子句结合了private子句和自动初始化的功能。
(6)lastprivate子句
lastprivate (list)lastprivate子句结合了private子句的功能,而且会复制最后一个循环迭代或section的值。
(7)copyin子句
copyin (list)copyin子句用于为一个team的所有线程的threadprivate指令的变量赋值统一的值。
说明:copyin的源变量值是master线程的值,线程在进入并行块时使用其值进行初始化。
(8)copyprivate子句
copyprivate (list)用于single指令。
(9)reduction子句
reduction (operator: list)
reduction子句对指定的变量执行reduction操作。对于多个线程,每个线程会对于reduction类型的变量保存一个副本,在循环迭代或并行结束后,对所有的线程的副本变量执行operator的叠代操作,得到最终的结果。其中,operator为一个合法的操作符,比如+/-/*等等。
Fortran: variable or common blockC/C++: variable
Fortran: common blockWhere DeclaredAt start of region or work-sharing groupIn declarations of each routine using block or global file scopePersistent?NoYesExtentLexical only - unless passed as an argument to subroutineDynamicInitializedUse FIRSTPRIVATEUse COPYIN
- OpenMP Tutorial学习笔记(10)OpenMP指令之数据范围属性的子句
- OpenMP Tutorial学习笔记(3)OpenMP指令之指令格式和指令范围
- OpenMP Tutorial学习笔记(11)OpenMP指令和子句的总结
- OpenMP Tutorial学习笔记(9)OpenMP指令之THREADPRIVATE指令
- OpenMP Tutorial学习笔记(4)OpenMP指令之同步构造(Parallel)
- OpenMP Tutorial学习笔记(5)OpenMP指令之共享工作构造(Work-Sharing)
- OpenMP Tutorial学习笔记(6)OpenMP指令之组合共享工作构造(Combined Work-Sharing)
- OpenMP Tutorial学习笔记(7)OpenMP指令之任务构造(Task Constructs)
- OpenMP Tutorial学习笔记(8)OpenMP指令之同步构造(Synchronization Constructs)
- Openmp补遗之数据共享&归约子句的学习
- OpenMP Tutorial学习笔记(1)OpenMP介绍
- OpenMP Tutorial学习笔记(14)OpenMP Tutorial总结
- OpenMP中数据属性相关子句详解(3): reduction子句
- OpenMP中数据属性相关子句详解(3): reduction子句
- OpenMP中数据属性相关子句详解(3): reduction子句
- OpenMP Tutorial学习笔记(2)OpenMP编程模型
- OpenMP Tutorial学习笔记(13)OpenMP环境变量(Environment Variables)
- OpenMP中数据属性相关子句详解(2):shared/default/copyin/copyprivate子句的使用
- Extjs grid 锁定某些行,不让用户进行选择
- vs环境下开发Qt程序
- Flex 3 AdvancedDataGrid的使用(六)
- 注册登录
- windows7&iis 搞定
- OpenMP Tutorial学习笔记(10)OpenMP指令之数据范围属性的子句
- Flex 3 AdvancedDataGrid的使用(七)
- smarty
- Flex 3 AdvancedDataGrid的使用(八)
- java读写Excel总结
- 理解嵌入式开发中的一些硬件相关的概念
- 平衡二叉树
- Tiny6410 的内核移植(拿来主义)
- 字符集