Fortran Coder

标题: 三维数组过大 [打印本页]

作者: 相辅相成    时间: 2021-3-9 20:20
标题: 三维数组过大
本帖最后由 相辅相成 于 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)
请问各位大神,谁知道怎么解决?


作者: 布衣龙共    时间: 2021-3-9 21:45
改成动态数组分配就好了。这么多数组,也可以考虑改用结构体
作者: 相辅相成    时间: 2021-3-11 10:52
好的,谢谢。
作者: 相辅相成    时间: 2021-3-12 17:25
请问怎么加快程序的运行速度,用结构体比动态数组分配要快一些吗?

作者: 胡文刚    时间: 2021-3-12 17:31
怎么加快程序的运行速度
这是一个经久不衰的话题,非几句话能说得清楚。

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

结合到你的程序中,你不能只考虑分配所需的时间资源。还要综合考虑使用这些数据的操作。所以结论受多因素影响。
作者: 风平老涡    时间: 2021-3-13 00:38
只一个double complex  fr(-512:512,-512:512,-64:64)就是2GB,一般机器编译都没法进行。改数据结构和算法吧。
作者: 西石大王杰    时间: 2021-4-7 18:43
动态数组即可,我记得论坛里的大神们给我说过这个,彭国伦的书籍里面就可以找到办法




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