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

作者: po7777777oq (搞毛啊)   2019-01-10 03:18:07
各位版上的大大們好
小弟學習使用fortran不久,近期需要以fortran做數值模擬,但卻遇到疑似因為矩陣開太
大而無法執行的問題
最大的矩陣如下
dimension A(1405,491401)
在compile時會出現以下錯誤
Error: A common block or variable may not exceed 2147483647 bytes
並且指示為A矩陣所造成
當A矩陣改小時是可以執行的,但由於某些需求,必須將矩陣開到如上述之大小,不知道
有沒有什麼辦法可以解決,拜託各位大大開示
附帶一提,小弟使用的是CVF6.6
作者: liaoamy123 (woody )   2019-01-10 12:07:00
Hey,我也是有矩陣過大的問題,但我嘗試開file把數據放進去之後就可以哦!我也是visual fortran6.6
作者: espresso1   2019-01-10 14:51:00
32-bit compiler 的 maximum array size 限制是 2GB,用 allocatable array 也沒辦法,要超過可能要改用 64-bit compiler
作者: sin55688 (單手挑藏獒)   2019-01-10 16:45:00
借問,就算是64-bit 有辦法突破限制嗎?Stack reserve/commit size 已經設2GB了但不夠用
作者: espresso1   2019-01-10 16:56:00
可以喔,但是要宣告為allocatable array例如real,allocatable,dimension(:,:)::a然後allocate a((1405,491401))最後再deallocate(a)釋放掉
作者: sin55688 (單手挑藏獒)   2019-01-10 18:36:00
其實我是要傳入subroutine時後爆掉的在主程式變數是用 allocate 宣告,且沒問題但在進副程式的時候就傳不過去了。副程式是直接 real(8) :: a(N) 的宣告方式
作者: espresso1   2019-01-10 23:08:00
compile可以,執行時有誤?
作者: po7777777oq (搞毛啊)   2019-01-11 01:02:00
謝謝各位大大 小弟正在各種嘗試中
作者: sin55688 (單手挑藏獒)   2019-01-11 16:12:00
編譯能過。 Program Exception - access violation我想還是記憶體位置不夠造成的,不過已經解決了想請問用 allocate 宣告就不受2gb記憶體限制的原因是?
作者: espresso1   2019-01-11 17:24:00
只知道是靜態跟動態分配記憶體的差別,一個是編譯時先指定了,一個是執行時才分配靜態會一直佔著位址,程式結束才釋放,動態可以隨時釋放cvf應該沒有64-bit版本,cvf之後的ivf才有,dvf -> cvf-> ivf
作者: po7777777oq (搞毛啊)   2019-01-12 02:25:00
了解 感謝e大
作者: fragmentwing (片翼碎夢)   2019-04-16 12:23:00
特殊需求該不會是矩陣乘法吧

Links booklink

Contact Us: admin [ a t ] ucptt.com