Fortran Coder

标题: allocate 分配三维数组失败 [打印本页]

作者: 山林悍匪    时间: 2014-9-8 16:43
标题: allocate 分配三维数组失败
附件里面有f90的文件和一个参数卡(txt),这是一个有限差分的程序(大家如果没有遇到过这类东西,请忽略这个名字)。
我用allocate分配若干个三维数组(从209~236行),数组大小300*300*300,不知道什么原因他只能分配到第八个(第217行),当分配第九个的时候就显示失败了,stat返回值为41,但是后面另外的一些二维数组和一位数组申请又没问题,所以应该不是内存大小的限制,而且我也拿到32G内存机器上运行也是一样的情况,我把文件放在附件里了,麻烦版主帮忙看看,我自己是在找不到问题出在哪。代码并不繁琐,刚刚把变量定义玩,开始allocate的时候就出现的问题。

作者: 山林悍匪    时间: 2014-9-8 16:44
这个是代码,f90的

3D.f90

57.13 KB, 下载次数: 10

代码


作者: 山林悍匪    时间: 2014-9-8 16:45
这个是参数卡

3DPara.txt

903 Bytes, 下载次数: 3


作者: vvt    时间: 2014-9-8 19:11
双精度每个数据8字节。
300*300*300*8 = 205.99MB

8个这样的数组就是 1640MB,9个就是 1845MB

如果您的编译器和操作系统是 32 位的,可能分配不了。你需要64位的编译器,或者更节约内存的算法。
作者: 山林悍匪    时间: 2014-9-8 21:02
本帖最后由 山林悍匪 于 2014-9-8 21:04 编辑
vvt 发表于 2014-9-8 19:11
双精度每个数据8字节。
300*300*300*8 = 205.99MB


谢谢回复!
我用的编译器是Intel Fortran2011,我自己的电脑就是64位4G内存的,而且我拿到64位32G内存的机器上也是同样的啊
作者: fcode    时间: 2014-9-8 21:11
主要是你的编译器是否是64位的
作者: 山林悍匪    时间: 2014-9-8 21:28
本帖最后由 山林悍匪 于 2014-9-8 21:29 编辑
fcode 发表于 2014-9-8 21:11
主要是你的编译器是否是64位的


恩,应该是64位的,Intel Fortran2011不就是专门为64位准备的吗?
作者: fcode    时间: 2014-9-8 21:49
山林悍匪 发表于 2014-9-8 21:28
恩,应该是64位的,Intel Fortran2011不就是专门为64位准备的吗?

IVF 有32位版本,也有64位版本。
64位版本同时也带有32位版本,需要选择。
这个你得自己检查一下
作者: 山林悍匪    时间: 2014-9-8 21:52
fcode 发表于 2014-9-8 21:49
IVF 有32位版本,也有64位版本。
64位版本同时也带有32位版本,需要选择。
这个你得自己检查一下 ...

哦,是这样,我装的时候还真没注意,那我再看看
谢谢你的回答!
作者: 山林悍匪    时间: 2014-9-8 22:32
fcode 发表于 2014-9-8 21:49
IVF 有32位版本,也有64位版本。
64位版本同时也带有32位版本,需要选择。
这个你得自己检查一下 ...

fcode你好!我从新装了一遍ivf,但是整个安装过程并没有提示我选择32位或者64,我的vs是2010也没有提示选择64或者32
作者: fcode    时间: 2014-9-9 07:48
你可以通过,在工程(project)上右键,属性,看到平台(platform),里面是否有选择 win32 或 x64
作者: 山林悍匪    时间: 2014-9-9 10:57
fcode 发表于 2014-9-9 07:48
你可以通过,在工程(project)上右键,属性,看到平台(platform),里面是否有选择 win32 或 x64 ...

谢谢fcode!
我看了,里面只有win32的选择,没有64的选项,是不是还跟vs有关呢,你用的是ivf+vs吗?
作者: fcode    时间: 2014-9-9 11:47
那就说明你的 IVF 只有 32 位。你需要重新下载带 64 位的 IVF。
VS与这个问题无关。
作者: andy8496    时间: 2014-9-9 12:08
LZ试试这样行不行?我的这样可以在32位机器上编译得到64位的可执行程序。

X64.png (67.97 KB, 下载次数: 404)

X64.png

作者: 山林悍匪    时间: 2014-9-9 12:40
fcode 发表于 2014-9-9 11:47
那就说明你的 IVF 只有 32 位。你需要重新下载带 64 位的 IVF。
VS与这个问题无关。 ...

额,那好吧,我再找找看64位的ivf
作者: 山林悍匪    时间: 2014-9-9 13:20
andy8496 发表于 2014-9-9 12:08
LZ试试这样行不行?我的这样可以在32位机器上编译得到64位的可执行程序。
...

哇!谢谢Andy8496!这样真的行了也
作者: fcode    时间: 2014-9-9 13:43
那说明你的 IVF 还是有 64 位的。汗~~
作者: 山林悍匪    时间: 2014-9-9 22:12
fcode 发表于 2014-9-9 13:43
那说明你的 IVF 还是有 64 位的。汗~~

我也不知道,因为以前没在意位数的问题,而且装的时候也没提示,哈哈,不过现在知道了~~




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