Thanks Daniel! That code ran in about 0.3 seconds on my machine as well. 
More good progress! This puts Julia about ~5x faster than Matlab here. 

I tried placing "return sim" at the end of your main() function, but I 
still got an error saying "sim not defined." Why is that? Can I return 
output from the simulation?

On Sunday, September 20, 2015 at 4:14:08 PM UTC-5, Kristoffer Carlsson 
wrote:
>
> Oh, if you are on 0.3 I am not sure if slice exist. If it does, it is 
> really slow.
>
> On Sunday, September 20, 2015 at 11:13:21 PM UTC+2, Kristoffer Carlsson 
> wrote:
>>
>> For me, your latest changes made the time go from 0.13 -> 0.11. It is 
>> strange we have so different performances, but then again 0.3 and 0.4 are 
>> different beasts.
>>
>> Adding some calls to slice and another loop gained some perf for me. Can 
>> you try:
>>
>> https://gist.github.com/KristofferC/8a8ff33cb186183eea8d
>>
>> On Sunday, September 20, 2015 at 9:36:20 PM UTC+2, Daniel Carrera wrote:
>>>
>>> Just another note:
>>>
>>> I suspect that the `reshape()` might be the guilty party. I am just 
>>> guessing here, but I suspect that the reshape() forces a memory copy, while 
>>> a regular slice just creates kind of symlink to the original data. 
>>> Furthermore, I suspect that the memory copy would mean that when you try to 
>>> read from the newly created variable, you have to fetch it from RAM, 
>>> despite the fact that the CPU cache already has a perfectly good copy of 
>>> the same data.
>>>
>>> Cheers,
>>> Daniel.
>>>
>>>
>>> On 20 September 2015 at 21:25, Daniel Carrera <dcar...@gmail.com> wrote:
>>>
>>>> Whoo hoo! It looks like I got another ~6x or ~7x improvement. Using 
>>>> Profile.print() I found that the hottest parts of the code appeared to be 
>>>> the if-conditions, such as:
>>>>
>>>>         if o < b_hist[j,3]
>>>>
>>>> It occurred to me that this could be due to cache misses, so I rewrote 
>>>> the code to store the data more compactly:
>>>>
>>>> -  b_hist = reshape(sim.b[d, 1:t, i, :], t, 3)
>>>> +  b_hist_1 = sim.b[d, 1:t, i, 1]
>>>> +  b_hist_3 = sim.b[d, 1:t, i, 3]
>>>> ...
>>>> -        if o < b_hist[j,3]
>>>> +        if o < b_hist_3[j]
>>>>
>>>>
>>>> So, instead of an 3xN array, I store two 1xN arrays with the data I 
>>>> actually want. I suspect that the biggest improvement is not that there is 
>>>> 1/3 less data, but that the data just gets managed differently. The upshot 
>>>> is that now the program runs 208 times faster for me than it did 
>>>> initially. 
>>>> For me time execution time went from 45s to 0.2s.
>>>>
>>>> As always, the code is updated on Github:
>>>>
>>>> https://github.com/dcarrera/sim
>>>>
>>>> Cheers,
>>>> Daniel.
>>>>
>>>>
>>>>
>>>> On 20 September 2015 at 20:51, Seth <catc...@bromberger.com> wrote:
>>>>
>>>>> As an interim step, you can also get text profiling information using 
>>>>> Profile.print() if the graphics aren't working.
>>>>>
>>>>> On Sunday, September 20, 2015 at 11:35:35 AM UTC-7, Daniel Carrera 
>>>>> wrote:
>>>>>>
>>>>>> Hmm... ProfileView gives me an error:
>>>>>>
>>>>>> ERROR: panzoom not defined
>>>>>>  in view at 
>>>>>> /home/daniel/.julia/v0.3/ProfileView/src/ProfileViewGtk.jl:32
>>>>>>  in view at /home/daniel/.julia/v0.3/ProfileView/src/ProfileView.jl:51
>>>>>>  in include at ./boot.jl:245
>>>>>>  in include_from_node1 at ./loading.jl:128
>>>>>> while loading /home/daniel/Projects/optimization/run_sim.jl, in 
>>>>>> expression starting on line 55
>>>>>>
>>>>>> Do I need to update something?
>>>>>>
>>>>>> Cheers,
>>>>>> Daniel.
>>>>>>
>>>>>> On 20 September 2015 at 20:28, Kristoffer Carlsson <
>>>>>> kcarl...@gmail.com> wrote:
>>>>>>
>>>>>>> https://github.com/timholy/ProfileView.jl is invaluable for 
>>>>>>> performance tweaking.
>>>>>>>
>>>>>>> Are you on 0.4?
>>>>>>>
>>>>>>> On Sunday, September 20, 2015 at 8:26:08 PM UTC+2, Milan 
>>>>>>> Bouchet-Valat wrote:
>>>>>>>>
>>>>>>>> Le dimanche 20 septembre 2015 à 20:22 +0200, Daniel Carrera a écrit 
>>>>>>>> : 
>>>>>>>> > 
>>>>>>>> > 
>>>>>>>> > On 20 September 2015 at 19:43, Kristoffer Carlsson < 
>>>>>>>> > kcarl...@gmail.com> wrote: 
>>>>>>>> > > Did you run the code twice to not time the JIT compiler? 
>>>>>>>> > > 
>>>>>>>> > > For me, my version runs in 0.24 and Daniels in 0.34. 
>>>>>>>> > > 
>>>>>>>> > > Anyway, adding this to Daniels version: 
>>>>>>>> > > https://gist.github.com/KristofferC/c19c0ccd867fe44700bd makes 
>>>>>>>> it 
>>>>>>>> > > run in 0.13 seconds for me. 
>>>>>>>> > > 
>>>>>>>> > > 
>>>>>>>> > 
>>>>>>>> > Interesting. For me that change only makes a 10-20% improvement. 
>>>>>>>> On 
>>>>>>>> > my laptop the program takes about 1.5s which is similar to 
>>>>>>>> Adam's. So 
>>>>>>>> > I guess we are running on similar hardware and you are probably 
>>>>>>>> using 
>>>>>>>> > a faster desktop. In any case, I added the change and updated the 
>>>>>>>> > repository: 
>>>>>>>> > 
>>>>>>>> > https://github.com/dcarrera/sim 
>>>>>>>> > 
>>>>>>>> > Is there a good way to profile Julia code? So I have been 
>>>>>>>> profiling 
>>>>>>>> > by inserting tic() and toc() lines everywhere. On my computer 
>>>>>>>> > @profile seems to do the same thing as @time, so it's kind of 
>>>>>>>> useless 
>>>>>>>> > if I want to find the hot spots in a program. 
>>>>>>>> Sure : 
>>>>>>>> http://julia.readthedocs.org/en/latest/manual/profile/ 
>>>>>>>>
>>>>>>>>
>>>>>>>> Regards 
>>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>

Reply via email to