[ncl-talk] loop memory issue

David Craig dcdavemail at gmail.com
Mon Feb 9 04:17:15 MST 2015


Hi,

thanks for your input, deleting ix, iy didn't help as they are 
overwritten every loop. However, changing the second line from,

rand_HS = HS_reorder(:,:,1:)

to,

rand_HS = (/HS_reorder(:,:,1:)/)

did the trick. I guess the variable HS_reorder was growing in every loop 
for some reason but I am not clear why forcing it to an array fixed the 
issue.

David



On 08/02/15 23:41, Mary Haley wrote:
> I think the problem might be with the two calls to 
> generate_sample_indices inside the double do loop.
>
> If I'm reading your code correctly, ix and iy will be size 317 and 720 
> elements respectively.
>
> The generate_sample_indices function is actually an NCL function (and 
> not a built-in function) that creates an array of random numbers and 
> then sorts them.  This means you are creating two new arrays every 
> time inside this do loop,and never freeing up the space.  Also, the 
> sorting may cause the code to slow down.
>
> As a start, you might try deleting ix and iy after each iteration in 
> the loop.
>
>    do while(i.lt.n)
>      j = 0
>
>      do while(j.lt.m) ; loop through time
>
>        ; randomise in space
>        ix = generate_sample_indices( dms(0), 0 )
>        iy = generate_sample_indices( dms(1), 0 )
>  rand_HS(:,:,j) = rand_HS(ix, iy, j)
>
>        j=j+1
>
>        delete([/ix,iy/])
>      end do
>
> You might also consider whether you need to do this every time inside 
> the do loop.
>
> Let ncl-talk know if you continue to have problems with this code even 
> after adding the delete command.
>
> --Mary
>
>
> On Sun, Feb 8, 2015 at 6:25 AM, David Craig <dcdavemail at gmail.com 
> <mailto:dcdavemail at gmail.com>> wrote:
>
>     Hi,
>
>     I have a loop in NCL that randomises an array and preforms some
>     operations on the result. However, it seems to be using too much
>     memory
>     and I don't understand why as all variables are preallocated. Does
>     anyone know what the problem is, code is below.
>
>     thanks,
>
>     David
>
>
>        n = 1000
>        rand_HS = HS_reorder(:,:,1:)     ; size 317x720x240
>        dms = dimsizes(rand_HS)
>        m = dms(2)
>        ; preallocate array for maximum coefficient values
>        max_rand_ccr = new(n,float)
>        i = 0
>
>        do while(i.lt.n)
>          j = 0
>
>          do while(j.lt.m) ; loop through time
>
>            ; randomise in space
>            ix = generate_sample_indices( dms(0), 0 )
>            iy  = generate_sample_indices( dms(1), 0 )
>            rand_HS(:,:,j) = rand_HS(ix, iy, j)
>
>            j=j+1
>          end do
>
>          ;calculate max correlation coefficient
>          max_rand_ccr(i) = max(abs(escorc(data2,rand_HS)))
>          i=i+1
>        end do
>     _______________________________________________
>     ncl-talk mailing list
>     List instructions, subscriber options, unsubscribe:
>     http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150209/78bac1b2/attachment.html 


More information about the ncl-talk mailing list