ifort 内存使用超过2GB的解决方法

楼主: YCTzeng (我有一个大密宝)   2012-05-23 12:01:04
编译器版本是
Intel(R) Fortran Intel(R) 64 Compiler XE for applications
running on Intel(R) 64, Version 12.1.4.319 Build 20120410
系统是 64位元 Linux fedora core 14
kernel版本 2.6.35.14-106.fc14.x86_64 #1 SMP
4 GB 的内存
以下是程式码:
如果将最后一行注解 write(*,*) v5(100)
就可以编译,且成功正确执行。
真的很奇怪!
program hmwf
implicit none
integer(4),parameter :: lmax=45000000
real(8),dimension(lmax) :: v1,v2,v3,v4,v5,v6
integer(4) :: max,i,j
real(8) :: su1,su2,su3
max=45000000
do j=1,100
su1=0.d0
su2=0.d0
su3=0.d0
do i=1,max
v1(i)=1.d10
v2(i)=v1(i)
v3(i)=v1(i)
v4(i)=v3(i)
v5(i)=v3(i)
v6(i)=v3(i)
su1=su1+v1(i)**2
su2=su2+v2(i)**2
su3=su3+v3(i)**2
enddo
write(*,*) 'j=',j,v6(max),v4(1)
enddo
write(*,*) v5(100)
end program hmwf
作者: egg9 ( )   2012-05-23 12:16:00
2G的array一次就要了这么多个内存当然会不够用囉如果资料不是这么有必要都保存下来就改个写法吧
楼主: YCTzeng (我有一个大密宝)   2012-05-23 12:22:00
v1,v2,v3,v4,v5,v6都只各占约343MB,加起来2GB,我系统有4GB
作者: gilocustom   2012-05-23 12:35:00
Ver.12.1.3 build 20120212,可以编译,不过内存不够所以没测试可不可以正常运作。
楼主: YCTzeng (我有一个大密宝)   2012-05-23 12:40:00
Intel 64,Ver:12.1.1.256 Build 20111011可以编译正常执行所以好像真的是这个版本编译器有问题,大家要小心!刚刚又测试了20120410的32位元版本,可编译但不能正确执行,但是如果用 ifort -fast 就可编译,正确执行。
作者: terryys (terry)   2012-05-23 15:16:00
有没有试过用allocate来配置内存?可能会跟固定的不同
楼主: YCTzeng (我有一个大密宝)   2012-05-23 22:04:00
推楼上,改成allocatable,可编译,正确执行。真是奇怪。
作者: perceval (摸鱼中)   2012-05-24 00:02:00
http://tinyurl.com/87dlfbb large arrays(>2GB memory)刚查到的解决方法,另外PGI也有同样问题不过gfortran 可以编译,正确执行。
楼主: YCTzeng (我有一个大密宝)   2012-05-24 00:28:00
感谢楼上,这样就解决了。谢谢。补充: ifort -shared-intel -mcmodel=medium xxx.f90
作者: callmei (挨)   2012-05-24 18:42:00
推一下 原来LINUX下不是直接设STACK的大小@@

Links booklink

Contact Us: admin [ a t ] ucptt.com