-module(ring3). -include("debug.hrl"). -export([start/2]). %% ring benchmark using lists methods start(N, M) -> io:format("Starting ring benchmark on pid=~p, N = ~p, M = ~p.~n", [self(), N, M]), statistics(wall_clock), statistics(runtime), Last = lists:foldl(fun (X, Pid) -> spawn(fun () -> loop(X, Pid) end) end, self(), lists:seq(N-1, 1, -1)), lists:foreach(fun (X) -> send(X, Last) end, lists:seq(M-1, 0, -1)), {_, WC} = statistics(wall_clock), {_, RT} = statistics(runtime), io:format("Done running ring benchmark in Wall Clock = ~p, Runtime = ~p.~n", [WC, RT]). send(X, Pid) -> ?DEBUG("sending X=~p to ring.~n", [X]), Pid ! X, receive Xm -> ?DEBUG("main node done waiting for x = ~p.~n", [Xm]) end. loop(Nth, Pid) -> receive X when X =:= 0 -> ?DEBUG("~p dying.~n", [Nth]), Pid ! X; X -> ?DEBUG("~p got message.~n", [Nth]), Pid ! X, loop(Nth, Pid) end.
Pages
January 3, 2011
Erlang Ring Benchmark Part 2
Using list comprehensions - results in more compact code.
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment