- 1、本文档共601页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多核技术导论PPT
其它有用的结构与子句 并行部分(sections和section子句 代码可并行执行的独立部分 #pragma omp parallel sections { #pragma omp section phase1(); #pragma omp section phase2(); #pragma omp section phase3(); } 并行 串行 其它有用的结构与子句 Single结构 被标注的代码块只能被一个线程执行 选择第一个到达的线程 在尾部隐含栅障 #pragma omp parallel { DoManyThings(); #pragma omp single { ExchangeBoundaries(); } // 其他线程都在这里等待 DoManyMoreThings(); } 其它有用的结构与子句 Master结构 被标注的代码块只能被主线程执行 在尾部没有隐含的栅障 #pragma omp parallel { DoManyThings(); #pragma omp master { ExchangeBoundaries(); } DoManyMoreThings(); } 其它有用的结构与子句 隐含的栅障 多个OpenMP 结构有隐含的栅障 parallel for single 不必要的栅障会损坏性能 等待的线程啥事都做不了! 安全的情况下,用nowait子句撤销隐含的栅障 其它有用的结构与子句 Nowait子句 #pragma omp for nowait for(…) {…}; 当线程需要在独立的计算间等待的时候使用 #pragma omp single nowait { […] } #pragma omp for schedule (dynamic, 1) nowait for(int i=0; in; i++) a[i] = bigFunc1(i); #pragma omp for schedule (dynamic, 1) for(int j=0; jm; j++) b[j] = bigFunc2(j); Nowait子句的文法有助于阻止隐含的栅障: 其它有用的结构与子句 Barrier结构 明确的栅障同步 每个线程都要等待直到所有线程到达 #pragma omp parallel shared (A, B, C) { DoSomeWork(A,B); printf(“Processed A into B\n”); #pragma omp barrier DoSomeWork(B,C); printf(“Processed B into C\n”);} 其它有用的结构与子句 Atomic结构 Atomic结构创建了一个小的临界区域,该临界区大多在一些处理器中是用一条指令或者很少的几条指令完成的。因为它小,所以执行起来比临界段要块。其语法如下: #pragma omp parallel for shared(x, y, index, n) for (i = 0; i n; i++) { #pragma omp atomic x[index[i]] += work1(i); y[i] += work2(i); } 其它有用的结构与子句 OpenMP API 获取一个执行队列中的线程号 获取一个执行队列中的线程数 获取处理器(核)数 通常不需要专门的OpenMP代码,否则: 会导致代码的不连续一致性 除非确实有特殊用途(debugging) 但必须包含一个头文件 int omp_get_thread_num(void) int omp_get_num_thread (void) #include omp.h int omp_get_num_procs (void) 小结 OpenMP是: 是一种简单的为共享存储模式使用的并行编程模型。 我们探讨了在OpenMP编码中如何: 建立并行的代码区域(omp parallel) 划分工作(omp for) 变量分类(omp private….) 同步(omp critical…) 调度(omp schedule…) 更多关于Op
文档评论(0)