avatar
r*y
1
多年不搞fortran了,这次老革命碰到新问题了
想移植一个SGI Altix/Ifort上使用的并行程序到AMD Operton/pgf90上,
编译连接毫无问题,但是一运行就出现下列错误并异常终止
0: ALLOCATE: 18446744073709551615 bytes requested; not enough memory
18446744073709551615 = 2^64, 程序里并没有要求allocate
如此多的内存, 不知道为什么会出现这个问题
把compiler的options一个个试了试,无论怎么编译,都是
同样的错误。
哪位高见,指点指点。谢先。
avatar
j*u
2
什么并行?multithreads 还是multi processors?
调试的时侯是哪一步allocate内存的?
俺虽然不懂fortran,如果是并行程序,希望可以帮上一点忙。

【在 r****y 的大作中提到】
: 多年不搞fortran了,这次老革命碰到新问题了
: 想移植一个SGI Altix/Ifort上使用的并行程序到AMD Operton/pgf90上,
: 编译连接毫无问题,但是一运行就出现下列错误并异常终止
: 0: ALLOCATE: 18446744073709551615 bytes requested; not enough memory
: 18446744073709551615 = 2^64, 程序里并没有要求allocate
: 如此多的内存, 不知道为什么会出现这个问题
: 把compiler的options一个个试了试,无论怎么编译,都是
: 同样的错误。
: 哪位高见,指点指点。谢先。

avatar
i*g
3
可能不同的系统和编译器对于初值的处理不同,导致allocate时的变量大小
同原来不同?
或者浮点比较执行不同,导致变量值不同?
2^64是long integer了?所有位都是1?
追踪一下控制allocate大小的变量的值的变化?

【在 r****y 的大作中提到】
: 多年不搞fortran了,这次老革命碰到新问题了
: 想移植一个SGI Altix/Ifort上使用的并行程序到AMD Operton/pgf90上,
: 编译连接毫无问题,但是一运行就出现下列错误并异常终止
: 0: ALLOCATE: 18446744073709551615 bytes requested; not enough memory
: 18446744073709551615 = 2^64, 程序里并没有要求allocate
: 如此多的内存, 不知道为什么会出现这个问题
: 把compiler的options一个个试了试,无论怎么编译,都是
: 同样的错误。
: 哪位高见,指点指点。谢先。

avatar
r*y
4
呵呵,花了我一个晚上外加一个上午,终于从这个巨大无比的程序中将
此bug搞定。
结果不是multi-threads/mpi的问题,一个小bug导致了如此的复杂故事
(btw程序不是我写的,是一个大大的group, 100号人,developed)
把这个小bug改写在这,大家娱乐一下
program main
character(80) dflnm
character(80) restart_name
dflnm = 'INPUT/fv_rst.res'
print *, trim(dflnm(LEN_TRIM(dflnm):LEN_TRIM(dflnm)-2))
end
用ifort, pgf90, 都能编译通过
dflnm(LEN_TRIM(dflnm):LEN_TRIM(dflnm)-2) 显然错了,下标
应该是增序,应该是
LEN_TRIM(dflnm)-2:LEN_TRIM(dflnm)


【在 i**g 的大作中提到】
: 可能不同的系统和编译器对于初值的处理不同,导致allocate时的变量大小
: 同原来不同?
: 或者浮点比较执行不同,导致变量值不同?
: 2^64是long integer了?所有位都是1?
: 追踪一下控制allocate大小的变量的值的变化?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。