It will definitely help to have the code you're using for this. I've have and, am currently doing, a lot of work in Julia on non-dominated sorting, so I would be happy to give any help I can. I have a relatively performant sorting algorithm I've written in Julia and getting 6000+ points down to near 0.5s should be possible.
On Friday, April 24, 2015 at 10:27:08 AM UTC-3, Patrick O'Leary wrote: > > It's helpful if you can post the full code; gist.github.com is a good > place to drop snippets. > > From what I can see here, there are two things: > > (1) No idea if this is in global scope. If so, that's a problem. > > (2) push!() will grow and allocate as needed. It does overallocate so you > won't get a new allocation on every single push, but if you know how big > the final result will be, you can use the sizehint() method to avoid the > repeated reallocations. > > Please read the Performance Tips page for a longer description of (1) and > other information: > http://julia.readthedocs.org/en/latest/manual/performance-tips/ > > > On Friday, April 24, 2015 at 7:47:38 AM UTC-5, Ronan Chagas wrote: >> >> Hi guys! >> >> I am coding MGEO algorithm into a Julia module. >> MGEO is a multiobjective evolutionary algorithm that was proposed by a >> researcher at my institution. >> >> I have already a version of MGEO in C++ ( >> https://github.com/ronisbr/mgeocpp). >> >> The problem is that Julia version is very slow compared to C++. >> When I tried a dummy example, it took 0.6s in C++ and 60s in Julia. >> >> After some analysis, I realized that the problem is the loop through a >> list. >> The algorithm store a list of points (the Pareto frontier) and for every >> iteration the algorithm must go through every point in this list comparing >> each one with the new candidate to be at the frontier. >> The problem is that, for this dummy example, the process is repeated >> 128,000 times and the number of points in the frontier at the end is 6,000+. >> >> Each point in the list is an instance of this type: >> >> type ParetoPoint >> # Design variables. >> vars::Array{Float64,1} >> # Objective functions. >> f::Array{Float64, 1} >> end >> >> I am creating the list (the Pareto frontier) as follows >> >> paretoFrontier = ParetoPoint[] >> >> and pushing new points using >> >> push!(paretoFrontier, candidatePoint) >> >> in which candidatePoint is an instance of ParetoPoint. >> >> Can anyone help me to optimize this code? >> >> Thanks, >> Ronan >> >