- Erlang¤ò»Ï¤á¤¿¤Î¤Ï¡¢N times faster on an N core processor¤È¤¤¤¦¸ÀÍդ˼椫¤ì¤¿¤«¤é
- ËÜÅö¤Ë¤½¤¦¤Ê¤Î¤«»î¤·¤Æ¤ß¤¿¡£
- 2¥³¥¢¤Ç»î¤·¤¿¤È¤³¤í¡¢ÂçÂΤ½¤ó¤Ê·ë²Ì¤Ë¤Ê¤Ã¤¿¡£
- »þ´Ö¤òÂ䶤¹¤ë¤¿¤á¡¢½Å¤¤´Ø¿ô¤òÍÑ°Õ
- ñ½ã¤Ê¥Õ¥£¥Ü¥Ê¥Ã¥Á¤Ë¤¹¤ë¡£
fib(2) -> 1;
fib(N) ->
fib(N-2) + fib(N-1).
start2(A,B) ->
io:format("start : ~p~n",[now()]),
io:format("~p~n",[fib(A)]),
io:format("~p~n",[fib(B)]),
io:format("end : ~p~n",[now()]).
io:format("start : ~p~n",[now()]),
io:format("~p~n",[fib(A)]),
io:format("~p~n",[fib(B)]),
io:format("end : ~p~n",[now()]).
fiba() ->
receive
{N, Pid} ->
A = fib(N),
Pid ! {self(), A}
end.
start(A,B) ->
io:format("start : ~p~n",[now()]),
P1 = spawn(?MODULE, fiba, []),
P2 = spawn(?MODULE, fiba, []),
P10 = spawn(?MODULE, waitres, [P1]),
P20 = spawn(?MODULE, waitres, [P2]),
P1 ! {A, P10},
P2 ! {B, P20},
ok.
waitres(Pid) ->
receive
{Pid, N} ->
io:format("waitres: ~p ~p ~p~n",[now(), Pid, N])
end.
receive
{N, Pid} ->
A = fib(N),
Pid ! {self(), A}
end.
start(A,B) ->
io:format("start : ~p~n",[now()]),
P1 = spawn(?MODULE, fiba, []),
P2 = spawn(?MODULE, fiba, []),
P10 = spawn(?MODULE, waitres, [P1]),
P20 = spawn(?MODULE, waitres, [P2]),
P1 ! {A, P10},
P2 ! {B, P20},
ok.
waitres(Pid) ->
receive
{Pid, N} ->
io:format("waitres: ~p ~p ~p~n",[now(), Pid, N])
end.
- ¼ê¸µ¤ÎPC(Athlon X2)¤Çfib(40)¤ò2¤Ä(start2(40,40), start(40,40))¹Ô¤Ã¤¿¤È¤³¤í¡¢
- Ã༡½èÍýÈÇ¡¦¡¦¡¦Ìó47ÉÃ
- ʹԽèÍýÈÇ¡¦¡¦¡¦Ìó25ÉÃ
- ÂçÂÎȾʬ¤Ë¤Ê¤Ã¤¿¡£
- ¥·¥¹¥Æ¥à¥â¥Ë¥¿¤Ç¤ß¤Æ¤¤¤ë¤È¡¢
- Ã༡½èÍýÈǤǤϡ¢1¤Ä¤Î¥³¥¢¤Î¤ß100%¤Ë¤Ê¤ë¤Î¤ËÂФ·¡¢
- ʹԽèÍýÈǤǤϡ¢2¤Ä¤Î¥³¥¢Î¾Êý¤¬100%¤È¤Ê¤ê¡¢
- ʹԽèÍý¤Î²¸·Ã¤¬´¶¤¸¤é¤ì¤¿¡£
- N times faster on an N core processor
¤È¤¤¤¦¤Î¤â¤¢¤Ê¤¬¤Á¤¦¤½¤Ç¤Ï¤Ê¤¤¡£ - ¤¿¤À¤·¡¢¤³¤ì¤ÏʹԽèÍý¤Ç¤¤ë¤â¤Î¤¬¥³¥¢¤Î¿ô¤À¤±¤¢¤ë¤È¤¤¬
ºÇ¤â¸úΨ¤¬¤è¤¯¤Ê¤ë¤³¤È¤Ëα°Õ- fib¤ò1¸Ä¤À¤±¹Ô¤¦¤È¤¤Ï¡¢¥³¥¢¤¬Áý¤¨¤Æ¤â¸ú²Ì¤Ï¤Ê¤¤¡£
¥³¥á¥ó¥È¤ò¤«¤¯