Re: [問題] 效率

看板Fortran作者 (近在眼前)時間11年前 (2013/11/11 21:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/7 (看更多)
※ 引述《DMFC (sole)》之銘言: : 貼一部份程式碼,fortran90語法 do i=1,nx ; do j=1,ny ; do k=1,nz csum=sum(coeff(1:np)*cdexp)/Vol csumout(i,j,k)=csum end do ; end do ; end do sum(coeff(1:np)*cdexp) 請問這邊是要將整個 coeff(1:23000) 乘上 cdexp 再做 sum 嗎? 會這麼問是因為我不確定你未貼上程式碼部分是否還有 np 的 loop 如果沒有 np loop, 同時 cdexp 只是個常數,不會隨 nx,ny,nz 變動 那可以試著將這部份移出迴圈外, 這樣省得每次 loop 都要重算一遍 如果有 np loop, 那請無視我的想法 另外輸出的部份 do i=1,nx do j=1,ny do k=1,nz csumout(i,j,k)=sum(coeff(1:np)*cdexp)/Vol end do end do end do do k=1,nz do j=1,ny do i=1,nx csumout(i,j,k)=sum(coeff(1:np)*cdexp)/Vol end do end do end do 兩者差異 請參考彭國倫先生的fortran工具書 應該是在陣列章節中的多維陣列那邊 沒記錯的話 是跟記憶體存放資料方式有關 這邊變動我想絕對有幫助 : 請問一下 : 由於資料量不算小 : 目前測試 nx=ny=nz=47, np=23000 : 上面貼的部份是需要最久計算的部份 : 普通執行需要約兩分鐘(測試用參數) : 若是把第三行去掉 : 則可以10秒內結束 : 可是我就是要把這個資料輸出 : 才用了一個三維 ARRAY 把資料存起來 : 然後離開這個 LOOP 後再寫出 : 如果把 WRITE 寫在 LOOP 內 : 則情況會更糟 : 請問有什麼方法可以處理這窘境 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.247.64 ※ 編輯: Yagyu 來自: 59.115.247.64 (11/11 21:29)
文章代碼(AID): #1IWDj9FE (Fortran)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
4
11年前, 11/09
以下文章回應了本文
3
28
完整討論串 (本文為第 3 之 7 篇):
1
4
11年前, 11/09
0
8
3
28
11年前, 11/13
0
11
0
3
文章代碼(AID): #1IWDj9FE (Fortran)