Indeed I do :). When is stable release 0.4 comming out ?
Regards, Jan Dňa piatok, 13. marca 2015 14:45:42 UTC+1 Milan Bouchet-Valat napísal(-a): > > Le vendredi 13 mars 2015 à 03:14 -0700, Ján Dolinský a écrit : > > Apparently it was 0.4 ... I tried your f2 on Julia v0.36 and it takes > > forever. f3 is however a blast! > > > > Here are my timing on Julia v0.36: > > > > @time f1(X, 1, 5) > > elapsed time: 2.210965858 seconds (1600177296 bytes allocated, 65.31% > > gc time) > > > > @time f2(X, 1, 5) > > elapsed time: 53.146697892 seconds (22368945936 bytes allocated, > > 41.76% gc time) > > > > @time f3(X, 1, 5) > > elapsed time: 0.142597211 seconds (80 bytes allocated) > > > > > > I assume function sub() in v0.4 is substantially different. > Yes, that relies on the new array views in 0.4. Now you'll have a reason > to update when the release is out! > > > Regards > > > Thanks, > > Jan > > > > Dňa piatok, 13. marca 2015 10:35:45 UTC+1 Ján Dolinský napísal(-a): > > Hi Milan, > > > > Did you run your benchmarks on 0.4 ? > > > > Thanks, > > Jan > > > > Dňa štvrtok, 12. marca 2015 19:19:08 UTC+1 Milan Bouchet-Valat > > napísal(-a): > > Le jeudi 12 mars 2015 à 11:01 -0500, Tim Holy a > > écrit : > > > This is something that many people (understandably) > > have a hard time > > > appreciating, so I think this post should be framed > > and put up on the julia > > > wall. > > > > > > We go to considerable lengths to try to make code > > work efficiently in the > > > general case (check out subarray.jl and subarray2.jl > > in master some time...), > > > but sometimes there's no competing with a > > hand-rolled version for a particular > > > case. Folks should not be shy to implement such > > tricks in their own code. > > Though with the new array views in 0.4, the vectorized > > version should be > > more efficient than in 0.3. I've tried it, and indeed > > it looks like > > unrolling is not really needed, though it's still > > faster and uses less > > RAM: > > > > X = rand(100_000, 5) > > > > function f1(X, i, j) > > for _ in 1:1000 > > X[:, i], X[:, j] = X[:, j], X[:, i] > > end > > end > > > > function f2(X, i, j) > > for _ in 1:1000 > > a = sub(X, :, i) > > b = sub(X, :, j) > > a[:], b[:] = b, a > > end > > end > > > > function f3(X, i, j) > > for _ in 1:1000 > > @inbounds for k in 1:size(X, 1) > > X[k, i], X[k, j] = X[k, j], X[k, i] > > end > > end > > end > > > > > > julia> f1(X, 1, 5); f2(X, 1, 5); f3(X, 1, 5); > > > > julia> @time f1(X, 1, 5) > > elapsed time: 1.027090951 seconds (1526 MB allocated, > > 3.63% gc time in > > 69 pauses with 0 full sweep) > > > > julia> @time f2(X, 1, 5) > > elapsed time: 0.172375013 seconds (390 kB allocated) > > > > julia> @time f3(X, 1, 5) > > elapsed time: 0.155069259 seconds (80 bytes > > allocated) > > > > > > Regards > > > > > --Tim > > > > > > On Thursday, March 12, 2015 07:49:49 AM Steven G. > > Johnson wrote: > > > > As a general rule, with Julia one needs to unlearn > > the instinct (from > > > > Matlab or Python) that "efficiency == clever use > > of library functions", > > > > which turns all optimization questions into "is > > there a built-in function > > > > for X" (and if the answer is "no" you are out of > > luck). Loops are fast, > > > > and you can easily beat general-purpose library > > functions with your own > > > > special-purpose code. > > > >
