作者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/cn.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