Fortran Coder

查看: 6463|回复: 9
打印 上一主题 下一主题

[并行] 小白求指点,如何使用OpenMP

[复制链接]

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
楼主
发表于 2014-12-16 10:25:29 | 显示全部楼层
两个问题:
1、OMP并行,检测耗时不用 CPU_time,用 OMP_get_wtime

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
沙发
发表于 2014-12-16 10:29:20 | 显示全部楼层
2、所有并行语句都必须包含在并行域中,否则视为串行。
!$OMP PARALLEL DO clause1 clause2 ...
...
!$OMP END PARALLEL DO

这里有中文资料
http://fcode.cn/resource_ebook-24-1.html

评分

参与人数 1F 币 +12 贡献 +12 收起 理由
fcode + 12 + 12 很给力!

查看全部评分

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
板凳
发表于 2014-12-17 11:26:46 | 显示全部楼层
1、并行循环有两种表示,一是将并行和循环分开,二是联合表示;
!$OMP PARALLEL
!$OMP PARALLEL DO
...第1种
!$OMP END  DO
!$OMP END PARALLEL

!$OMP PARALLEL DO
...第二种
!$OMP END PARALLEL DO

2、并行处理不好可能比串行更耗时;
3、简单理解,cpu_time是所有核心耗时的总和,而OMP_get_wtime是程序运行的真实时间。n个核并行时,前者大致是后者的n倍。

1.jpg (69.53 KB, 下载次数: 185)

1.jpg

2.png (40.22 KB, 下载次数: 178)

2.png

3.png (36.14 KB, 下载次数: 179)

3.png

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2014-12-17 11:29:27 | 显示全部楼层
4、对比效率时,需在release模式下,并关闭优化。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
5#
发表于 2014-12-18 17:54:41 | 显示全部楼层
1、debug模式下,会执行许多额外的调试代码,这些代码与程序任务本身无关;
2、编译器优化是非线性的(也可理解为不确定, 例如循环400次和200次的时间之比不一定是2倍),同样难以反映加速比(串行运行时间/并行运行时间)。
因此对比需在release模式下,并关闭优化。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 09:58

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表