With all that done, the julia code runs about the same if not better than matlab (using 4 threads)
On Sunday, May 8, 2016 at 2:21:42 PM UTC-4, feza wrote: > > 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). >>>>>> >>>>>>
