Well first problem was that the vectorized version of my code was very slow. Then I devectorized still slow, because of the index clashing with the column-major storage I assumed for i =1:10,j=1:10,k=1:10 does the index i first then j then k wrongly...
On Sunday, May 8, 2016 at 2:04:37 PM UTC-4, David Gold wrote: > > So, the issue here was the indexing clashing up against the column-major > storage of multi-dimensional arrays? > > On Sunday, May 8, 2016 at 10:10:54 AM UTC-7, Tk wrote: >> >> Could you try replacing >> for i in 1:nx, j in 1:ny, k in 1:nz >> to >> for k in 1:nz, j in 1:ny, i in 1:nx >> because your arrays are defined like a[i,j,k]? >> >> Another question is, how many cores is your Matlab code using? >> >> >> On Monday, May 9, 2016 at 2:03:58 AM UTC+9, feza wrote: >>> >>> Milan >>> >>> Script is here: >>> https://gist.github.com/musmo/27436a340b41c01d51d557a655276783 >>> >>> >>> On Sunday, May 8, 2016 at 12:40:44 PM UTC-4, feza wrote: >>>> >>>> Thanks for the tip (initially I just transllated the matlab verbatim) >>>> >>>> Now I have made all the changes. In place operations, and direct >>>> function calls. >>>> Despite these changes. Matlab is 3.6 seconds, new Julia 7.6 seconds >>>> TBH the results of this experiment are frustrating, I was hoping Julia >>>> was going to provide a huge speedup (on the level of c) >>>> >>>> Am I still missing anything in the Julia code that is crucial to speed? >>>> @code_warntype looks ok sans a few red unions which i don't think are >>>> in my control >>>> >>>> >>>> On Sunday, May 8, 2016 at 8:15:25 AM UTC-4, Tim Holy wrote: >>>>> >>>>> One of the really cool features of julia is that functions are allowed >>>>> to have >>>>> more than 0 arguments. It's even considered good style, and I highly >>>>> recommend >>>>> making use of this awesome feature in your code! :-) >>>>> >>>>> In other words: try passing all variables as arguments to the >>>>> functions. Even >>>>> though you're wrapping everything in a function, performance-wise >>>>> you're >>>>> running up against an inference problem >>>>> (https://github.com/JuliaLang/julia/issues/15276). In terms of coding >>>>> style, >>>>> you're still essentially using global variables. Honestly, these make >>>>> your >>>>> life harder in the end ( >>>>> http://c2.com/cgi/wiki?GlobalVariablesAreBad)---it's >>>>> not a bad thing that julia provides gentle encouragement to avoid >>>>> using them, >>>>> and you're losing out on opportunities by trying to sidestep that >>>>> encouragement. >>>>> >>>>> Best, >>>>> --Tim >>>>> >>>>> On Sunday, May 08, 2016 01:38:41 AM feza wrote: >>>>> > That's no surprise your CPU is better :) >>>>> > >>>>> > Regarding devectorization >>>>> > for l in 1:q >>>>> > for k in 1:nz >>>>> > for j in 1:ny >>>>> > for i in 1:nx >>>>> > u = ux[i,j,k] >>>>> > v = uy[i,j,k] >>>>> > w = uz[i,j,k] >>>>> > >>>>> > cu = c[k,1]*u + c[k,2]*v + c[k,3]*w >>>>> > u2 = u*u + v*v + w*w >>>>> > feq[i,j,k,l] = weights[k]*ρ[i,j,k]*(1 + 3*cu + >>>>> 9/2*(cu*cu) >>>>> > - 3/2*u2) >>>>> > f[i,j,k,l] = f[i,j,k,l]*(1-ω) + ω*feq[i,j,k,l] >>>>> > end >>>>> > end >>>>> > end >>>>> > end >>>>> > >>>>> > Actually makes the code a lot slower.... >>>>> > >>>>> > On Sunday, May 8, 2016 at 4:37:18 AM UTC-4, Patrick Kofod Mogensen >>>>> wrote: >>>>> > > For what it's worth it run in about 3-4 seconds on my computer on >>>>> latest >>>>> > > v0.4. >>>>> > > >>>>> > > CPU : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz >>>>> > > >>>>> > > On Sunday, May 8, 2016 at 10:33:14 AM UTC+2, Patrick Kofod >>>>> Mogensen wrote: >>>>> > >> As for the v0.5 performance (which is horrible), I think it's the >>>>> boxing >>>>> > >> issue with closure >>>>> https://github.com/JuliaLang/julia/issues/15276 . >>>>> > >> Right? >>>>> > >> >>>>> > >> On Sunday, May 8, 2016 at 10:29:59 AM UTC+2, STAR0SS wrote: >>>>> > >>> You are using a lot of vectorized operations and Julia isn't as >>>>> good as >>>>> > >>> matlab is with those. >>>>> > >>> >>>>> > >>> The usual solution is to devectorized your code and to use loops >>>>> (except >>>>> > >>> for matrix multiplication if you have large matrices). >>>>> >>>>>