On Friday, October 31, 2014 12:06:04 AM UTC-5, Sam L wrote:
>
> I tried calling XtWXXtWZ! with a Distribution object e.g. Bernoulli()
> instead of a type, likewise for Link, as in
> XtWXXtWz!(XtWX,XtWz,Xt,β,y,wt,Bernoulli(),LogitLink())
> and changing the appropriate lines to
> μ = linkinv(*typeof*(L),η)
> μη = dμdη(*typeof*(L),η)
> W = wt[i] * abs2(μη) / var(*typeof*(D),μ)
> and that seemed to do the trick.(Also had to change the argument checking
> line at the top.)
>
> I'm not exactly sure why. I guess it may be because Bernoulli and
> LogitLink are of type DataType, so XtWXXtWZ! isn't specialized for
> different values causing calls to linkinv, d\mud\eta, and var to not get
> inlined. Or something like that...
>
Yes, exactly. I should have thought of that. Thanks for looking at it.
>
> I think it would also work to write linkinv, d\mud\eta and var to dispatch
> on ::T instead of ::Type{T}, and then you could get rid of the calls to
> typeof()
>
>
> On Thursday, October 30, 2014 2:52:15 PM UTC-7, Tim Holy wrote:
>>
>> Did you try julia --track-allocation=user (or all, if necessary)? See the
>> docs:
>> http://docs.julialang.org/en/latest/stdlib/base/#Base.clear_malloc_data
>>
>> --Tim
>>
>> On Thursday, October 30, 2014 02:16:37 PM Douglas Bates wrote:
>> > I haven't finished with the notebook
>> >
>> >
>> http://nbviewer.ipython.org/github/dmbates/JuliaWorkshop/blob/master/Paralle
>> > lGLM.ipynb
>> >
>> > but, unfortunately, must turn my attention to something else. I'll get
>> > back to it tomorrow. In the meantime, if someone has a hint as to
>> where
>> > the memory allocation is happening in the wonderfully named XtWXXtWz!
>> > function I would appreciate hints. I assumed that all the one-liner
>> > Base.var, linkinv, etc. methods would get inlined and all the
>> assignments
>> > should be scalar assignments, I think.
>>
>>