2016-10-26 13:09 GMT+02:00 DNF <oyv...@gmail.com>: > I don't have the impression that reduce is slow. The reduce function that > you're using is complicated and may have features that preclude > optimizations, such as vectorization. >
I don't know exactly why, the difference is bigger than what I was expected. for example with A and F = rand(100_000_000) I have: mapeBase_v1 BenchmarkTools.Trial: samples: 26 evals/sample: 1 time tolerance: 5.00% memory tolerance: 1.00% memory estimate: 32.00 bytes allocs estimate: 1 minimum time: 194.51 ms (0.00% GC) median time: 197.77 ms (0.00% GC) mean time: 198.77 ms (0.00% GC) maximum time: 220.32 ms (0.00% GC) mapeBase_v4 BenchmarkTools.Trial: samples: 1 evals/sample: 1 time tolerance: 5.00% memory tolerance: 1.00% memory estimate: 37.25 gb allocs estimate: 1799998401 minimum time: 58.77 s (3.04% GC) median time: 58.77 s (3.04% GC) mean time: 58.77 s (3.04% GC) maximum time: 58.77 s (3.04% GC) If you have tips to help me understand this huge difference and eventually optimize (I've tried to look at llvm ir but it's quite hard for my level, I've just noted a lot of "store" but don't understand why it's done this way) > > But perhaps more importantly, the reduce version, while probably very > clever, is almost completely impossible to understand. I know what it's > supposed to do, and I still cannot decipher it, while the straight loop is > crystal clear and easy to understand. And almost as concise! > "crystal clear"... depends on your background and habits. V4 is more natural for me than V1, probably because when I need a single result (sum, abs...) from a list of values my first option is always reduce, and I assimilate for loop with kind of "repeat something for each of these values" Then I also avoid nested blocks and use a lot guard clauses at the point I read them as a part of function signature (by default I would naturally extract v1 for loop content to a function with a guard clause), so my eyes only catch the operation used to reduce the list in the form of the expected result. This is not adapted to julia and I have to change these habits which is not a problem as julia is such a pleasure to use.