Just use a 7x100 array? Otherwise, using an immutable instead of a type should be as efficient if it is a bits-type, i.e. isbits returns true.
On Sun, 2015-03-08 at 19:52, Daniel Carrera <[email protected]> wrote: > Hello everyone, > > I want to do n-body simulations with Julia. The number of particles is > small (10 to 100) but the simulation runs for tens of millions of orbits > and I want to optimize them. The most natural way to implement this is to > have one array for every particle property: > > x = Array(Float64,nbodies) # x coordinates > y = Array(Float64,nbodies) # y coordinates > z = Array(Float64,nbodies) # z coordinates > u = Array(Float64,nbodies) # u coordinates > v = Array(Float64,nbodies) # v coordinates > w = Array(Float64,nbodies) # w coordinates > m = Array(Float64,nbodies) # m coordinates > > > That means that when I compute the force between two particles I need to > access 7 x 2 = 14 values that are not sequential in memory. So I was > thinking that it might be worth making a new type: > > type TBody > x::TFloat > y::TFloat > z::TFloat > u::TFloat > v::TFloat > w::TFloat > m::TFloat > end > bodies = Array(TBody,nbodies) > > So, when I compute the force between two particles, I should only need to > access two bits of memory. But on the other hand, maybe this is all a waste > of time. With only 100 particles, and 7 doubles per particle, the entire > memory cost is about 5 kb and it all fits easily inside the CPU's L1 cache. > So maybe this is just a classical example of premature optimization that > has no value whatsoever. > > Can anyone give me an opinion here? Is there something I haven't thought of? > > Cheers, > Daniel.
