Re: [問題] 效率

作者: Yagyu (miss u)   2013-11-11 21:27:35
※ 引述《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 內
: 則情況會更糟
: 請問有什麼方法可以處理這窘境

Links booklink

Contact Us: admin [ a t ] ucptt.com