Dear Mauro: Thanks for the advice. I did not declare const nvar=6 , but will and let you know the result.
Yes, I have read the performance section of the manual. Part of the problem is I still think in MatLab coding rules. Jim Nason On Wednesday, June 17, 2015 at 3:00:03 AM UTC-4, Mauro wrote: > > > > The (global) constants are nvar = 6, number of variables (Int64) and > plags > > = 6, number of lags in the vector autoregression (Int64), which are > defined > > previously in the programs. > > did you actually declare those const: > > const nvar=6 > > ? > > If not, this will impact your loop. > > > function bb_update(bbj, bbcovj) > > > > for j = 1:obs > > bbcovj += capZ[(j-1)*nvar+1:j*nvar,:]'*( > > inv(Om_e[(j-1)*nvar+1:j*nvar,:]) )*capZ[(j-1)*nvar+1:j*nvar,:] ; > > bbj += capZ[(j-1)*nvar+1:j*nvar,:]'*( > > inv(Om_e[(j-1)*nvar+1:j*nvar,:]) )*yyy[:,j] ; > > end > > > > return (bbj, bbcovj) > > end > > Any object you do not pass in as argument needs to be const, thus maybe > pass them as arguments instead: > > function bb_update(bbj, bbcovj, yyy, Om_e, capZ) > for j = 1:size(yyy,2) > jj = (j-1)*nvar+1:j*nvar > bbcovj += capZ[jj,:]'*(inv(Om_e[jj,:]) )*capZ[jj,:] > bbj += capZ[jj,:]'*(inv(Om_e[jj,:]) )*yyy[:,j] > end > return (bbj, bbcovj) > end > > Also, note, Julia is fastest with unrolled loops as at the moment Julia > makes a copy when doing slices (this will change sometime). However, as > you're doing an matrix inverse, that trick is not applicable here. > > Have you seen the performance section in the manual? >