sim is defined inside the while loop which means that it goes out of scope after the while loop end, see: http://julia.readthedocs.org/en/latest/manual/variables-and-scoping/
If you want to run a number of sims you could for example create an empty vector in the start of main and push the sims into it and then return the vector of sims in the end of the function. On Sunday, September 20, 2015 at 11:50:18 PM UTC+2, Adam wrote: > > 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 <[email protected]> >>>> 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 <[email protected]> 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 < >>>>>>> [email protected]> 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 < >>>>>>>>> > [email protected]> 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 >>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>>
