Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

Allocation of large arrays

jaeger0
Beginner
453 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
453 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