Performance optimization (allocation inside a for loop)

Rob Mahurin rob at utk.edu
Fri Apr 3 14:49:11 CDT 2009


On Apr 3, 2009, at 2:39 PM, Przemek Klosowski wrote:
>>    Is it possible to adjust the Octave's allocation algorithm so  
>> that it could allocate larger chunks of data (or growing chunks of  
>> data)?
>
>
> The common way of doing what you're asking is to over-allocate,  
> e.g. on filling up the current size-N block, re-allocate a new  
> block of size 2N; this way the allocation and copying cost is  
> proportional to the log(size) rather than size of the array.
>
> The problem for Octave is that it results in wasting a constant  
> fraction of the total allocated size, which is a critical no-no for  
> anyone with large data sets.
>
> I wonder if the allocation algorithm could be modified to over- 
> allocate a constant _amount_ (rather than constant fraction)---or  
> maybe a constant fraction up to certain array size and constant  
> amount above that. Of course this approach would require arrays to  
> have two sizes: user-visible and internal---because we don't want  
> the over-allocation to be shown in length(array)


One solution might be to allocate the requested amount of memory on  
creation, and use some over-allocation if the (end+1)th element is  
accessed.  Then code like

	list = []; for i = 1:n; list(i) = something; endfor

would have some-but-fewer reallocations, while

	data = zeros([big huge enormous]);
	for i = 1:numel(data); data(i) = something; endfor

wouldn't have a space penalty.

This sort of under-the-carpet trickiness would still lead to subtle  
bugs, but different ones from a reallocation for every size change.

Another option would be to have an internal counter associated with a  
matrix that counts how many times it's been reallocated, and switches  
strategies (perhaps emitting a warning) if the same object's size  
increases by the same amount more than a handful of times.

Rob

-- 
Rob Mahurin
Department of Physics and Astronomy
University of Tennessee 		865 207 2594
Knoxville, TN 37996 			rob at utk.edu





More information about the Help-octave mailing list