Re: [問題] 效率

作者: DMFC (DMFC)   2013-11-11 20:15:23
→ biggun:卡在I/O,把程式丟到ramdisk裡跑看看,當然ramdisk要夠大
不好意思~我不是資工相關科系
也許概念上有點問題
我好奇的是
我只不過是把上一行 csum=sum(coeff(1:np)*cdexp)/Vol
所得到的結果 csum 存入一個三維矩陣 csumout(i,j,k)
為什麼會跟 I/O 有關呢
(此時所有資料不是都還乖乖的待在記憶體內嬤)
不是只有在 write 時
把資料寫出才會扯到硬碟 I/O ?
還是這裡指的 I/O 並非我想的硬碟 I/O?
推 charlesdc:其實還有一種可能 你換一台ram很大的電腦跑看看
→ charlesdc:有可能是你電腦的ram不夠用
→ charlesdc:不然就是那個三維的矩陣透過動態方式建立在釋放看看
我是用動態方式 (allocate)
且~如果是 ram 不夠
我想我程式應該是要直接死掉
(走到 SWAP 的境界應該會更更更更慢吧)
再者
我使用的機器是一台有 12G RAM 的 LINUX OS 環境的機器
這個小小的程式 memory 吃不到 1% ...
所以不應當會是 memory 相關問題吧 (我猜)
※ 引述《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
: 請問一下
: 由於資料量不算小
: 目前測試 nx=ny=nz=47, np=23000
: 上面貼的部份是需要最久計算的部份
: 普通執行需要約兩分鐘(測試用參數)
: 若是把第三行去掉
: 則可以10秒內結束
: 可是我就是要把這個資料輸出
: 才用了一個三維 ARRAY 把資料存起來
: 然後離開這個 LOOP 後再寫出
: 如果把 WRITE 寫在 LOOP 內
: 則情況會更糟
: 請問有什麼方法可以處理這窘境
作者: charlesdc (MoOn)   2012-01-11 21:28:00
ram還是有機會的 你的電腦12G!=你的程式就能跑到這麼多你再查看看你的編譯器有沒有上限可以設定至於記憶體不夠不一定會直接死掉有遇過的case是他會去抓虛擬記憶體儲存所以很慢
作者: DMFC (DMFC)   2012-01-12 00:22:00
感謝你的回應~但我程式連12G的1%都吃不到所以連 SWAP 的機會都沒有我這裡講的SWAP就是你說的虛擬記憶體且我有確認過~的的確確沒有吃到 SWAP

Links booklink

Contact Us: admin [ a t ] ucptt.com