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]>:

> 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
>>
>>

Reply via email to