Вопрос оптимизации bitstring

64 views
Skip to first unread message

Egobrain

unread,
Jun 6, 2013, 9:41:15 AM6/6/13
to erlang-...@googlegroups.com
Разбираюсь с производительностью bitstring в erlang
Написал простой тест для to_upper функции.
Код теста тут: https://github.com/Egobrain/erlperf_tests.git

Вот в чем вопрос:
  Написал 2 варианта char_to_upper/1.
  1-й проверяет  $a < ch < $z и исли да прибавляет $A-$a
  2-й проверка влоб.

  И 2 варианта пробега по бинарнику:
  1-й binary comprehension
  2-й binary to list |> list comprehension |> list to binary

получилось 4 варианта для теста. Тестил на строке 100000 символов.  Erlang R16B
Результаты, мягко говоря меня удивили.

perf_test:test(100000, 100).

[{comprehension,7100},
 {comprehension2,4562},
 {conversion,6084},
 {conversion2,3298}]

Я думал самый быстрый будет comprehension, а он почти в 2 раза хуже чем conversion2.
Самым быстрым оказалась проверка в лоб с конвертированием бинарь->список->бинарь.
Как-то не логично работает VM.

Потом добавил флаг "+native" и снова проверил.

Все вернулось на круги своя.

[{comprehension,2636},
 {comprehension2,3994},
 {conversion,3094},
 {conversion2,4389}]

Кто-нибудь может объяснить, почему так странно работает erlang без native. И что такого магического сделал hipe,
раз он мало того, что самый медленный вариант сделал самым быстрым, так еще и profit > чем 2.5 раза ?

Reply all
Reply to author
Forward
0 new messages