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. 

Reply via email to