如果我使用数组运行我的 fortran 程序(查看代码),我会得到错误的计算值。如果我使用英特尔检查器 (-mi3),它会告诉我每次在程序中使用一个大数组时都会出现内存问题“无效内存访问”,并且 /lib64/ld-linux-x86- 中也会出现错误64.so.2。首先,我认为我没有足够的内存空间,但是在我的 64 位机器上 16 GB 内存有足够的内存空间(:free -m ~14 GB)。如果我估计我的程序的内存大小,大约 4 GB 应该足够了。当我的程序运行时,使用的内存从 0% 增加到 ~20% 并停在那里直到程序“正常”终止。所以我认为我有足够的内存空间。对于小型数组(例如 nemax=3 000 000),我在 intel 检查器中获得了正确的计算值并且没有错误。我还用 flag check all 检查了数组。我用 ifort -mcmodel=medium -shared-intel -o test test.f90 编译程序。我不知道我还能做些什么来解决这些内存访问错误?有人有想法吗??谢谢你的帮助!
module lz_data
integer,parameter :: maxsite=16
integer,parameter :: nmax =6000000
integer,parameter :: nemax=300000000
real*8,save :: diag(nmax)
real*8,save :: werte(nemax) !Here are the only large arrays
integer,save :: izeile(nemax)
integer,save :: ispalt(nemax)
integer,save :: nentry
end module lz_data
prgram test
use lz_data
implicit real*8 (a-h,o-z)
real*8 umat(maxsite,maxsite)
logical lav(nmax,maxsite)
logical lbv(nmax,maxsite)
...
do is=1,ns
diag(is)=0.0d0 ! HERE the debugging tool says invalid memory access
do i=1,msite
do j=1,msite
if (lav(is,i).and.lbv(is,j)) diag(is)=diag(is)+umat(i,j) ! invalid memory access
enddo
enddo
enddo