[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
VARRAY, memory & extracting subarrays
- Subject: VARRAY, memory & extracting subarrays
 
- From: Kristine Hensel <kristine(at)esands.com>
 
- Date: Mon, 02 Jul 2001 14:21:53 +0800
 
- Newsgroups: comp.lang.idl-pvwave
 
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:25489
 
I'm processing large (105 MB) arrays of images, and I've been running
into memory problems.  (Not surprisingly, right?)  I've started using
Eric Korpela's VARRAY routine, which has helped, but I still can't
manage to extract a subarray without using all of the available memory. 
Theoretically I have 1 GB of memory, and we've tried maximizing every
system variable that we can, but I'm still crashing ("Unable to allocate
memory to create array") when I try to run my image processing program. 
I can declare the main array and subarray using VARRAY, and I can read
images into the main array.   However, once I try to put anything from
main array in the subarray, e.g. subarray=main_array[i:j,k:l,*], or even
subarray=main_array, I start chewing up memory.  
Two not-very-good workarounds are:
 - using subarray=temporary(main_array), but then I lose main_array. I
suppose I could read the main array into main_array and then into some
temporary variable, so that I could do subarray=temporary(tmp_array),
but that involves more I/O
 - writing the subsection of main_array to a file, then reading it
directly into subarray - this is slow
I've attached sample code below, along with the results of
memory(/current) along the way.
Any assistance with VARRAY would be greatly appreciated.  
Thanks,
 Kristine
-- 
Kristine Hensel                              
Environmental Systems & Services      Phone: +61-3-9864-5300
405 Toorongo Rd                         FAX: +61-3-9822-8028    
Hawthorn East, VIC 3123 Australia    e-mail: kristine@esands.com
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pro sector_noaa
  
  filename = '/home/meteor/mapped_data/200105171839N14.map'
  openr, lun, filename, /get_lun, error=err
  nlon=0L
  nlat=0L
  nchannel=0L
  readu, lun, nlon, nlat, nchannel
  lons=fltarr(nlon)
  lats=fltarr(nlat)
  readu, lun, lons, lats
                                ; declare main images array:
  file_delete, '/home/meteor/mapped_data/images.dat', /quiet
*** Memory in use: 71 kB
  images = varray("/home/meteor/mapped_data/images.dat",byte(0), $
                  nlon,nlat,nchannel,/writable)
*** Memory in use: 71 kB
                                ; read in images array:
  readu, lun, images
*** Memory in use: 71 kB
  free_lun, lun
                                ; declare subarray:
  file_delete, '/home/meteor/mapped_data/sector_images.dat', /quiet
*** Memory in use: 70 kB
  sector_images = varray("/home/meteor/mapped_data/sector_images.dat", $
                         byte(0),nlon,nlat,nchannel,/writable)
*** Memory in use: 70 kB
                                ; write out subarray:
  openw, lun, filename+'_sector', /get_lun, error=err
  writeu, lun, images[0:nlon-1,0:nlat-1,*]
  free_lun, lun
                                ; read in sector images:
  openr, lun, filename+'_sector', /get_lun, error=err
  readu, lun, sector_images
*** Memory in use: 70 kB
  free_lun, lun
                                ; try to copy directly:
  sector_images = images
*** Memory in use: 10531 kB
end