在gfortran中分配大矩阵时整数溢出

时间:2017-03-16 13:20:05

标签: arrays windows matrix fortran gfortran

我需要声明一个包含83000行和83000列的矩阵。 当我以下面的形式声明它时:

double precision,allocatable :: MAT(:,:)
allocate(MAT(83000,83000))

gGHran从MinGW 32位编译代码是成功的,但是当我运行* .exe时,我收到以下错误:

 integer overflow when calculating the amount of memory to allocate 

如果我更改矩阵的维度,即(nrow=100,ncol=100),一切正常,所以代码似乎是正确的。

我的问题是,当尺寸很大时,如何声明矩阵?

1 个答案:

答案 0 :(得分:2)

32位编译器无法处理如此大的数组。 83000 * 83000超过最大32位整数值2147483648,因此无法计算数组的大小。您必须使用64位编译器。 (即使在默认设置Allocate large array in PGI Fortran中的某些64位编译器中也会发生这种溢出,但gfortran应该没问题。)

矩阵(56 GB)也远远超过了32位进程可寻址的最大内存量。