There is no question that Julia needs more work. This applies to offering speedy primitives and also doing more optimizations. But I think you get one thing wrong. The magic lays in the fact, that in Julia you have the chance to write the vectorized implementation that are offered by languages like R or Matlab in Julia itself. In that case Julia still offers much more comfort than the usual suspects (C/C++ fortran). It's not only more comfortable but also makes the high performance code easier to maintain. And in theory, that gives you more room for optimizations, since the compiler does not have to optimize outside the border of the language.
It also means, that some person like you and me can go out there, write some functions that incoorperates the speed improvement achieved in this thread and offer it to other people so they can write higher level and fast code in the end. That's basically what the Matlab team does (in C++ and Java) and they have had much more time and resources to do this. So no, just because Matlab already has some speedy, optimized primitives written in C++ and better loop fusion, which Julia still doesn't have, Julia does not become irrelevant. Am Samstag, 19. September 2015 19:50:50 UTC+2 schrieb Adam: > > Hi, I'm a novice to Julia but have heard promising things and wanted to > see if the language can help with a problem I'm working on. I have some > Matlab code with some user-defined functions that runs a simulation in > about ~1.4 seconds in Matlab (for a certain set of parameters that > characterize a small problem instance). I translated the code into Julia, > and to my surprise the Julia code runs 5x to 30x slower than the Matlab > code. I'll be running this code on much larger problem instances many, many > times (within some other loops), so performance is important here. > > I created a GitHub gist that contains a stripped-down version of the Julia > code that gets as close to (as I can find) the culprit of the problem. The > gist is here: https://gist.github.com/anonymous/010bcbda091381b0de9e. A > quick description: > > - set_up.jl sets up parameters and other items. > - set_up_sim.jl sets up items particular to the simulation. > - simulation.jl runs the simulation. > - calc_net.jl, dist_o_i.jl, and update_w.jl are user-defined functions > executed in the simulation. > > > On my laptop (running in Juno with Julia version 0.3.10), this code yields: > elapsed time: 43.269609577 seconds (20297989440 bytes allocated, 38.77% gc > time) > elapsed time: 38.500054653 seconds (20291872804 bytes allocated, 40.41% gc > time) > elapsed time: 40.238907235 seconds (20291869252 bytes allocated, 39.44% gc > time) > > Why is so much memory used, and why is so much time spent in garbage > collection? > > I'm familiar with > http://docs.julialang.org/en/release-0.3/manual/performance-tips/ and > have tried to follow these tips to the best of my knowledge. One example of > what might be seen as low-hanging fruit: I tried removing the type > declarations from my functions, but this actually increased the run-time of > the code by a few seconds. Also, other permutations of the column orders > pertaining to D, T, and I led to slower performance. > > I'm sure there are several issues at play here-- I'm just using Julia for > the first time. Any tips would be greatly appreciated. >
