thanks peter. I made that devectorizing change after dalua suggested so. It made a massive difference!
On Tuesday, 17 June 2014, Peter Simon <psimon0...@gmail.com> wrote: > You're right. Replacing the NumericExtensions function calls with a small > loop > > maxDifference = 0.0 > for k = 1:length(mValueFunction) > maxDifference = max(maxDifference, abs(mValueFunction[k]- > mValueFunctionNew[k])) > end > > > makes no significant difference in execution time or memory allocation and > eliminates the dependency. > > --Peter > > > On Tuesday, June 17, 2014 10:05:03 AM UTC-7, Andreas Noack Jensen wrote: >> >> ...but the Numba version doesn't use tricks like that. >> >> The uniform metric can also be calculated with a small loop. I think that >> requiring dependencies is against the purpose of the exercise. >> >> >> 2014-06-17 18:56 GMT+02:00 Peter Simon <psimo...@gmail.com>: >> >>> As pointed out by Dahua, there is a lot of unnecessary memory >>> allocation. This can be reduced significantly by replacing the lines >>> >>> maxDifference = maximum(abs(mValueFunctionNew-mValueFunction)) >>> mValueFunction = mValueFunctionNew >>> mValueFunctionNew = zeros(nGridCapital,nGridProductivity) >>> >>> >>> >>> >>> with >>> >>> maxDifference = maximum(abs!(subtract!(mValueFunction, >>> mValueFunctionNew))) >>> (mValueFunction, mValueFunctionNew) = (mValueFunctionNew, >>> mValueFunction) >>> fill!(mValueFunctionNew, 0.0) >>> >>> >>> >>> abs! and subtract! require adding the line >>> >>> using NumericExtensions >>> >>> >>> >>> prior to the function line. I think the OP used Julia 0.2; I don't >>> believe that NumericExtensions will work with that old version. When I >>> combine these changes with adding >>> >>> @inbounds begin >>> ... >>> end >>> >>> >>> >>> block around the "while" loop, I get about 25% reduction in execution >>> time, and reduction of memory allocation from roughly 700 MByte to 180 MByte >>> >>> --Peter >>> >>> >>> On Tuesday, June 17, 2014 9:32:34 AM UTC-7, John Myles White wrote: >>> >>>> Sounds like we need to rerun these benchmarks after the new GC branch >>>> gets updated. >>>> >>>> -- John >>>> >>>> On Jun 17, 2014, at 9:31 AM, Stefan Karpinski <ste...@karpinski.org> >>>> wrote: >>>> >>>> That definitely smells like a GC issue. Python doesn't have this >>>> particular problem since it uses reference counting. >>>> >>>> >>>> On Tue, Jun 17, 2014 at 12:21 PM, Cristóvão Duarte Sousa < >>>> cri...@gmail.com> wrote: >>>> >>>>> I've just done measurements of algorithm inner loop times in my >>>>> machine by changing the code has shown in this commit >>>>> <https://github.com/cdsousa/Comparison-Programming-Languages-Economics/commit/4f6198ad24adc146c268a1c2eeac14d5ae0f300c> >>>>> . >>>>> >>>>> I've found out something... see for yourself: >>>>> >>>>> using Winston >>>>> numba_times = readdlm("numba_times.dat")[10:end]; >>>>> plot(numba_times) >>>>> >>>>> >>>>> <https://lh6.googleusercontent.com/-m1c6SAbijVM/U6BpmBmFbqI/AAAAAAAADdc/wtxnKuGFDy0/s1600/numba_times.png> >>>>> julia_times = readdlm("julia_times.dat")[10:end]; >>>>> plot(julia_times) >>>>> >>>>> >>>>> <https://lh4.googleusercontent.com/-7iprMnjyZQY/U6Bp8gHVNJI/AAAAAAAADdk/yUgu8RyZ-Kw/s1600/julia_times.png> >>>>> println((median(numba_times), mean(numba_times), var(numba_times))) >>>>> (0.0028225183486938477,0.0028575707378805993,2.4830103817464292e-8) >>>>> >>>>> println((median(julia_times), mean(julia_times), var(julia_times))) >>>>> (0.0028240440000000004,0.0034863882123824454,1.7058255003790299e-6) >>>>> >>>>> So, while inner loop times have more or less the same median on both >>>>> Julia and Numba tests, the mean and variance are higher in Julia. >>>>> >>>>> Can that be due to the garbage collector being kicking in? >>>>> >>>>> >>>>> On Monday, June 16, 2014 4:52:07 PM UTC+1, Florian Oswald wrote: >>>>>> >>>>>> Dear all, >>>>>> >>>>>> I thought you might find this paper interesting: http://economics. >>>>>> sas.upenn.edu/~jesusfv/comparison_languages.pdf >>>>>> >>>>>> It takes a standard model from macro economics and computes it's >>>>>> solution with an identical algorithm in several languages. Julia is >>>>>> roughly >>>>>> 2.6 times slower than the best C++ executable. I was bit puzzled by the >>>>>> result, since in the benchmarks on http://julialang.org/, the >>>>>> slowest test is 1.66 times C. I realize that those benchmarks can't cover >>>>>> all possible situations. That said, I couldn't really find anything >>>>>> unusual >>>>>> in the Julia code, did some profiling and removed type inference, but >>>>>> still >>>>>> that's as fast as I got it. That's not to say that I'm disappointed, I >>>>>> still think this is great. Did I miss something obvious here or is there >>>>>> something specific to this algorithm? >>>>>> >>>>>> The codes are on github at >>>>>> >>>>>> https://github.com/jesusfv/Comparison-Programming-Languages-Economics >>>>>> >>>>>> >>>>>> >>>> >>>> >> >> >> -- >> Med venlig hilsen >> >> Andreas Noack Jensen >> >