Hi Adam,
Welome to Julia!
Just to check - are you calling your `simulation(…)` function before you time
it? Otherwise your timing will include the time it takes to compile the
function, which happens the first time it’s called with a given set of argument
types.
Your `param` dict is of type (Any, Any), which means that the compiler doesn’t
know anything about the type of objects inside it. You’re doing a lot of access
into the dict in your inner loops, which causes similar issues to accessing
global variables. It will probably speed things up if you declare it at
`params{String, Float64}()` instead (or whatever the type of the parameters
is), or give the parameters as arguments to your simulation function (probably
best).
-s
> On Sep 19, 2015, at 12:44 PM, Adam <[email protected]> wrote:
>
> 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.