My first suggestion to anyone trying to write fast Julia programs is to 
read http://docs.julialang.org/en/latest/manual/performance-tips/, those 
are all good tips that I do not think will get obsolete when Julia 
improves. It seems to me like you know those points.

I think you get an important hint from the fact that devectorization does 
not matter. To me it seems like the current bottleneck is because you use a 
anonymous function instead of a regular function. When I replace "f(" by 
"gravity(" i get some improvement and then your devectorisation attempts 
makes significant difference. Further you might want to try to reduce the 
amount of memory allocated, but that seems to complicate your code quite 
much.

My improvements reduces the timing as follows for 1000 iterations.
ivar@Ivar-ubuntu:~/tmp$ julia doptest.jl 
elapsed time: 0.878398771 seconds (513399840 bytes allocated)
ivar@Ivar-ubuntu:~/tmp$ julia dopitest.jl 
elapsed time: 0.16916126 seconds (122423840 bytes allocated)


kl. 11:07:30 UTC+1 onsdag 18. desember 2013 skrev Helge Eichhorn følgende:
>
> Hi,
>
> I spent the last few days porting the well known 
> DOP853<http://www.unige.ch/~hairer/software.html>integrator to Julia. The 
> process was quite smooth and I have implemented 
> the core functionality.
> However when I run my reference case, a numerical solution of the two-body 
> problem, I get the following timings:
>
>    - *Fortran* (gfortran 4.8.2 no optimizations): *~1.7e-5s*
>    - *Julia* (master, looped): *~1.3e-3s*
>    - *Julia* (master, vectorized): 
> *~1e-3s (!) *
>
> I have posted the Julia code and the Fortran reference in this 
> Gist<https://gist.github.com/helgee/8019521>. 
> The computationally expensive part seems to be contained in the *dopcore *or 
> *dopcorevec *function, respectively. What I really do not understand is, 
> why the vectorized expressions seem to run faster or rather what I am doing 
> wrong here.
>
> Any ideas or suggestions? Many thanks in advance!
> Helge
>

Reply via email to