计算化学公社

 找回密码 Forget password
 注册 Register
Views: 4593|回复 Reply: 8
打印 Print 上一主题 Last thread 下一主题 Next thread

[并行运算] fortran调用子程序的并行调用问题求解答

[复制链接 Copy URL]

132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
请教一下论坛各位大佬
fortran中调用子程序能不能实现并行调用呢?
比如我有一段代码
do i = 1, 100
call program1
call program2
enddo

call program3

program1和program2都是独立的子程序,各自运算不同的东西。然后我想要program1和program2同时执行,然后都执行完之后再执行program3.有没有什么操作方式?
想用这种方式来实现数据的存储和运算的并行执行。program1是用来读取数据,program2是用来计算上一步program1读取的数据。


132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

9#
 楼主 Author| 发表于 Post on 2019-12-10 16:35:48 | 只看该作者 Only view this author
sobereva 发表于 2019-8-3 00:28
This code indicates that any of the tasks Work1, Work2 + Work3 and Work4 may
run in parallel, b ...

社长请问一下,我想实现以下功能, 让test1和test2用section并行起来,然后同时让test1和test2内部也可以进行多核并行。section里面有什么相关设置可以实现这种功能么?我目前这种代码结构上,发现test1和test2内部的子程序,即使是利用了openmp parallel do,也只能单核运算了。
====================
!$omp parallel sections
!$omp section
call test1
!$omp section
call test2
!$omp end parallel sections

132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

8#
 楼主 Author| 发表于 Post on 2019-8-9 16:18:40 | 只看该作者 Only view this author
本帖最后由 didi_dudu 于 2019-8-10 10:47 编辑
sobereva 发表于 2019-8-3 00:28
This code indicates that any of the tasks Work1, Work2 + Work3 and Work4 may
run in parallel, b ...

发现问题出在我没在程序最前面加上      include 'omp_lib.h'。 用ifort编译时,不加是没问题的,用pgf90, 不加include,跑sections就不行了。但是omp parallel do 还是可以执行。。。。
============================
!$omp sections
!$omp section
                do i = 1, 200
                  write(6,*)'i', i
                enddo
!$omp section
                do j = 1, 200
                  write(6,*)'j', j
                enddo
!$omp end sections
社长,我用fortran尝试这样写了一段,我理解的这样输出来应该是i和j混合排列的,然而实际输出来的结果还是先打完i再打的j,能不能帮我看看这段代码有什么问题,谢谢!

5万

帖子

99

威望

5万

eV
积分
112353

管理员

公社社长

7#
发表于 Post on 2019-8-3 00:28:00 | 只看该作者 Only view this author
#pragma omp sections
{
{ Work1(); }
#pragma omp section
{ Work2();
Work3(); }
#pragma omp section
{ Work4(); }
}


This code indicates that any of the tasks Work1, Work2 + Work3 and Work4 may
run in parallel, but that Work2 and Work3 must be run in sequence. Each work
is done exactly once.

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
didi_dudu + 5 感谢社长!!!!!

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

516

帖子

1

威望

5052

eV
积分
5588

Level 6 (一方通行)

6#
发表于 Post on 2019-8-2 15:46:04 | 只看该作者 Only view this author
didi_dudu 发表于 2019-8-2 15:22
我说的是2需要的是上一轮1读取的数据。呃我可以换一个问题,就是两个子程序program1和program2完全独立, ...

可以,最简单的方式就是用openmp的sections

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
didi_dudu + 5 谢谢!!!!!!!!!

查看全部评分 View all ratings

132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

5#
 楼主 Author| 发表于 Post on 2019-8-2 15:24:04 | 只看该作者 Only view this author
万里云 发表于 2019-8-2 11:49
这个没法并行。不读完数据怎么处理?

有个do循环嘛,比如运行到第n轮的时候,第n轮的program2会用到第n-1轮的program1从硬盘读取进内存的数据

132

帖子

0

威望

1025

eV
积分
1157

Level 4 (黑子)

4#
 楼主 Author| 发表于 Post on 2019-8-2 15:22:41 | 只看该作者 Only view this author
niobium 发表于 2019-8-2 12:54
你又说两个程序是独立的,又说2需要1的数据。

像你说的想同时运行1和2,有一个简单的判断方法,如果先1 ...

我说的是2需要的是上一轮1读取的数据。呃我可以换一个问题,就是两个子程序program1和program2完全独立,那能不能在fortran中让1和2并行呢?
因为我有两个程序,1个是从硬盘读取数据A,对cpu要求不高,2是对内存里已经有的数据B做运算。1和2并行是不是效率就会高一点?

516

帖子

1

威望

5052

eV
积分
5588

Level 6 (一方通行)

3#
发表于 Post on 2019-8-2 12:54:11 | 只看该作者 Only view this author
你又说两个程序是独立的,又说2需要1的数据。

像你说的想同时运行1和2,有一个简单的判断方法,如果先1后2和先2后1结果相同,那就可能可以并行,否则不能并行。

403

帖子

4

威望

2874

eV
积分
3357

Level 5 (御坂)

2#
发表于 Post on 2019-8-2 11:49:28 | 只看该作者 Only view this author
rogram1是用来读取数据,program2是用来计算上一步program1读取的数据。


这个没法并行。不读完数据怎么处理?

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 19:31 , Processed in 0.193425 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list