Re: [問題] 效率

看板Fortran作者 (sole)時間11年前 (2013/11/11 20:15), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串2/7 (看更多)
→ 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 內 : 則情況會更糟 : 請問有什麼方法可以處理這窘境 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 148.6.26.109

11/11 21:28, , 1F
ram還是有機會的 你的電腦12G!=你的程式就能跑到這麼多
11/11 21:28, 1F

11/11 21:29, , 2F
你再查看看你的編譯器有沒有上限可以設定
11/11 21:29, 2F

11/11 21:29, , 3F
至於記憶體不夠不一定會直接死掉
11/11 21:29, 3F

11/11 21:30, , 4F
有遇過的case是他會去抓虛擬記憶體儲存所以很慢
11/11 21:30, 4F

11/12 00:22, , 5F
感謝你的回應~但我程式連12G的1%都吃不到
11/12 00:22, 5F

11/12 00:23, , 6F
所以連 SWAP 的機會都沒有
11/12 00:23, 6F

11/12 00:23, , 7F
我這裡講的SWAP就是你說的虛擬記憶體
11/12 00:23, 7F

11/12 00:24, , 8F
且我有確認過~的的確確沒有吃到 SWAP
11/12 00:24, 8F
文章代碼(AID): #1IWCfUdA (Fortran)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
4
11年前, 11/09
完整討論串 (本文為第 2 之 7 篇):
1
4
11年前, 11/09
0
8
3
28
11年前, 11/13
0
11
0
3
文章代碼(AID): #1IWCfUdA (Fortran)