little_kar 发表于 2017-2-27 16:58:15

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数组算很大了吗?我对这没概念,望指出,多谢!

Jackdaw 发表于 2017-2-27 17:15:33

确实是的,按照单精度数组,每个元素4字节,一个数组81亿个元素,共30多G

little_kar 发表于 2017-2-27 17:19:32

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

那该怎么解决呢?单纯的减小数组的话,我算的东西就失去意义了

Jackdaw 发表于 2017-2-27 18:32:38

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

修改算法内容,不要将数组全部放在内存里;或者换用满足要求的机器。

pasuka 发表于 2017-2-28 08:37: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:35

pasuka 发表于 2017-2-28 08:37
1 Byte = 8 Bits

1 KB = 1024 Bytes


算错了吧,双精度要占8字节,一个数组81亿个元素,字节总数为8×81E8

fcode 发表于 2017-2-28 08:51:16

90000*90000*8/1024/1024/1024=60GB

SWY 发表于 2022-3-26 15:37:11

请问楼主是怎么解决的,我也遇到了相同的问题
页: [1]
查看完整版本: forrtl:severe(179):cannot allocate array - overflow on array size calculation