> It's part of #3440, the compiler optimization metabug: "function-valued > argument inlining" > > https://github.com/JuliaLang/julia/issues/3440
Thanks, and yes, I'm aware of that one. For me it's a bit hard to tell, will the "function-valued argument inlining" solve all the higher order function problems? And is the problem described below, not quite a bit easier to solve? > On Thursday, April 23, 2015 at 9:34:48 AM UTC-5, Mauro wrote: >> >> Thanks! In that case, I'll file an issue then to get this noted. Also, >> I think there is no (general) issue on the bad performance of higher >> order functions. Should I file that too? >> >> On Thu, 2015-04-23 at 15:52, Jameson Nash <[email protected]> wrote: >> > The short answer is that there is a certain set of optimizations that >> have >> > been implemented in Julia, but still a considerable set that has not >> been >> > implemented. This falls into the category of optimizations that have not >> > been implemented. Pull requests are always welcome (although I do not >> > recommend this one as a good beginner / "up-for-grabs" issue). >> > >> > On Thu, Apr 23, 2015 at 9:18 AM Mauro <[email protected]> wrote: >> > >> >> It is well know that Julia struggles with type inference in higher >> order >> >> functions. This usually leads to slow code and memory allocations. >> >> There are a few hacks to work around this. Anyway, the question I have >> >> is: Why can't Julia do better with in-place functions? >> >> >> >> In short, a higher-order function like this: >> >> >> >> function f(fn!,ar) >> >> for i=1:n >> >> fn!(ar, i) # fn! updates ar[i] somehow, returns nothing >> >> nothing # to make sure output of f is discarded >> >> end >> >> end >> >> >> >> has almost as bad a performance (runtime and allocation-wise) as >> >> >> >> function g(fn,ar) >> >> for i=1:n >> >> ar[i] = fn(ar[i]) >> >> end >> >> end >> >> >> >> A in-depth, ready to run example is here: >> >> https://gist.github.com/mauro3/f17da10247b0bad96f1a >> >> Including output of @code_warntype. >> >> >> >> So, why is Julia allocating memory when running f? Nothing of f gets >> >> assigned to anything. >> >> >> >> Would this be something which is fixable more easily than the whole of >> >> the higher-order performance issues? If so, is there an issue for >> this? >> >> >> >> Having good in-place higher order functions would go a long way with >> >> numerical computations. Thanks! >> >> >> >>
