Fortran中数组太大,可引发各种报错
(2012-02-28 19:33:59)
标签:
fortran数组大数组杂谈 |
分类: 技术 |
Fortran程序的编程过程中要注意一些奇怪的问题,如有的时候定义的数组太大就可能引发
编译器的报错。例如又一次定义了一个数组为real::8400x5400x168, 结果引发编译器报错:
/tmp/ifortVYE5Pu.o: In function `MAIN__':
FSMap.f90:(.text+0x7f): relocation truncated to fit:
R_X86_64_PC32 against `var$1385.0.4'
FSMap.f90:(.text+0x89): relocation truncated to fit:
R_X86_64_PC32 against `var$1383.0.4'
FSMap.f90:(.text+0xca): relocation truncated to fit:
R_X86_64_PC32 against `var$1383.0.4'
FSMap.f90:(.text+0xd2): relocation truncated to fit:
R_X86_64_PC32 against `var$1383.0.4'
这个报错简直让人不止所云。后来各种调试,发现如果定义的时候赋初值,编译器会报一个人类能看懂的错误:
FSMap.f90(9): error #5524: Variable RAINALL is larger than
2147483647 bytes and cannot be initialized
原来数组定义的太大了,编译器不干了。 那么怎么办呢,这时候有两个办法,要么将这个数组拆分一下,实在
不能拆分,那么就定义为 allocatable的,然后在运行过程中 allocate。
不过最终还是建议不要直接定义太大
的数组了。
前一篇:一定要用好OpenMP并行啊!