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