On 16/02/2013, at 7:48 PM, john skaller wrote:
>
> On 16/02/2013, at 7:36 PM, john skaller wrote:
>
>> So the bug is now fixed. And horribly, nbody is now working correctly
>> but is as slow as a very wet Sydney week.
>
>
> PROGRAM nbody
> Felix: clang -O2 327.793
> C: clang 3.3 -O2 21.724
> C: gcc 4.2.1 -O2 20.73
> Ocaml 3.11.1 31.57
>
> Ooops .. that's not just sub-light speed .. that's downright sub-sonic :)
So now, the clue to the problem in the optimiser. I rewrote the
routine making everything a var (eager evaluation), and,
factoring out all common factors manually, including using
pointers like C does. The new Advance routine looks like this:
noinline proc Advance(dt: double){
var i: int; var j:int;
for i in 0 upto nbodies - 1 do
var pi = &bodies.i;
var bimass = pi*.mass;
var delta = 0.0,0.0,0.0;
for j in i+1 upto nbodies - 1 do
var pj = &bodies.j;
var bjmass : double = pj*.mass;
var d : vec = pi*.pos - pj*.pos;
var d2 : double = sqr d;
var distance : double = sqrt d2;
var d23 : double = dt / (distance * d2);
var ddd : vec = d * d23;
delta = delta + bjmass * ddd;
pj.vel <- pj*.vel + bimass * ddd;
done;
pi.vel <- pi*.vel - delta;
done;
for i in 0 upto nbodies - 1 do
pi = &bodies.i;
pi.pos <- pi*.pos + dt * pi*.vel;
done;
}
And now:
~/felix>flx -O2 --static -c nb
~/felix>time ./nb
-0.169075164
-0.169059907
real 0m23.224s
user 0m23.196s
sys 0m0.021s
which is roughly the same speed as C and faster than Ocaml.
This is good, because now I can look at the generated code,
then "undo" various hand optimisations to see which ones make
a difference, and try to figure out how the compiler can do them.
I am guessing the "lazy evaluation" thing is causing the problem
by copying and evaluating big structures and then grabbing
only one part of them, then doing the same again for the next part.
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
The Go Parallel Website, sponsored by Intel - in partnership with Geeknet,
is your hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials, tech docs,
whitepapers, evaluation guides, and opinion stories. Check out the most
recent posts - join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language