[erlang-questions] Parallel Shootout & a style question
Kevin Scaldeferri
kevin@REDACTED
Tue Sep 2 02:33:47 CEST 2008
First, I don't think it's been mentioned here, but the language
benchmarks shootout finally got some multi-core hardware!
http://shootout.alioth.debian.org/u64q/
At the moment, though, there are almost no submissions of parallelized
code, so the results are about the same as the existing hardware.
I figured (slightly spurred on by the Haskell community) that we
should try to submit some modified versions that actually use the
multiple cores. So, for example, I made a slight change to the binary
trees code and got a nearly 2x speedup on my 2-core machine. In doing
so, I did run into one of those little things that I've never really
known the preferred approach for. My modified function looks like this:
depthLoop(D,M) when D > M -> ok;
depthLoop(D,M) ->
Self = self(),
spawn(fun() ->
N = 1 bsl (M-D + ?Min),
io:fwrite("~w\t trees of depth ~w\t check: ~w~n",
[ 2*N, D, sumLoop(N,D,0) ]),
Self ! done
end),
depthLoop (D+2,M),
receive done -> done end.
parallelizing would only require the addition of the spawn, except
that if I do that, the function finishes executing and the program
exits before most of the processes run at all. So, I need to add the
call to self(), the send, and the receive in order to prevent
premature termination. So, what I'm wondering is, is there a better
idiom for achieving this goal?
Thanks,
-kevin
More information about the erlang-questions
mailing list