[問題] openMP
模式想要利用openMP平行化
以下剪一小段副程式的呼叫,可以正常執行
加入!$OMP DO以後 (以下綠色字體部分)
編譯沒有bug 但程式卻也沒辦法跑
想問一下是哪邊設定或邏輯上發生錯誤?
有想過是不是common或是哪邊變數平行化後會產生衝突
但也不知該從何下手
懇請板友們指教了,謝謝!!
以下是程式碼
--------------------------
program adi
implicit real*8(a-h,o-z)
parameter (max1=200000,max2=20000)
dimension a9(max1),nbx9(max2)
common /duv19/ dx9,dy9,m9,mm9(10),n19,n29
common /duv191/ hr9(10),lo9,nb9,iaa9,idisch9(10)
common /duv29/ nx9,ny9,dt9,se9(10),idtimed9(10)
common /duv49/ ic19(10),ic29(10),jc19(10),icover9(10),lmm9(10)
common /duv59/xxk9(10),znn9(50000,10),xnn9(500,500,10)
common /duv591/ tmin9(10),indey9(10),tmax9(10),timed9(10)
common /duv79/ ihr9(10),iarea9,iwater9(10),nww9(10)
common /duv89/ ri9(10),sec9(10),rq9(10),rt9(10),crit9(10)
common /duv109/ ind9(10),ndx19,ndy19,mts9
common /duv119/ nv9,nu9,nv19(10),nv29(10),nu19(10)
common /duv129/ kpum9(10),np9(10),ibc9(10),wpump9(10),nu29(10)
common /stage9/ std9(100,100,10)
common /grp/ ign,ifd
character ch29*30,put9*30,stf9*30,wrf9*30,trf9*30,da01*30,da02*30
!$OMP PARALLEL
!$OMP DO
do 399 i=1,2
call inp19(i,max1,max2,nn19,nn29,n39,n49,n59,n69,n79,n89,n99,n109,
+ n119,nm19,nm29,nm39,nm49,nm59,nm69,nm79,nm89,nm99,nm109,nm119)
close(138)
close(120)
close(135)
399 continue
!$OMP END DO
!$OMP END PARALLEL
stop
end
c------------------------------------------------
subroutine inp19(i,max1,max2,nn19,nn29,n39,n49,n59,n69,n79,n89,n99
+,n109,n119,nm19,nm29,nm39,nm49,nm59,nm69,nm79,nm89,nm99,nm109
+,nm119)
implicit real*8(a-h,o-z)
common /duv19/ dx9,dy9,m9,mm9(10),n19,n29
common /duv191/ hr9(10),lo9,nb9,iaa9,idisch9(10)
common /duv29/ nx9,ny9,dt9,se9(10),idtimed9(10)
common /duv49/ ic19(10),ic29(10),jc19(10),icover9(10),lmm9(10)
common /duv59/xxk9(10),znn9(50000,10),xnn9(500,500,10)
common /duv591/ tmin9(10),indey9(10),tmax9(10),timed9(10)
common /duv79/ ihr9(10),iarea9,iwater9(10),nww9(10)
common /duv89/ ri9(10),sec9(10),rq9(10),rt9(10),crit9(10)
common /duv109/ ind9(10),ndx19,ndy19,mts9
common /duv119/ nv9,nu9,nv19(10),nv29(10),nu19(10)
common /duv129/ kpum9(10),np9(10),ibc9(10),wpump9(10),nu29(10)
common /stage9/ std9(100,100,10)
common /grp/ ign,ifd
character ch29*30,put9*30,stf9*30,wrf9*30,trf9*30,da01*30,da02*30
da01='g'//char(i/10+48)//char(mod(i,10)+48)//'/'//'run1.dat'
da02='g'//char(i/10+48)//char(mod(i,10)+48)//'/'//'check1.out'
open(138,file=da01,status='old')
read(138,'(a30)') put9
open(120,file=put9,status='old')
read(138,'(a30)') ch29
read(138,'(a30)') stf9
read(138,'(a30)') wrf9
read(138,'(a30)') trf9
open(135,file=da02,status='unknown')
write(*,'(''input the dike overflow or break number :''\)')
read(138,'(i7)') nb9
write(*,*) nb9
read(120,'(/3f6.1,7i8)') dx9,dy9,hr9(i),m9,mm9(i),n19,n29
+ ,lo9,iaa9,idisch9(i)
read(120,'(/2i7,2f15.3,i7)') nx9,ny9,dt9,se9(i),idtimed9(i)
read(120,'(/5i7)') ic19(i),ic29(i),jc19(i),icover9(i),lmm9(i)
read(120,'(/6i7)') nv9,nu9,nv19(i),nv29(i),nu19(i),nu29(i)
read(120,'(/5f10.4)') ri9(i),sec9(i),rq9(i),crit9(i)
read(120,'(/3i7)')ind9(i),ndx19,ndy19
read(120,'(/f10.4,i7)') xxk9(i),indey9(i)
read(120,'(/4i7)') iwater9(i),nww9(i),ihr9(i),iarea9
read(120,'(/3i7,f10.2)') kpum9(i),np9(i),ibc9(i),wpump9(i)
c********************
if(nn19 .eq. 0) then
nn19=1
nn29=nn19+(nx9)*(ny9+2)*ign
n39=nn29+(nx9+3)*(ny9+3)*ign
n49=n39+(2*(nx9+1)+1)*(2*(ny9+1)+1)*ign
n59=n49+(2*(nx9+1)+1)*(2*(ny9+1)+1)*ign
n69=n59+(nx9)*(ny9)*ign
n79=n69+(m9+1)*nb9*ign
n89=n79+(m9+1)*nb9*ign
n99=n89+(nx9*ny9)*ign
n109=n99+(nx9+2)*(ny9+2)*ign
n119=n109+(m9+1)*(iarea9)*ign
n129=n119+nx9*ny9*ign
nm19=1
nm29=nm19+2*iarea9*ign
nm39=nm29+nb9*2*ign
nm49=nm39+ndx19*2*ign
nm59=nm49+ndy19*2*ign
nm69=nm59+nv9*2*ign
nm79=nm69+nu9*2*ign
nm89=nm79+ndx19*ign
nm99=nm89+ndy19*ign
nm109=nm99+nb9*7*ign
nm119=nm109+nv9*ign
nm129=nm119+nu9*ign
if((n129.ge.max1).or.(nm129.ge.max2))then
write(*,444) n129,nm129
print*,'please check the dynamic storage adress,
+ it must exceed 1500000 adresses !'
stop
else
write(*,444) n129,nm129
444 format(1x,'n129= ',i10,' nm129 = ',i6)
endif
endif
return
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.63.161
※ 編輯: ja000123 來自: 140.112.63.161 (02/07 15:30)
推
02/07 16:47, , 1F
02/07 16:47, 1F
debug編譯OK,但程式執行時跑到平行的部分即停在那邊不動 (沒出現錯誤訊息)
抱歉自己Fortran算是自學,有些術語比較不熟悉 描述上可能比較沒這麼準確
→
02/07 16:48, , 2F
02/07 16:48, 2F
好,未平行時程式可以跑倒沒注意這些變數沒標示清楚,我再補上去 謝謝
※ 編輯: ja000123 來自: 36.227.25.90 (02/07 23:04)
→
02/08 00:30, , 3F
02/08 00:30, 3F
→
02/08 00:30, , 4F
02/08 00:30, 4F
→
02/08 00:30, , 5F
02/08 00:30, 5F
→
02/08 00:37, , 6F
02/08 00:37, 6F
→
02/08 00:38, , 7F
02/08 00:38, 7F
→
02/08 00:49, , 8F
02/08 00:49, 8F
→
02/08 01:59, , 9F
02/08 01:59, 9F
嗯嗯,其實程式中有其他副程式有用到寫入 XD
想請教這種問題該從哪裡下手?
我曾對character的變數PRIVATE 但還是有問題
!$OMP PARALLEL PRIVATE (da01,da02,put9,ch29,stf9,wrf9,trf9,nb9)
想問是我這樣寫有用錯,還是有其他的變數需要納入? 謝謝了!
※ 編輯: ja000123 來自: 36.227.30.243 (02/08 21:33)
→
02/09 01:05, , 10F
02/09 01:05, 10F
→
02/09 01:07, , 11F
02/09 01:07, 11F
→
02/09 01:13, , 12F
02/09 01:13, 12F
→
02/09 01:13, , 13F
02/09 01:13, 13F
程式是讀取路徑不同子資料夾內同樣名稱的檔案,所以是屬於後者嗎?
→
02/09 01:15, , 14F
02/09 01:15, 14F
→
02/09 01:25, , 15F
02/09 01:25, 15F
→
02/09 01:27, , 16F
02/09 01:27, 16F
→
02/09 01:30, , 17F
02/09 01:30, 17F
→
02/09 01:45, , 18F
02/09 01:45, 18F
→
02/09 01:49, , 19F
02/09 01:49, 19F
→
02/09 01:51, , 20F
02/09 01:51, 20F
→
02/09 01:51, , 21F
02/09 01:51, 21F
→
02/09 02:07, , 22F
02/09 02:07, 22F
→
02/09 02:08, , 23F
02/09 02:08, 23F
→
02/09 02:09, , 24F
02/09 02:09, 24F
變數的屬性我有看過相關資料教學,但可能學的不精,仍無法靈活應用
就像PRIVATE自己也是亂用,做了很多無意義的錯誤方法
因此想冒昧請教一下,如果就上面例子來說,
您會針對那些細部做修改,有哪些變數或部分一定有問題的?
希望讓我有個正確的方向去修改,而不是一直往錯的地方去鑽研
最後謝謝你肯花時間回答我問題
之後幾天過年,我也很不好意思再麻煩你
這次問完後,年假期間我就針對您的指教回覆自己研究摸索吧
非常感謝您!也祝你新年快樂囉!!
※ 編輯: ja000123 來自: 36.227.28.81 (02/09 12:50)
→
02/09 18:35, , 25F
02/09 18:35, 25F
→
02/09 18:37, , 26F
02/09 18:37, 26F
→
02/09 18:38, , 27F
02/09 18:38, 27F
→
02/09 18:40, , 28F
02/09 18:40, 28F
→
02/09 18:41, , 29F
02/09 18:41, 29F
→
02/09 18:43, , 30F
02/09 18:43, 30F
→
02/09 18:44, , 31F
02/09 18:44, 31F
→
02/09 18:47, , 32F
02/09 18:47, 32F
→
02/09 18:49, , 33F
02/09 18:49, 33F
→
02/09 18:50, , 34F
02/09 18:50, 34F
→
02/09 18:51, , 35F
02/09 18:51, 35F
→
02/09 18:52, , 36F
02/09 18:52, 36F
→
02/09 18:55, , 37F
02/09 18:55, 37F
→
02/09 18:55, , 38F
02/09 18:55, 38F
實在是非常感謝您!!!解決了我不少問題 修正了我不少錯誤
雖然可能還是會碰壁碰到問題,但我會往你所講的這些方向去研究看看
謝謝囉!!!
※ 編輯: ja000123 來自: 36.227.29.241 (02/10 00:08)
→
02/10 00:43, , 39F
02/10 00:43, 39F
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章