作者po7777777oq (搞毛啊)
看板Fortran
標題[問題] 矩陣過大無法執行
時間Thu Jan 10 03:18:07 2019
各位版上的大大們好
小弟學習使用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://webptt.com/m.aspx?n=bbs/Fortran/M.1547061489.A.274.html
1F:推 liaoamy123: Hey,我也是有矩陣過大的問題,但我嘗試開file把數據01/10 12:07
2F:→ liaoamy123: 放進去之後就可以哦!我也是visual fortran6.601/10 12:07
真的嗎 矩陣開一樣大小,然後開個txt檔讓它read這樣嗎
3F:推 espresso1: 32-bit compiler 的 maximum array size 限制是 2GB,01/10 14:51
4F:→ espresso1: 用 allocatable array 也沒辦法,01/10 14:51
5F:→ espresso1: 要超過可能要改用 64-bit compiler 01/10 14:51
抱歉請問e大,CVF有64-bit compiler嗎
6F:推 sin55688: 借問,就算是64-bit 有辦法突破限制嗎?01/10 16:45
7F:→ sin55688: Stack reserve/commit size 已經設2GB了但不夠用01/10 16:47
8F:推 espresso1: 可以喔,但是要宣告為allocatable array01/10 16:56
9F:→ espresso1: 例如real,allocatable,dimension(:,:)::a01/10 16:59
10F:→ espresso1: 然後allocate a((1405,491401))01/10 17:01
11F:→ espresso1: 最後再deallocate(a)釋放掉01/10 17:04
12F:推 sin55688: 其實我是要傳入subroutine時後爆掉的01/10 18:36
13F:→ sin55688: 在主程式變數是用 allocate 宣告,且沒問題01/10 18:36
14F:→ sin55688: 但在進副程式的時候就傳不過去了。01/10 18:37
15F:→ sin55688: 副程式是直接 real(8) :: a(N) 的宣告方式 01/10 18:38
16F:推 espresso1: compile可以,執行時有誤?01/10 23:08
17F:→ po7777777oq: 謝謝各位大大 小弟正在各種嘗試中01/11 01:02
※ 編輯: po7777777oq (42.73.228.200), 01/11/2019 01:07:05
18F:推 sin55688: 編譯能過。 Program Exception - access violation 01/11 16:12
19F:→ sin55688: 我想還是記憶體位置不夠造成的,不過已經解決了 01/11 16:13
20F:→ sin55688: 想請問用 allocate 宣告就不受2gb記憶體限制的原因是? 01/11 16:14
21F:推 espresso1: 只知道是靜態跟動態分配記憶體的差別,一個是編譯時先 01/11 17:24
22F:→ espresso1: 指定了,一個是執行時才分配 01/11 17:24
23F:→ espresso1: 靜態會一直佔著位址,程式結束才釋放,動態可以隨時釋 01/11 17:28
24F:→ espresso1: 放 01/11 17:28
25F:推 espresso1: cvf應該沒有64-bit版本,cvf之後的ivf才有,dvf -> cvf 01/11 19:48
26F:→ espresso1: -> ivf 01/11 19:49
27F:→ po7777777oq: 了解 感謝e大 01/12 02:25
28F:→ fragmentwing: 特殊需求該不會是矩陣乘法吧 04/16 12:23