看板 Fortran 關於我們 聯絡資訊
程式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)
latinboy: 手動拆B迴圈成兩部分 再用SECTION包成普通迴圈 03/20 10:49
latinboy: 如果A的運算量不大 就不要讓A平行 03/20 10:50
手動拆B變成section我試過是可以執行 但考量到B可能有兩三個甚至八核同時可以跑六七筆資料,要複製成這麼多次感覺有點冗長 A的部分他運算時間跟B差不多,計畫平行的架構有包括將他們平行 所以除了拆迴圈外,有無其他平行的方法呢? 謝謝!
gilocustom:可以考慮將A放到parallel do裡面,用if指定i等於某值時 03/20 11:52
gilocustom:做A,其餘執行B,再搭配schedule動態分配工作給各執行 03/20 11:53
gilocustom:緒。 03/20 11:53
喔喔,我也有想過將A放進迴圈,g大一下就點出了解決的辦法!! 我再來改看看,實在是太感謝拉!!!!!!!!!! ※ 編輯: ja000123 來自: 140.112.63.161 (03/20 12:20)