non-linear behavior?
Roberto Ostinelli
roberto@REDACTED
Sat May 15 13:56:01 CEST 2010
dear list,
while performing some optimization tests i found a behavior which i
cannot understand. i've stripped it down to a very simple test module.
here it is:
%%%%%%%%%%%%%%%%%%%%%%%%%
-module(lintest).
-compile(export_all).
start() ->
C1 = 100000000,
C2 = 1000000000,
{M1, _} = timer:tc(?MODULE, decrease, [C1]),
{M2, _} = timer:tc(?MODULE, decrease, [C2]),
io:format("decrease from ~p took ~p seconds.",[C1, M1/1000000]),
io:format("decrease from ~p took ~p seconds.",[C2, M2/1000000]).
% computational processes
decrease(0) -> ok;
decrease(N) -> decrease(N - 1).
%%%%%%%%%%%%%%%%%%%%%%%%%
if you run this module, you'll get:
roberto$ erl
Erlang R13B04 (erts-5.7.5) [source] [smp:4:4] [rq:4] [async-threads:0]
[hipe] [kernel-poll:true]
Eshell V5.7.5 (abort with ^G)
1> c(lintest).
{ok,lintest}
2> lintest:start().
decrease from 100000000 took 0.813727 seconds.
decrease from 1000000000 took 46.831207 seconds.
ok
3>
this yields the same results with/without kernel poll, and smp disabled/enabled.
i might be missing a point here, but shouldn't this be a linear
computation? if it took 0.8 seconds to count down from 100,000,000
shouldn't it take around 10 times more to count down from
1,000,000,000, i.e. around 8 seconds? the resulting 46 seconds seems
way strange to me.
any kind soul can explain me what i am missing here?
thank you,
r.
More information about the erlang-questions
mailing list