作者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)