Fortran Coder

查看: 24222|回复: 6
打印 上一主题 下一主题

[求助] 三维数组过大

[复制链接]

3

帖子

1

主题

0

精华

新人

学习程序的底层科研人员

F 币
32 元
贡献
13 点
跳转到指定楼层
楼主
发表于 2021-3-9 20:20:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 相辅相成 于 2021-3-9 20:20 编辑

program Mo
         implicit none
       integer number,itype(128),l,i1,i2,m,j4,j5,j6,n2,n,igama,m0
       integer na,nb,i,j,k,j1,h,n4,j2,n1,n5,nc,kind,j3,nb0,nc0,na
double complex  fr(-512:512,-512:512,-64:64),f2r(-512:512,-512:512,-64:64),lo1(-512:512,-512:512,-64:64)
double complex  lo2(-512:512,-512:512,-64:64),proj(-512:512,-512:512,-2:2),u21(4,4),u22(4,4),w21(4,4),w22(4,4)
double complex  l1c(-516:515,-516:515,1:2),l2c(1:2,-516:515,-516:515),l3c(1:2,-516:515,-516:515)
double complex  f3r(1:2,-512:511,-512:511), f4r(1:2,-512:511,-512:511),l22c(1:2,-516:515,-516:515)
double complex  l6wc(-512:511,-512:511),f5r(-512:511,-512:511),f6r(-512:511,-512:511)
double complex  xreal(0:1023),xy(0:1023),l5c(0:1023,0:1023),l4c(0:1023,0:1023),f1r(0:2047,0:2047)
double complex  l6c(0:1023,0:1023),l7c(0:1023,0:1023),f7r(0:1023,0:1023),f8r(-512:511,-512:511),f9r(-512:511,-512:511)
double complex  l66c(0:1023,0:1023),l77c(0:1023,0:1023),f77r(0:1023,0:1023),f88r(-512:511,-512:511),f99r(-512:511,-512:511)
上面是定义的数据类型,编译后出现下面这样的错误
------ Build started: Project: RS-RRS, Configuration: Debug|x64 ------

Compiling with Intel(R) Visual Fortran Compiler 17.0.8.275 [Intel(R) 64]...
Source1.f90
x64\Debug\Source1.obj: catastrophic error: Variable MO$FR.0.1 too large for NTCOFF.  Bigger than 2GB.  Use heap instead
compilation aborted for C:\Users\user\Desktop\RRS vs RS-abc\RS-RRS\Source1.f90 (code 1)

Build log written to  "file://C:\Users\user\Desktop\RRS%20vs%20RS-abc\RS-RRS\x64\Debug\BuildLog.htm"
RS-RRS - 1 error(s), 0 warning(s)
请问各位大神,谁知道怎么解决?

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

54

帖子

0

主题

0

精华

实习版主

F 币
653 元
贡献
214 点

元老勋章新人勋章

QQ
沙发
发表于 2021-3-9 21:45:25 | 只看该作者
改成动态数组分配就好了。这么多数组,也可以考虑改用结构体

3

帖子

1

主题

0

精华

新人

学习程序的底层科研人员

F 币
32 元
贡献
13 点
板凳
 楼主| 发表于 2021-3-11 10:52:39 | 只看该作者
好的,谢谢。
回复

使用道具 举报

3

帖子

1

主题

0

精华

新人

学习程序的底层科研人员

F 币
32 元
贡献
13 点
地板
 楼主| 发表于 2021-3-12 17:25:56 | 只看该作者
请问怎么加快程序的运行速度,用结构体比动态数组分配要快一些吗?

101

帖子

0

主题

0

精华

大师

F 币
670 元
贡献
299 点

规矩勋章元老勋章新人勋章

5#
发表于 2021-3-12 17:31:58 | 只看该作者
怎么加快程序的运行速度
这是一个经久不衰的话题,非几句话能说得清楚。

用结构体比动态数组分配要快一些吗?
单纯论分配的话,结构体肯定要快一些,一个结构体数组,它只分配一次。
但是你要是多个单变量的数组,需要分配多次。

结合到你的程序中,你不能只考虑分配所需的时间资源。还要综合考虑使用这些数据的操作。所以结论受多因素影响。
天之道,损有余而补不足

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
875 点

规矩勋章

6#
发表于 2021-3-13 00:38:06 | 只看该作者
只一个double complex  fr(-512:512,-512:512,-64:64)就是2GB,一般机器编译都没法进行。改数据结构和算法吧。

11

帖子

2

主题

0

精华

入门

F 币
90 元
贡献
36 点
7#
发表于 2021-4-7 18:43:27 | 只看该作者
动态数组即可,我记得论坛里的大神们给我说过这个,彭国伦的书籍里面就可以找到办法
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-15 01:18

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表