Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Allocation of large arrays

jaeger0
Beginner
404 Views
In my Program I have to allocate large arrays of 500-1000MB.

integer(4),allocatable :: Arr1(:)
ALLOCATE(Arr1 (size), STAT = iErr)

On my first machine on Windows Vista 32 I have 4GB Ram, and I can allocate up to 1024MB of a single block and 2000MB if I allocate 1000 smaller single blocks.

However on a second machine on Windows XP 32 and 4GB RAM, I can only allocate 512MB of a single block with still 1.5GB of virtual memory available. So I can allocate still 2048MB with 1020 smaller blocks.

What can I do to overcome this problem. I need at least a single allocatable array with > 512MB. On both machine are no other programs running.
0 Kudos
1 Reply
Martyn_C_Intel
Employee
404 Views
I have a 32 bit system with 2 GB physical memory running Windows XP. I have never had difficulty in allocating large arrays until they get close to the 2 GB (32 bit Windows has various 2 GB limits). I can successfully allocate an array of 1.75 GB (some of it goes into virtual memory).

Perhaps you could attach an executable program that encounters the problem?
Here is one that I can run successfully:

program single_dynamic_array

integer(8) i,m,n,mn

! NQGB = number of quarter-Gigabytes

parameter (m=NQGB,n=64*1024*1024,mn=m*n)

integer(4), allocatable :: a(:)

allocate (a(mn),STAT=ierr)

print *, float(m)/4.,' GB, ierr=',ierr

do i=1,mn

a(i) = i

enddo

print *, a(1), a(mn/2), a(mn)

deallocate (a)

end


>ifort /Qfpp /DNQGB=7 single_dynamic.F

>single_dynamic

1.750000 GB, ierr= 0

1 234881024 469762048

0 Kudos
Reply