Parallel Processing with OpenMP课件.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Copyin Example - Fortran real, parameter :: nvals = 501 real, dimension(nvals) :: x, y, xmet, ymet common /work1/ work(nvals), istart, iend !$OMP THREADPRIVATE(/work1/) istart = 2; iend = 500 call read_coords(x,y) !$OMP PARALLEL SECTIONS COPYIN(istart,iend) !$OMP SECTION call metric(x) xmet = work !$OMP SECTION call metric(y) ymet = work !$OMP END PARALLEL SECTIONS subroutine metric(c) real, dimension(:) :: c common /work1/ work(nvals), istart, iend !$OMP THREADPRIVATE(/work1/) do i = istart, iend work(i) = 0.5*(c(i+1)-c(i-1)) enddo end subroutine metric 精品文档 Similar to critical Allows greater optimization than critical Applies to single line following the atomic directive Atomic 精品文档 Atomic Example - Fortran do i = 1, 10 !$OMP ATOMIC x(j(i)) = x(j(i)) + 1.0 enddo 精品文档 Atomic Example - C for(i = 0; i10; i++){ #pragma omp atomic x[j[i]]= x[j[i]] + 1.0; } 精品文档 Exercise (cont’d) When run completes, look at profile pgprof –exe gt Where is most time being used? How can we tackle this with OpenMP? Recompile without profiler flag Re-run and note timing from batch output file this is the base timing We will decide on an OpenMP strategy Add OpenMP directive(s) Re-run on 1, 2, and 4 procs. and check new timings 精品文档 Parallel parallel and do/for can be separated into two directives. is the same as !$omp parallel do do i = 1, maxi a(i) = b(i) enddo #pragma omp parallel for for(i=0; imaxi; i++){ a[i] = b[i]; } !$omp parallel !$omp do do i = 1, maxi a(i) = b(i) enddo !$omp end parallel #pragma omp parallel #pragma omp for for(i=0; imaxi; i++){ a[i] = b[i]; } #pragma omp end parallel 精品文档 Parallel (cont’d) Note that an end parallel directive is required. Everything within the parallel region will be run in parallel (surprise!). The do/for directive indicates that the loop indices will be distributed among threads rather than duplicating every index on every thread. 精品文档 Parallel (3) Multiple loops in parallel r

文档评论(0)

liuxiaoyu98 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档