[問題] 矩陣過大無法執行

看板Fortran作者 (搞毛啊)時間5年前 (2019/01/10 03:18), 5年前編輯推噓9(9019)
留言28則, 5人參與, 5年前最新討論串1/1
各位版上的大大們好 小弟學習使用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

01/10 12:07, 5年前 , 1F
Hey,我也是有矩陣過大的問題,但我嘗試開file把數據
01/10 12:07, 1F

01/10 12:07, 5年前 , 2F
放進去之後就可以哦!我也是visual fortran6.6
01/10 12:07, 2F
真的嗎 矩陣開一樣大小,然後開個txt檔讓它read這樣嗎

01/10 14:51, 5年前 , 3F
32-bit compiler 的 maximum array size 限制是 2GB,
01/10 14:51, 3F

01/10 14:51, 5年前 , 4F
用 allocatable array 也沒辦法,
01/10 14:51, 4F

01/10 14:51, 5年前 , 5F
要超過可能要改用 64-bit compiler
01/10 14:51, 5F
抱歉請問e大,CVF有64-bit compiler嗎

01/10 16:45, 5年前 , 6F
借問,就算是64-bit 有辦法突破限制嗎?
01/10 16:45, 6F

01/10 16:47, 5年前 , 7F
Stack reserve/commit size 已經設2GB了但不夠用
01/10 16:47, 7F

01/10 16:56, 5年前 , 8F
可以喔,但是要宣告為allocatable array
01/10 16:56, 8F

01/10 16:59, 5年前 , 9F
例如real,allocatable,dimension(:,:)::a
01/10 16:59, 9F

01/10 17:01, 5年前 , 10F
然後allocate a((1405,491401))
01/10 17:01, 10F

01/10 17:04, 5年前 , 11F
最後再deallocate(a)釋放掉
01/10 17:04, 11F

01/10 18:36, 5年前 , 12F
其實我是要傳入subroutine時後爆掉的
01/10 18:36, 12F

01/10 18:36, 5年前 , 13F
在主程式變數是用 allocate 宣告,且沒問題
01/10 18:36, 13F

01/10 18:37, 5年前 , 14F
但在進副程式的時候就傳不過去了。
01/10 18:37, 14F

01/10 18:38, 5年前 , 15F
副程式是直接 real(8) :: a(N) 的宣告方式
01/10 18:38, 15F

01/10 23:08, 5年前 , 16F
compile可以,執行時有誤?
01/10 23:08, 16F

01/11 01:02, 5年前 , 17F
謝謝各位大大 小弟正在各種嘗試中
01/11 01:02, 17F
※ 編輯: po7777777oq (42.73.228.200), 01/11/2019 01:07:05

01/11 16:12, 5年前 , 18F
編譯能過。 Program Exception - access violation
01/11 16:12, 18F

01/11 16:13, 5年前 , 19F
我想還是記憶體位置不夠造成的,不過已經解決了
01/11 16:13, 19F

01/11 16:14, 5年前 , 20F
想請問用 allocate 宣告就不受2gb記憶體限制的原因是?
01/11 16:14, 20F

01/11 17:24, 5年前 , 21F
只知道是靜態跟動態分配記憶體的差別,一個是編譯時先
01/11 17:24, 21F

01/11 17:24, 5年前 , 22F
指定了,一個是執行時才分配
01/11 17:24, 22F

01/11 17:28, 5年前 , 23F
靜態會一直佔著位址,程式結束才釋放,動態可以隨時釋
01/11 17:28, 23F

01/11 17:28, 5年前 , 24F
01/11 17:28, 24F

01/11 19:48, 5年前 , 25F
cvf應該沒有64-bit版本,cvf之後的ivf才有,dvf -> cvf
01/11 19:48, 25F

01/11 19:49, 5年前 , 26F
-> ivf
01/11 19:49, 26F

01/12 02:25, 5年前 , 27F
了解 感謝e大
01/12 02:25, 27F

04/16 12:23, 5年前 , 28F
特殊需求該不會是矩陣乘法吧
04/16 12:23, 28F
文章代碼(AID): #1SDaZn9q (Fortran)
文章代碼(AID): #1SDaZn9q (Fortran)