各位版上的大大们好
小弟学习使用fortran不久,近期需要以fortran做数值模拟,但却遇到疑似因为矩阵开太
大而无法执行的问题
最大的矩阵如下
dimension A(1405,491401)
在compile时会出现以下错误
Error: A common block or variable may not exceed 2147483647 bytes
并且指示为A矩阵所造成
当A矩阵改小时是可以执行的,但由于某些需求,必须将矩阵开到如上述之大小,不知道
有没有什么办法可以解决,拜托各位大大开示
附带一提,小弟使用的是CVF6.6
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大