我需要声明一个有83000行和83000列的矩阵。
当我以下列形式声明时:
double precision,allocatable :: MAT(:,:)
allocate(MAT(83000,83000))
Gfortran从MingW32位编译代码成功,但运行*.exe时,收到以下错误:
integer overflow when calculating the amount of memory to allocate
如果我改变矩阵的维数,即
(nrow=100,ncol=100)
,一切都会正常工作,所以代码看起来是正确的。我的问题是,当矩阵的维数很大时,如何声明它?
最佳答案
32位编译器无法处理如此大的数组。83000*83000大于最大32位整数值2147483648,因此无法计算数组大小。必须使用64位编译器。(即使在某些默认设置为Allocate large array in PGI Fortran的64位编译器中也可能发生此溢出,但gfortran应该没问题。)
矩阵(56gb)也远远超过了32位进程可寻址的最大内存量。