Re[4]: Простые и неправильные хамелеоны
От: Flamage Россия  
Дата: 24.05.07 21:56
Оценка: 4 (1)
Как и обещал — резултаты тестов.

Сначала о производительности, тестировал на Athlon X2 64 3600.
Исходниками с тестами здесь, код грязноват, но кто хочет может тоже поэксперементировать.

К сожалению пока нет версии Эрланга с поддержкой SMP для винды из-за чего производительность на одной ноде на двух ядрах замерить не удалось.
1. Одна нода, одно ядро — 1'000'000 встречь — примерно 1.25 сек.
2. Две ноды — 75 сек., как и предполагалось, разрыв внушительный, пересылка сообщений посредством TCP/IP сокетов отбирает большую часть времени.
3. Две ноды, но с выставлением в пользование каждой первого ядра, т.е. эмуляция одноядерного процессора — 138 сек. Надо отметить, что если задачи достаточно продолжительны, то ноды позволяют задействовать всю мошь многоядерных процессоров и достичь почти линейной масштабируемости.
4. Две ноды, но каждой выставленно отдельное ядро — 71 сек., с учетом того, что тесты проводились сериями и затем считалось среднее значение, результат получился очень интересным. Получается, что Эрланг более эффективен при распределении производительности многоядерных/многопроцессорных систем, чем встроенные механизмы ОС!

Вот бы еще посмотреть на результаты тестов с поддержкой SMP на линуксе, но под рукой такой системы нету.

Теперь о тестах верификации.
Обработчик очереди сообщений Эрланга очень эффективен и главное предсказуем — после запуска на "месте встречи" всегда(!, за серию из 100 тестов по 1'000'000 встречь тесты не выявили ни одной другой пары) получаются пары a-b и c-d, причем когда выносишь один из процессов на отдельную ноду все равно получается очевидный результат — a-b, потом b-c, далее c-a и т.д., появление сообщения от процесса d только сдвигает варианты пар на шаг.
Впрочем это не противоречит условию задачи и даже использование 3-х процессов (4-й сразу уходит в статус faded) никак не влияет на результат.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.