Fortran Coder

标题: forrtl:severe(179):cannot allocate array - overflow on array size calculation [打印本页]

作者: little_kar    时间: 2017-2-27 16:58
标题: forrtl:severe(179):cannot allocate array - overflow on array size calculation
请问一下,这是个什么错误?:forrtl:severe(179):cannot allocate array - overflow on array size calculation.

这是断点的提示内容,下图是断点出现的位置。是不是我的数组太大了,ZKMfai是的jdz=90000,所以计算内存太大?我计算机还行的,90000*90000数组算很大了吗?我对这没概念,望指出,多谢!

1488185511(1).jpg (1.16 KB, 下载次数: 387)

断点位置

断点位置

1488185810(1).jpg (10.12 KB, 下载次数: 370)

计算机配置

计算机配置

作者: Jackdaw    时间: 2017-2-27 17:15
确实是的,按照单精度数组,每个元素4字节,一个数组81亿个元素,共30多G
作者: little_kar    时间: 2017-2-27 17:19
Jackdaw 发表于 2017-2-27 17:15
确实是的,按照单精度数组,每个元素4字节,一个数组81亿个元素,共30多G

那该怎么解决呢?单纯的减小数组的话,我算的东西就失去意义了
作者: Jackdaw    时间: 2017-2-27 18:32
little_kar 发表于 2017-2-27 17:19
那该怎么解决呢?单纯的减小数组的话,我算的东西就失去意义了

修改算法内容,不要将数组全部放在内存里;或者换用满足要求的机器。
作者: pasuka    时间: 2017-2-28 08:37
本帖最后由 pasuka 于 2017-2-28 10:24 编辑

1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB之前算的不对,修正一下。。。
双精度维数90000的矩阵,占用计算机内存8.1e9*8/1024/1024/1024约等于60.35GB
改成动态分配数组,那么64位的操作系统和64位的Fortran编译器理论上可以分配这么大内存,但是lz的机器内存只有8G,相差一个数量级
还是修改算法吧

作者: Jackdaw    时间: 2017-2-28 08:45
pasuka 发表于 2017-2-28 08:37
1 Byte = 8 Bits

1 KB = 1024 Bytes

算错了吧,双精度要占8字节,一个数组81亿个元素,字节总数为8×81E8
作者: fcode    时间: 2017-2-28 08:51
90000*90000*8/1024/1024/1024=60GB
作者: SWY    时间: 2022-3-26 15:37
请问楼主是怎么解决的,我也遇到了相同的问题




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2