[erlang-questions] Parallel Shootout & a style question

Kevin Scaldeferri <>
Tue Sep 2 04:42:37 CEST 2008


Yeah, actually it does.  I rewrote it as:


depthLoop(D,M) ->
     Results = rpc:pmap({?MODULE, depth}, [M], lists:seq(D, M, 2)),
     lists:foreach(fun(Result) ->
                           io:fwrite("~w\t trees of depth ~w\t check:  
~w~n", Result)
                   end,
                   Results).

depth(D,M) ->
     N = 1 bsl (M-D + ?Min),
     [ 2*N, D, sumLoop(N,D,0) ].


which is cleaner, just as fast, and preserves the original order of  
the output.


-kevin



On Sep 1, 2008, at 7:16 PM, Edwin Fine wrote:

> Um, dunno if this helps, but have you looked at rpc:pmap/3?
>
> On Mon, Sep 1, 2008 at 8:33 PM, Kevin Scaldeferri < 
> > wrote:
> 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
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
>
>
>
> -- 
> For every expert there is an equal and opposite expert - Arthur C.  
> Clarke




More information about the erlang-questions mailing list