[Erlang] замеры времени при smp timer:tc или statistics?
От: Аноним  
Дата: 10.06.08 12:16
Оценка:
Есть код:
-module(testSMP3).
-export([main/2,sum/3,wait_n/2]).

sum(X,X,S) -> S+1/X;
sum(X,Y,S) ->sum(X,Y-1,S+1/Y).

wait_n(0,S) -> {TotalRunTime,TimeSinceLastCall} = statistics(runtime),
io:format("Сумма равна ~p~n ", [S]),
io:format("Time: ~w~n", [TimeSinceLastCall]),
done;

wait_n(N,S) ->
receive {i_am_ready,S1}->
io:format("Сумма равна ~p~n ", [S]),
wait_n(N-1,S+S1) end.

main(N,F) ->
statistics(runtime),
S = self(),
[spawn(fun () -> io:format("Х=~p Y=~p~n ", [1+F*(Z-1),F*Z]),S ! {i_am_ready,sum(1+F*(Z-1),F*Z,0)} end)||
Z <- lists:seq(1, N)],
wait_n(N,0).
При smp 2
testSMP3:main(2, 50000000).
выдает Time: 61937 то есть получаем что время вычислений около 62 сек.
timer:tc(testSMP3, main, [2,50000000]).
выдает 31338 то есть время вычислений 31 сек. исходя из таймера виндоус устанавливаем что при smp врет statistics!!!
Замеры
timer:tc(testSMP3, main, [2,50000000]).

Без и smp timer:tc и statistics выдают одинаковый результат 45 сек.
Таким образом получаем
1) что доверять statistics при smp нельзя.
2) при включаном smp таки наблюдается ускорение на 35% даже на гипертрендинге.

SMP 2 — 33835 ускорение 36%.
SMP 0 — 45911
На четырех процесорном результаты такие
SMP 4 6641 ускорение 121%.
SMP 3 7468 ускорение 97%.
SMP 2 9776 ускорение 51%.
SMP 0 14716
testSMP3- это тотже пример tut18.
Извеняюсь за свою предыдущую тему !!!

Если кто потвердит или опровергет то что я написал буду благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.