Thanks Andreas, that was helpful. See message to Tim in this thread. P
On Friday, January 9, 2015 at 11:55:20 AM UTC-8, Andreas Noack wrote: > > Sometimes Julia can have problems inferring the type of fields of types > which is what conn is. Using @code_warntype as suggested by Tim could give > an indication if it is the case. > > 2015-01-09 14:51 GMT-05:00 Petr Krysl <[email protected] <javascript:>>: > >> The size() function is from the base. fes.conn is a 2D array of ints. >> >> P >> >> >> On Friday, January 9, 2015 at 11:25:34 AM UTC-8, Tim Holy wrote: >>> >>> I wonder if your `size` function isn't returning an Int, or that the >>> compiler >>> can't infer that. Did you try this on julia 0.4 with @code_warntype? >>> >>> --Tim >>> >>> On Friday, January 09, 2015 08:06:43 AM Petr Krysl wrote: >>> > Actually, I realized that the example shows the same problem, but for >>> a >>> > different function. This time the allocation occurs in the function >>> > CALLING getconn!. >>> > >>> > P >>> > >>> > On Friday, January 9, 2015 at 8:03:00 AM UTC-8, Petr Krysl wrote: >>> > > Tim, >>> > > >>> > > Your explanation is very helpful. There is a complication though: >>> > > The function is actually called from another function (from a chain >>> of >>> > > >>> > > functions). Here is the measurement from a simplified situation: >>> > > - using JFFoundationModule >>> > > - using FESetModule >>> > > - >>> > > - n=100; >>> > > - function test(n) >>> > > 0 fes=FESetH8(conn=rand(JFInt,n, >>> > > >>> > > 8)) >>> > > >>> > > 112 conn1::JFIntMat=zeros(JFInt,nfense(fes),1); >>> > > >>> > > 6383704 for j=1:size(fes.conn,1) >>> > > >>> > > 0 getconn!(fes,conn1,j); >>> > > - end >>> > > 0 return true >>> > > - end >>> > > - >>> > > - test(n) >>> > > - clear_malloc_data() >>> > > - n=100000; >>> > > - test(n) >>> > > >>> > > As you can see the loop over the rows of the array fes.conn >>> allocates >>> > > substantial amount of memory. >>> > > >>> > > Here is the type: >>> > > https://gist.github.com/PetrKryslUCSD/794f521a8e5b057e5e4e >>> > > >>> > > Petr >>> >>> >
