ifort 記憶體使用超過2GB的解決方法

看板Fortran作者 (我有一個大密寶)時間12年前 (2012/05/23 12:01), 編輯推噓3(3014)
留言17則, 6人參與, 最新討論串1/1
編譯器版本是 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.81.104

05/23 12:16, , 1F
2G的array一次就要了這麼多個記憶體當然會不夠用囉
05/23 12:16, 1F
※ 編輯: YCTzeng 來自: 118.168.81.104 (05/23 12:19)

05/23 12:18, , 2F
如果資料不是這麼有必要都保存下來就改個寫法吧
05/23 12:18, 2F

05/23 12:22, , 3F
v1,v2,v3,v4,v5,v6都只各佔約343MB,加起來2GB,我系統有4GB
05/23 12:22, 3F

05/23 12:35, , 4F
Ver.12.1.3 build 20120212,可以編譯,不過記憶體不夠
05/23 12:35, 4F

05/23 12:36, , 5F
所以沒測試可不可以正常運作。
05/23 12:36, 5F

05/23 12:40, , 6F
Intel 64,Ver:12.1.1.256 Build 20111011可以編譯正常執行
05/23 12:40, 6F

05/23 12:41, , 7F
所以好像真的是這個版本編譯器有問題,大家要小心!
05/23 12:41, 7F

05/23 12:51, , 8F
剛剛又測試了20120410的32位元版本,可編譯但不能正確執行,
05/23 12:51, 8F

05/23 12:52, , 9F
但是如果用 ifort -fast 就可編譯,正確執行。
05/23 12:52, 9F

05/23 15:16, , 10F
有沒有試過用allocate來配置記憶體?可能會跟固定的不同
05/23 15:16, 10F

05/23 22:04, , 11F
推樓上,改成allocatable,可編譯,正確執行。真是奇怪。
05/23 22:04, 11F

05/24 00:02, , 12F
http://tinyurl.com/87dlfbb large arrays(>2GB memory)
05/24 00:02, 12F

05/24 00:04, , 13F
剛查到的解決方法,另外PGI也有同樣問題
05/24 00:04, 13F

05/24 00:05, , 14F
不過gfortran 可以編譯,正確執行。
05/24 00:05, 14F

05/24 00:28, , 15F
感謝樓上,這樣就解決了。謝謝。
05/24 00:28, 15F

05/24 04:08, , 16F
補充: ifort -shared-intel -mcmodel=medium xxx.f90
05/24 04:08, 16F

05/24 18:42, , 17F
推一下 原來LINUX下不是直接設STACK的大小@@
05/24 18:42, 17F
文章代碼(AID): #1Fl643xK (Fortran)
文章代碼(AID): #1Fl643xK (Fortran)