<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 9pt;
font-family:±¼¸²
}
</style>
</head>
<body class='hmmessage'>
Dear All,<br><br>When I tested pingpong test, Erlang takes long time even though the data size is 0/1/2/4/8 bytes.<br>
MPI takes around 0.0025 microseconds/iteration when the data size 0/1/2/4/8 bytes.<br>
However Erlang takes around 0.5 microseconds/iteration at least. (within one core)<br>
<br>I tried to find the underlying reasons that there is higher overhead involved in message
passing in Erlang when compared to MPI,<br>but I couldn't find it yet at "The erlang-questions Archives".<br><br><b>How can we explain the situation that Erlang takes long time even though the data size is very small (e.g. 0 or 1)?</b><br><b>Why the communication overhead is very big?</b> When the data size is 16KB, Erlang was slower than MPI at least thousands time.<br><b>Where can I find the explanation?</b><br><br>Also I tested two pingpong case: (1) with data('a') and (2) without data.<br>(1) takes 0.336 us, but (2) takes 0.0000000059 us. It's very different.<br>Can we tell initial data related setup takes long time?<br><br>Thanks,<br>Mikyung<br><br><br>(1)<br>-module(tut15).<br>-export([run/0]).<br><br>-include("imb.hrl").<br><br>ping(0, _, _) -><br>    done;<br><br>ping(R, D, Pong) -><br>    Pong ! {self(), D},<br>    receive<br>        {Pong, D} -><br>    ping(R - 1, D, Pong)<br>    end.<br><br>pong() -><br>    receive<br>        {From, D} -> <br>            From ! {self(), D}, <br>            pong()<br>    end.<br><br>run() -><br>    R = 1000,<br>    D = 'a', %D = "abcdefghij",<br>    Pong = spawn(fun()-> pong() end),<br>  TimeStart = imb:time_microseconds(),<br>    ping(R, D, Pong),<br>  TimeEnd = imb:time_microseconds(),<br>  io:format("Time in microseconds: ~p~n", [TimeEnd - TimeStart]).<br><br><br><br>(2)<br>-module(tut15).<br>-export([start/0, ping/2, pong/0]).<br><br>-include("imb.hrl").<br><br>ping(0, Pong_PID) -><br>    Pong_PID ! finished;<br><br>ping(N, Pong_PID)
 -><br>    Pong_PID ! {ping, self()},<br>    receive<br>        pong -><br>        ping(N - 1, Pong_PID)<br>    end.<br><br>pong() -><br>    receive<br>        {ping, Ping_PID} -><br>            Ping_PID ! pong,<br>            pong()<br>    end.<br><br>start() -><br>  TimeStart = imb:time_microseconds(),<br>    Pong_PID = spawn(tut15, pong, []),<br>   
 spawn(tut15, ping, [1000, Pong_PID]),<br>  TimeEnd = imb:time_microseconds(),<br>  io:format("Time in microseconds: ~p~n", [TimeEnd - TimeStart]).<br><br><br>**<br><pre>time_microseconds() -><br>    {MS, S, US} = now(),<br>    (MS * 1.0e+12) + (S * 1.0e+6) + US.<br></pre><br><br /><hr />°­·ÂÇØÁø º¸¾È¼º, ¾Æ¿ô·èÀ» ´à¾Æ Æí¸®ÇØÁø ±â´Éµé·Î ¹«ÀåÇÑ Windows Live Hotmail! <a href='http://www.hotmail.com' target='_new'>¶ß°Å¿î ¸ÞÀÏ ÇÖ¸ÞÀÏ, Windows Live Hotmail·Î µ¹¾Æ¿À´Ù!</a></body>
</html>