看板 Fortran 關於我們 聯絡資訊
各位版上的大大們好 小弟學習使用fortran不久,近期需要以fortran做數值模擬,但卻遇到疑似因為矩陣開太 大而無法執行的問題 最大的矩陣如下 dimension A(1405,491401) 在compile時會出現以下錯誤 Error: A common block or variable may not exceed 2147483647 bytes 並且指示為A矩陣所造成 當A矩陣改小時是可以執行的,但由於某些需求,必須將矩陣開到如上述之大小,不知道 有沒有什麼辦法可以解決,拜託各位大大開示 附帶一提,小弟使用的是CVF6.6 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.228.200 ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1547061489.A.274.html
liaoamy123: Hey,我也是有矩陣過大的問題,但我嘗試開file把數據01/10 12:07
liaoamy123: 放進去之後就可以哦!我也是visual fortran6.601/10 12:07
真的嗎 矩陣開一樣大小,然後開個txt檔讓它read這樣嗎
espresso1: 32-bit compiler 的 maximum array size 限制是 2GB,01/10 14:51
espresso1: 用 allocatable array 也沒辦法,01/10 14:51
espresso1: 要超過可能要改用 64-bit compiler 01/10 14:51
抱歉請問e大,CVF有64-bit compiler嗎
sin55688: 借問,就算是64-bit 有辦法突破限制嗎?01/10 16:45
sin55688: Stack reserve/commit size 已經設2GB了但不夠用01/10 16:47
espresso1: 可以喔,但是要宣告為allocatable array01/10 16:56
espresso1: 例如real,allocatable,dimension(:,:)::a01/10 16:59
espresso1: 然後allocate a((1405,491401))01/10 17:01
espresso1: 最後再deallocate(a)釋放掉01/10 17:04
sin55688: 其實我是要傳入subroutine時後爆掉的01/10 18:36
sin55688: 在主程式變數是用 allocate 宣告,且沒問題01/10 18:36
sin55688: 但在進副程式的時候就傳不過去了。01/10 18:37
sin55688: 副程式是直接 real(8) :: a(N) 的宣告方式 01/10 18:38
espresso1: compile可以,執行時有誤?01/10 23:08
po7777777oq: 謝謝各位大大 小弟正在各種嘗試中01/11 01:02
※ 編輯: po7777777oq (42.73.228.200), 01/11/2019 01:07:05
sin55688: 編譯能過。 Program Exception - access violation 01/11 16:12
sin55688: 我想還是記憶體位置不夠造成的,不過已經解決了 01/11 16:13
sin55688: 想請問用 allocate 宣告就不受2gb記憶體限制的原因是? 01/11 16:14
espresso1: 只知道是靜態跟動態分配記憶體的差別,一個是編譯時先 01/11 17:24
espresso1: 指定了,一個是執行時才分配 01/11 17:24
espresso1: 靜態會一直佔著位址,程式結束才釋放,動態可以隨時釋 01/11 17:28
espresso1: 放 01/11 17:28
espresso1: cvf應該沒有64-bit版本,cvf之後的ivf才有,dvf -> cvf 01/11 19:48
espresso1: -> ivf 01/11 19:49
po7777777oq: 了解 感謝e大 01/12 02:25
fragmentwing: 特殊需求該不會是矩陣乘法吧 04/16 12:23