作者ja000123 (Recluse)
站内Fortran
标题[问题] openMP 平行section&do
时间Wed Mar 20 00:52:04 2013
程式B利用平行do的方式平行演算两笔不同的资料
而程式A是另外的独立演算
如下所示:
--------------
程式A
!$OMP PARALLEL DO
do i=1.2
程式B
!$OMP END PARALLEL DO
--------------
而我想要让程式A与B回圈演算同步
交由三个核心平行演算
想请教在不拆掉回圈为前提 (因为其实回圈的i是变数,预设为电脑最大核心数减一)
要如何修改才能他们能够同步演算呢?
我的尝试过如下的一些类似写法,可是都失败
感觉应该可以简单写出来,但我却也没办法弄出来
因此想在此请教一下板上的高手
麻烦指教哪里出问题及该怎麽正确的修改
非常感谢!
!$OMP PARALLEL
!$OMP SECTIONS
!$OMP SECTION
程式A
!$OMP SECTION
!$OMP PARALLEL DO
do i=1.2
程式B
!$OMP END PARALLEL DO
!$OMP END SECTIONS
!$OMP END PARALLEL
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.218.123
※ 编辑: ja000123 来自: 140.112.218.123 (03/20 01:06)
1F:推 latinboy: 手动拆B回圈成两部分 再用SECTION包成普通回圈 03/20 10:49
2F:→ latinboy: 如果A的运算量不大 就不要让A平行 03/20 10:50
手动拆B变成section我试过是可以执行
但考量到B可能有两三个甚至八核同时可以跑六七笔资料,要复制成这麽多次感觉有点冗长
A的部分他运算时间跟B差不多,计画平行的架构有包括将他们平行
所以除了拆回圈外,有无其他平行的方法呢? 谢谢!
3F:推 gilocustom:可以考虑将A放到parallel do里面,用if指定i等於某值时 03/20 11:52
4F:→ gilocustom:做A,其余执行B,再搭配schedule动态分配工作给各执行 03/20 11:53
5F:→ gilocustom:绪。 03/20 11:53
喔喔,我也有想过将A放进回圈,g大一下就点出了解决的办法!!
我再来改看看,实在是太感谢拉!!!!!!!!!!
※ 编辑: ja000123 来自: 140.112.63.161 (03/20 12:20)