OPEN - MPI例子
更新时间:2024-02-26 22:41:01 阅读量: 综合文库 文档下载
- openai推荐度:
- 相关推荐
例子1:
(1)!$OMP DO SCHEDULE PROGRAM VEC_ADD_DO
INTEGER N, CHUNKSIZE, CHUNK, I PARAMETER (N=1000)
PARAMETER (CHUNKSIZE=100) REAL A(N), B(N), C(N) ! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO
CHUNK = CHUNKSIZE
!$OMP PARALLEL SHARED(A,B,C,CHUNK) PRIVATE(I)
!$OMP DO SCHEDULE(DYNAMIC,CHUNK) DO I = 1, N
C(I) = A(I) + B(I) ENDDO
!$OMP END DO NOWAIT
!$OMP END PARALLEL WRITE(*,*) (C(I),I=1,N)
END
(2)!$OMP DO SCHEDULE program main
implicit none
integer i,N,CHUNKSIZE,CHUNK
PARAMETER (N=9)
PARAMETER (CHUNKSIZE=4) REAL a(N)
CHUNK = CHUNKSIZE a(1)=100
!$OMP PARALLEL SHARED(a) PRIVATE(I)
!$OMP DO SCHEDULE(DYNAMIC,CHUNK)
do i = 1, 8
a(i+1) = a(1) + i enddo
!$OMP END DO NOWAIT
!$OMP END PARALLEL
write(*,*) (a(i),i=1,8) end
例子2:主要熟悉SECTION的用法
PROGRAM VEC_ADD_SECTIONS INTEGER N, I
PARAMETER (N=1000)
REAL A(N), B(N), C(N), D(N) ! Some initializations DO I = 1, N A(I) = I * 1.5 B(I) = I + 22.35 ENDDO
!$OMP PARALLEL SHARED(A,B,C,D), PRIVATE(I) !$OMP SECTIONS !$OMP SECTION DO I = 1, N
C(I) = A(I) + B(I) ENDDO !$OMP SECTION DO I = 1, N
D(I) = A(I) * B(I) ENDDO
!$OMP END SECTIONS NOWAIT !$OMP END PARALLEL WRITE(*,*) (C(I),I=1,N) WRITE(*,*) (D(I),I=1,N)
END
例子3:WORKSHARE主要用法 PROGRAM WORKSHARE
INTEGER N, I, J
PARAMETER (N=100)
REAL AA(N,N), BB(N,N), CC(N,N), DD(N,N), FIRST, LAST
! Some initializations DO I = 1, N DO J = 1, N
AA(J,I) = I * 1.0 BB(J,I) = J + 1.0 ENDDO ENDDO
!$OMP PARALLEL SHARED(AA,BB,CC,DD,FIRST,LAST)
!$OMP WORKSHARE CC = AA * BB DD = AA + BB
FIRST = CC(1,1) + DD(1,1) LAST = CC(N,N) + DD(N,N) !$OMP END WORKSHARE NOWAIT
!$OMP END PARALLEL !WRITE(*,*) CC WRITE(*,*) FIRST
END
例子4:Fortran - PARALLEL DO Directive Example PROGRAM VECTOR_ADD
INTEGER N, I, CHUNKSIZE, CHUNK PARAMETER (N=1000)
PARAMETER (CHUNKSIZE=100) REAL A(N), B(N), C(N)
! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO
CHUNK = CHUNKSIZE
!$OMP PARALLEL DO
!$OMP& SHARED(A,B,C,CHUNK) PRIVATE(I) !$OMP& SCHEDULE(STATIC,CHUNK)
DO I = 1, N
C(I) = A(I) + B(I) ENDDO
!$OMP END PARALLEL DO
END
例5:LOCK功能的实现与!$OMP CRITICAL功能实现达到相同的输出效果 program Main use omp_lib implicit none
integer(kind = OMP_lock_kind) :: lck integer(kind = OMP_integer_kind) :: ID
integer(kind = OMP_integer_kind) :: number_of_threads !call OMP_set_num_threads(number_of_threads) call OMP_init_lock(lck)
!$OMP PARALLEL SHARED(LCK) PRIVATE(ID) ID = OMP_get_thread_num() call OMP_set_lock(lck)
write(*,*) \, ID call OMP_unset_lock(lck) !$OMP END PARALLEL call OMP_destroy_lock(lck) end program Main
program Main use omp_lib implicit none
integer(kind = OMP_integer_kind) :: lck integer(kind = OMP_integer_kind) :: ID
!$OMP PARALLEL SHARED(LCK) PRIVATE(ID) ID = OMP_get_thread_num() !$OMP CRITICAL
write(*,*) \, ID !$OMP END CRITICAL !$OMP END PARALLEL end program Main
例6、lock举例 module data_types
use omp_lib, only: OMP_nest_lock_kind implicit none type number integer :: n
integer(OMP_nest_lock_kind) :: lck end type number
end module data_types
!---------------------------------------------------------! program Main use omp_lib use data_types implicit none type(number) :: x
integer(OMP_nest_lock_kind) :: lck x%n = 0
call OMP_init_lock(x%lck)
!$OMP PARALLEL SECTIONS SHARED(x) !$OMP SECTION call add(x,20) !$OMP SECTION call substract(x,10)
!$OMP END PARALLEL SECTIONS call OMP_destroy_lock(lck) end program Main
!---------------------------------------------------------! subroutine add(x,d) use omp_lib use data_types implicit none type(number) :: x integer :: d
call OMP_set_nest_lock(x%lck) x%n = x%n + d
call OMP_unset_nest_lock(x%lck) end subroutine add
!----------------------------------------------------------! subroutine substract(x,d) use omp_lib use data_types implicit none type(number) :: x integer :: d
call OMP_set_nest_lock(x%lck) call add(x,-d)
call OMP_unset_nest_lock(x%lck) end subroutine substract
例子 测试LASTPRIVATE的功能 program main
!$OMP PARALLEL DO PRIVATE(i) LASTPRIVATE(a) do i = 1, 1000 a = i enddo
!$OMP END PARALLEL DO write(*,*) a end
例子 测试 FIRSTPRIVATE(a) 的功能 program main implicit none integer a,i a=100
!$OMP PARALLEL FIRSTPRIVATE(a) PRIVATE(i) !$OMP DO REDUCTION(+:a) do i = 1, 4 a = a + i enddo
!$OMP END DO write(*,*) a
!$OMP END PARALLEL write(*,*) a End
例子:测试!$OMP DO REDUCTION(+:a)
program main
implicit none
integer a,i,CHUNKSIZE,CHUNK
PARAMETER (CHUNKSIZE=2)
CHUNK = CHUNKSIZE
a=100
!$OMP PARALLEL FIRSTPRIVATE(a) PRIVATE(i)
!$OMP DO REDUCTION(+:a) do i = 1, 5 a = a + i enddo
!$OMP END DO
write(*,*) a
!$OMP END PARALLEL
write(*,*) a end
正在阅读:
OPEN - MPI例子02-26
生命的滋味作文800字07-11
品味学习真乐趣作文600字06-29
欢乐的六一作文350字07-05
由窗外想到的作文500字06-30
哲学术语的翻译原则05-18
春天到了作文400字07-14
涉外钻井英语汉语教材04-27
生命作文700字06-30
- 教师招聘考试真题(中学数学科目)及答案 - 图文
- 读《光辉的旗帜》有感
- 学生会副部长竞选讲稿
- 江苏省石油化工码头企业安全生产标准化考评细则 - 图文
- 2016尔雅 民俗资源与旅游 期末考试答案 整理
- 九年级华师大《二次函数》全章教案
- 生化作业6
- 串口资料
- 2014北大附中初三数学二模复习策略
- 曼尼希反应
- 努肉孜节2012
- 卫生部关于印发《关于卫生监督体制改革实 施的若干意见》和《关
- 《生活中的线条》教学设计
- 广告学概论讲义 - 图文
- VS1真空断路器原理图及两种VS1真空断路器的介绍
- 晨读倡议书 - 致全国青年朋友
- 建筑物理复习(建筑热工学) - 图文
- 高级消防与精通急救题库 doc
- YJK软件的优化设计
- 小学生必背古诗100首(带拼音)
- 例子
- OPEN
- MPI
- 高二化学寒假作业 选修五 预习学案
- 《医学影像物理学》1-9章课后习题答案
- 中小学教师专业技术职务任职资格评审材料
- 大班教案《牙膏舞会》(音乐)
- 中队活动记录四年级第二学期
- 关于加强专业技术职务任职资格评审委员会建设工作的通知(津人社
- 正宁人民医院可研报告定稿
- 通州区2018届高三二模化学试题及答案(官方版)
- 独家购买权合同(用于VIE结构)
- 华东理工管理会计网上作业答案
- 中学生篮球运动损伤的原因分析及预防
- 世界史总复习
- TBB(F)-10(6)型高压并联电容器成套装置 - 图文
- CATIA曲面造型命令
- 中国文化概论复习笔记
- 债之关系的结构分析(王泽鉴)
- 最新-申报省级先进班集体事迹材料 精品
- 美人山水库除险加固工程监理报告
- 安全类标准化试题word版
- Motorola的高级数据采集器命名