Fortran 板


LINE

模式想要利用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)
1F:推 gilocustom:(1)什麽叫做"没办法跑"? 02/07 16:47
debug编译OK,但程式执行时跑到平行的部分即停在那边不动 (没出现错误讯息) 抱歉自己Fortran算是自学,有些术语比较不熟悉 描述上可能比较没这麽准确
2F:→ gilocustom:(2)建议把平行区块内的各个变数的属性都标明。 02/07 16:48
好,未平行时程式可以跑倒没注意这些变数没标示清楚,我再补上去 谢谢 ※ 编辑: ja000123 来自: 36.227.25.90 (02/07 23:04)
3F:→ gilocustom:你的怀疑是合理的,请参考以下连结: 02/08 00:30
5F:→ gilocustom:PRIVATE 02/08 00:30
6F:→ gilocustom:再者,你这样写会导致不同的执行绪同时读/写/开/关同个 02/08 00:37
7F:→ gilocustom:档案,迟早触发race condition。 02/08 00:38
8F:→ gilocustom:喔看错,可能会造成困扰的是(只)同时开/关同个档案。 02/08 00:49
9F:→ gilocustom:又错...同时读也会造成问题。 02/08 01:59
嗯嗯,其实程式中有其他副程式有用到写入 XD 想请教这种问题该从哪里下手? 我曾对character的变数PRIVATE 但还是有问题 !$OMP PARALLEL PRIVATE (da01,da02,put9,ch29,stf9,wrf9,trf9,nb9) 想问是我这样写有用错,还是有其他的变数需要纳入? 谢谢了! ※ 编辑: ja000123 来自: 36.227.30.243 (02/08 21:33)
10F:→ gilocustom:如果只是同时操作同一编号的不同名称档案,只需要改成 02/09 01:05
11F:→ gilocustom:各执行绪用不同的编号即可。如果是操作同一名称的档案, 02/09 01:07
12F:→ gilocustom:可以考虑为各执行绪创建不同名称的副本(复制或连结), 02/09 01:13
13F:→ gilocustom:视需要最後再删除或合并。 02/09 01:13
程式是读取路径不同子资料夹内同样名称的档案,所以是属於後者吗?
14F:→ gilocustom:也可以考虑每到操作档案时限制只有一个执行绪可用。 02/09 01:15
15F:→ gilocustom:话说回来,除非你用的储存装置够快,快到可以轻松负荷 02/09 01:25
16F:→ gilocustom:多个执行绪同时读写档案,否则读写就效能来说没有必要 02/09 01:27
17F:→ gilocustom:平行化,甚至可能会有反效果。 02/09 01:30
18F:→ gilocustom:你需要先了解变数的属性有哪些以及各自的用途,然後再 02/09 01:45
19F:→ gilocustom:仔细审视程式码、依照各个变数的需求赋予不同的属性, 02/09 01:49
20F:→ gilocustom:譬如我上面给的连结就是在说明其中一种你的程式码可能 02/09 01:51
21F:→ gilocustom:会需要用到的变数属性。 02/09 01:51
22F:→ gilocustom:da01等变数并不是全域的,而且也不是从主程式传递至 02/09 02:07
23F:→ gilocustom:副程式,所以在主程式令其为PRIVATE是没有意义的,只会 02/09 02:08
24F:→ gilocustom:多占用一点点记忆体。 02/09 02:09
变数的属性我有看过相关资料教学,但可能学的不精,仍无法灵活应用 就像PRIVATE自己也是乱用,做了很多无意义的错误方法 因此想冒昧请教一下,如果就上面例子来说, 您会针对那些细部做修改,有哪些变数或部分一定有问题的? 希望让我有个正确的方向去修改,而不是一直往错的地方去钻研 最後谢谢你肯花时间回答我问题 之後几天过年,我也很不好意思再麻烦你 这次问完後,年假期间我就针对您的指教回覆自己研究摸索吧 非常感谢您!也祝你新年快乐罗!! ※ 编辑: ja000123 来自: 36.227.28.81 (02/09 12:50)
25F:→ gilocustom:不同路径就是不同档案,除非你是同档案连结到不同路径. 02/09 18:35
26F:→ gilocustom:主程式的那些字串变数(ch29等)和副程式内同名的变数 02/09 18:37
27F:→ gilocustom:根本没有关系所以不必给属性,而其实在主程式中根本 02/09 18:38
28F:→ gilocustom:用不到所以甚至不需要宣告。副程式的那些字串就是另外 02/09 18:40
29F:→ gilocustom:一个世界了所以也不用动。 02/09 18:41
30F:→ gilocustom:common的变数如要私有化需要使用THREADPRIVATE属性。 02/09 18:43
31F:→ gilocustom:max1与max2都是常数所以不需要也不可以给属性。 02/09 18:44
32F:→ gilocustom:回圈用的引数i当然要私有化所以是PRIVATE。 02/09 18:47
33F:→ gilocustom:inp19的其他变数(nn19~nm119)如果有需要私有化那就私有 02/09 18:49
34F:→ gilocustom:化,不过主程式乍看根本用不到这些变数所以乾脆连传都 02/09 18:50
35F:→ gilocustom:不要传了,直接省去就不用考虑要用哪种私有化的属性, 02/09 18:51
36F:→ gilocustom:不然你就还是要视需求慎择属性。 02/09 18:52
37F:→ gilocustom:最後就是档案编号,再加上i就可以简单避免重复,或者 02/09 18:55
38F:→ gilocustom:加上执行绪的编号也可以。 02/09 18:55
实在是非常感谢您!!!解决了我不少问题 修正了我不少错误 虽然可能还是会碰壁碰到问题,但我会往你所讲的这些方向去研究看看 谢谢罗!!! ※ 编辑: ja000123 来自: 36.227.29.241 (02/10 00:08)
39F:→ Cypresslin:楼上平行魔人 02/10 00:43







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP