I have a computation (details below) which boils down to

x big_ugly_f;.3 y

y has shape (n,m,3) and big_ugly_f returns a list of shape ,3 .

Now I would expect that the memory used by big_ugly_f would be
returned to the free pool after each use, so that the overall
space used would be the space needed for an input subarray of
shape ($x),((#$x)}.$y), plus a float result of
shape (n,m,1 3), plus some smallish multiple of the space
needed for one invocation of big_ugly_f.

But it actually uses much more space than that, and I
fail with out of memory.

The details:

   lpfhuesize =: '7'
   cutsize =. >: <.&.-: ". lpfhuesize
   centerpix =. <2 # -: <: cutsize
   huefilt =: (2#cutsize)& (((1&|)@(0.5p_1&*)@(12&o.)@:(+/%#)@:,@:(2&{"1 *
(_12&o.@:(2p1&*))@:(0&{"1))  (0}) centerpix&{);._3) 
   7!:2 'huefilt i. 50 50 3'
3013952
   7!:2 'huefilt i. 500 500 3'
381267520

It seems that something big is being retained for each subarray processed.
The subarray itself is 1176 bytes, which is about the right size to account
for the space used, if it isn't rounded up to a power-of-2 boundary; is it
possible that the subarrays or something else are not freed until the operation
completes?

  The behavior I expect is what I see from big_ugly_f"3 :

   hf =: (((1&|)@(0.5p_1&*)@(12&o.)@:(+/%#)@:,@:(2&{"1 * 
(_12&o.@:(2p1&*))@:(0&{"1))  (0})
centerpix&{))"3
   arg2 =. 0.5 + i. 2 7 7 3
   arg20 =. 0.5 + i. 20 7 7 3
   arg200 =. 0.5 + i. 200 7 7 3
   7!:2 'hf arg2'
7616
   7!:2 'hf arg20'
8576
   7!:2 'hf arg200'
15744



Henry Rich

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to