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

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

Reply via email to