→ 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 內
: 則情況會更糟
: 請問有什麼方法可以處理這窘境