[問題] openMP

看板Fortran作者 (Recluse)時間11年前 (2013/03/20 00:52), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串2/2 (看更多)
程式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)

03/20 10:49, , 1F
手動拆B迴圈成兩部分 再用SECTION包成普通迴圈
03/20 10:49, 1F

03/20 10:50, , 2F
如果A的運算量不大 就不要讓A平行
03/20 10:50, 2F
手動拆B變成section我試過是可以執行 但考量到B可能有兩三個甚至八核同時可以跑六七筆資料,要複製成這麼多次感覺有點冗長 A的部分他運算時間跟B差不多,計畫平行的架構有包括將他們平行 所以除了拆迴圈外,有無其他平行的方法呢? 謝謝!

03/20 11:52, , 3F
可以考慮將A放到parallel do裡面,用if指定i等於某值時
03/20 11:52, 3F

03/20 11:53, , 4F
做A,其餘執行B,再搭配schedule動態分配工作給各執行
03/20 11:53, 4F

03/20 11:53, , 5F
緒。
03/20 11:53, 5F
喔喔,我也有想過將A放進迴圈,g大一下就點出了解決的辦法!! 我再來改看看,實在是太感謝拉!!!!!!!!!! ※ 編輯: ja000123 來自: 140.112.63.161 (03/20 12:20)
文章代碼(AID): #1HI9Uu_y (Fortran)
討論串 (同標題文章)
文章代碼(AID): #1HI9Uu_y (Fortran)