- 1、本文档共84页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
高性能计算教案-第九讲-last
ordered 示例 void work(int k) { #pragma omp ordered printf( %d, k); } …… #pragma omp for ordered schedule(dynamic) for (i = lb; i ub; i += st) work(i); threadprivate 指导语句 使一个全局文件作用域的变量在并行域内变成每个线程私有。 #pragma omp threadprivate (list) newline 每个线程对该变量复制一份私有拷贝。 threadprivate 示例 int alpha[10], beta[10], i; #pragma omp threadprivate(alpha) int main () { // 第一个并行区域 #pragma omp parallel private(i,beta) for (i=0; i 10; i++) alpha[i] = beta[i] = i; // 第二个并行区域 #pragma omp parallel printf(alpha[3]= %d and beta[3]=%d\n, alpha[3], beta[3]); } 数据域属性子句 用于指定变量的作用域范围。 private子句; shared子句; default子句; firstprivate子句; lastprivate子句; copyin子句; reduction子句; private子句 表示它列出的变量(可能局部)对于每个线程是局部的。 语句格式为:private(list)。 ? 数据类型 位置 持久性 扩充性 初始化 private 变量 在域的开始或共享任务单元 否 只是词法的,除非作为子程序 的参数而传递 使用firstprivate threadprivate 变量 在块或整个文件区域的例程定义上 是 动态的 使用copyin private和threadprivate区别 shared子句 表示它所列出的变量被线程组中所有的线程共享所有线程都能对它进行读写访问。 语句格式为:shared (list)。 default子句 用户自行规定在一个并行域的静态范围中所定义的变量的缺省作用范围。 default (shared | none)。 int x, y, z[1000]; #pragma omp threadprivate(x) void fun(int a) { const int c = 1; int i = 0; #pragma omp parallel default(none) private(a) shared(z) { int j = omp_get_num_thread(); // 正确!因为j声明在并行区域内 a = z[j]; // 正确!因为a和z分别被列在private和shared子句中 x = c; // 正确!因为x是threadprivate,c是常量限定类型 z[i] = y; // 错误!不能在这里引用i或y } } firstprivate子句 是private子句的超集,用于对变量做原子初始化。 firstprivate (list)。 incr = 0; #pragma omp parallel for firstprivate(incr) for ( i = 0; i MAX; i++) { if ( (i%2) == 0) incr++; a[i] = incr; } lastprivate子句 也是private子句的超集,用于将变量从最后的循环迭代或段复制给原始的变量。 lastprivate (list)。 void sq2(int n, double *last) { double x; #pragma omp parallel #pragma omp for lastprivate(x) for (int i = 0; i n; i++) { x = a[i] * a[i] + b[i] * b[i]; b[i] = sqrt(x); } last = x; } copyin子句 用来为线程组中所有线程的threadprivate变量赋相同的值,主线程该变量的值作为初始值。 语句格式为:copyin(list)。 reduction子句 使用指定的操作对其列表中出现的变量进行归; 初始时,每个线程都保留一份私有拷贝,在结构尾部根据指定的操作对线程中的相应变量进行归约,并更新该变量的全局值。 语句格式为:reduction (operator: list) #pragma omp pa
您可能关注的文档
- 阿杰涂料芬琳选色记—F327恋上粉色.doc
- 降血脂.抽筋.doc
- 陕教版七年级思想品德月考中试卷及答案.doc
- 陆地环境(高考题).pptx
- 降压食谱 2.doc
- 陕西宏图建筑工程有限公司商务标.doc
- 陕西省 2013年数学中考试题 Doc2.doc
- 陕西科技版三年级下册信息技术教学计划.doc
- 陕西省西工大附中2013届高三上学期第四次适应性训练(期末考试)数学文试题.doc
- 随笔:我说七夕节.doc
- 某县纪委监委开展“校园餐”突出问题专项整治工作汇报22.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告66.docx
- 某县委常委、宣传部部长年度民主生活会“四个带头”个人对照检查发言材料.docx
- XX县委领导班子年度述职述廉报告3.docx
- 某县纪委关于校园餐问题整治工作落实情况的报告.docx
- 中小学校园食品安全与膳食经费管理专项整治工作自查报告22.docx
- 某县税务局党委领导班子年度民主生活会“四个带头”对照检查材料.docx
- 某县委书记在县委常委班子年度民主生活会专题学习会上的讲话.docx
- 某县纪委校园餐问题整治工作落实情况的报告.docx
- 某区委副书记、区长年度民主生活会对照检查材料.docx
文档评论(0)