【发布时间】:2013-09-15 15:42:54
【问题描述】:
我正在尝试在我的笔记本电脑(Linux 3.8.0-25-generic x86_64,Ubuntu 13.04)上运行一个模拟程序。
它可以编译,但是在分配一些数组大小时,我得到了:
forrtl: 严重 (179): 无法分配数组 - 数组大小计算溢出。\
Some googling about this message 让我得出结论,这是因为我的程序内存不足而生成的。
为了检查这个假设,我尝试为同一个数组分配一个较小的维度,但仍然遇到同样的问题。
我接下来尝试的是增加堆栈内存,但仍然遇到同样的问题。
这是代码:
program memoria
implicit none
integer :: n,num
complex, dimension(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:), allocatable :: ddptrj
n=4
num=21
allocate(ddptrj(n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,num))
deallocate(ddptrj)
endprogram memoria
我该如何解决这个问题?
【问题讨论】:
-
我的猜测是,如果您试图为工作使用超过 1 PB 的内存,那么您在物理/数学上做错了。
-
我想指出的是,对 Fortran 数组使用 20 多个维度确实是个坏主意,即使您的编译器允许这样做。代码将不可读。您确实需要使用低维数组并实现自己的索引方案。
-
是什么让您认为您需要 22 个维度和 1344TB 来解决您的问题?这一定是一个非凡的问题,或者它的设计非常糟糕......你应该首先解释你想要做什么。
标签: memory-management fortran intel-fortran