В чем разница в производительности между модулями Erlang и байт-кодом? - PullRequest
3 голосов
/ 14 февраля 2010

Какая разница в производительности между модулями Erlang и байт-кодом?

Ответы [ 5 ]

6 голосов
/ 14 февраля 2010

Для кода, который на самом деле выполняет много работы (в отличие от того, чтобы тратить большую часть своего времени на ожидание сообщений или вызов встроенных функций), типичное ускорение будет в 8-20 раз.

Это также во многом зависит от того, что именно делает код: циклы над операциями с плавающей запятой или манипулирование двоичными / битовыми строками, как правило, дают лучшие ускорения, в то время как более нормальный код, управляющий кортежами и списками, может получить не более 8 -10 раз быстрее.

Также имейте в виду, что цикл, скомпилированный с собственным кодом, не будет намного быстрее, если тело цикла в основном вызывает другие модули, которые не скомпилированы с собственным.

(Прошло много времени с тех пор, как я посмотрел свежие результаты тестов, но я не думаю, что многое изменилось.)

1 голос
/ 22 февраля 2010

В соответствующей заметке вам может пригодиться этот документ:

user.it.uu.se / ~ Kostis / Документы / erlang03.pdf

Помимо описания ограничений, возникающих при использовании HiPE, он также имеет некоторые (очень базовые) сравнения скорости.

Две вещи, которые я нашел наиболее заметными:

  • старый код HiPE при перезагрузке не исчезает, а навсегда зависает. Итак, небольшая утечка памяти, если вы находитесь в среде, где вы очень часто перезагружаете код. Обычно это не проблема, но стоит подумать, если у вас нет хорошей «стратегии выхода» для ваших узлов (которая позволяет беспрепятственно извлекать узлы из вашего кластера и время от времени заменять их новыми, что также неоценимо иметь, когда вы хотите перейти на более новую версию BEAM-VM.)
  • Существуют некоторые издержки при переключении между собственным и интерпретируемым кодом, поэтому вы, по возможности, стараетесь избегать этого (компилируя все модули, которые часто взаимодействуют с одним и тем же компилятором)
1 голос
/ 15 февраля 2010

С точки зрения производительности, HiPE оптимизирует внутри модулей, а не между модулями вызовов. Это может привести к очень хорошим ускорениям (x4..x10, кажется, часто рекламируемые числа), однако, как и другие ответили, если ваш код тратит много времени на ожидание внешних событий, ускорение будет незначительным.

Следует обратить внимание на то, что HiPE, очевидно, НЕ поддерживает некоторые прогрессивные языковые функции, такие как параметризованные модули. Это означает, что некоторые недавние приложения (такие как MochiWeb) вообще не будут работать. Примите это во внимание.

1 голос
/ 14 февраля 2010

Уже есть несколько правильных ответов, но я думаю, что вам действительно нужно измерить производительность вашей конкретной функциональности. Если критическая область значительно быстрее, чем версия с байт-кодом, вероятно, еще предстоит очистить модуль, чтобы сделать его отказоустойчивым.

0 голосов
/ 14 февраля 2010

Родной должен быть быстрее. Я не думаю, что есть постоянный фактор, насколько это быстрее; Это, безусловно, отличается в зависимости от машины / архитектуры и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...