- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
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.
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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:
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

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page