Size: a a a

2020 March 30

LL

Lama Lover in ErlangRus
Petr Kozorezov
И при доступе к мапе через maps:get все сильно быстрее. Поэтому вопрос не к мапе, а матчингу
Я думаю что конкретно в твоём тесте, maps:get помещался в бранч предикшн, а #{key1 => __} = M нет. Не знаю с чем это связано
источник

В

Вертолетчик in ErlangRus
Petr Kozorezov
а у тебя не осталось ссылки?
А вот попробую найти попозже чудок. Там много разных бенчов было. Самый быстрый конечно erlang:get )))
источник

LL

Lama Lover in ErlangRus
Видимо, матчинг в своей реализации предполагает, что можно доставать сразу по нескольким ключам. А maps:get всегда достаёт только по одному ключу
источник

LL

Lama Lover in ErlangRus
Поэтому матчинг больше по размеру и дольше усваивается предсказателем ветки
источник

LL

Lama Lover in ErlangRus
Чтобы откинуть моё предположение стоит написать тест, где будут доставаться значения из разных мап по разных ключам в различном порядке
источник

V

Vasilii Demidenok in ErlangRus
@petrkozorezov ты же в консоли меряешь
источник

V

Vasilii Demidenok in ErlangRus
это совсем не тоже самое, если код скомпилен
источник

V

Vasilii Demidenok in ErlangRus
{613,ok}
{587,ok}
{593,ok}
{549,ok}
{775,ok}
{1034,ok}
{1345,ok}
{1056,ok}
{629,ok}
{686,ok}
источник

V

Vasilii Demidenok in ErlangRus
у меня такие цифры на 22.2 если скомпилить твой пример. Ествественно тайминг хуже, но не настолько сильно
источник

СИ

Сергей Иванов in ErlangRus
Vasilii Demidenok
у меня такие цифры на 22.2 если скомпилить твой пример. Ествественно тайминг хуже, но не настолько сильно
а если увеличить порядок выборки?
источник

V

Vasilii Demidenok in ErlangRus
тут не только надо увеличивать порядок выборки, тут ещё смотреть надо чтобы ты не тестировал кеш
источник

V

Vasilii Demidenok in ErlangRus
для этого рекомендую глянуть https://github.com/jlouis/eministat
источник

PK

Petr Kozorezov in ErlangRus
а где там про кеш? что-то с ходу не увидел
источник

V

Vasilii Demidenok in ErlangRus
это как раз тул для сравнения микробенчмарков, мне казалось он что-то делал внутрях интересное чтобы совсем в кеш не попадать, как минимум garbage collect вызывал между тестами, когда я его последний раз смотрел. Но в целом один раз тот тест что у тебя сверху прогнать не достаточно, цифры сильно будут плавать. поэтому тесты выше можно прогнать раз по 50 и посмотреть статичюстически значим ли результат или нет
источник

PK

Petr Kozorezov in ErlangRus
ну в исходниках я нашел только разогрев и сборку мусора
источник

PK

Petr Kozorezov in ErlangRus
что нужно запускать никто не спорит, просто меня смутила разница на порядок
источник

V

Vasilii Demidenok in ErlangRus
так я же выше показал что ее нет
источник

PK

Petr Kozorezov in ErlangRus
не знал, что консоль такой оверхед даёт
источник

V

Vasilii Demidenok in ErlangRus
ну да, код выполняемый из шела и компиленный будут показывать разные результаты. можно погуглить на просторах почему именно так
источник

V

Vasilii Demidenok in ErlangRus
но библиотечку советую глянуть, мне пригождалась )
источник