Size: a a a

2020 May 17

Е

Евгений in pro.elixir
Короче вот мой бенч, я в нем реализовал протокол Enumerable в эликсировском варианте и на итераторах.
источник

Е

Евгений in pro.elixir
и тут-то все почуму-то не так однозначно получается
источник

LL

Lama Lover in pro.elixir
Евгений
Короче вот мой бенч, я в нем реализовал протокол Enumerable в эликсировском варианте и на итераторах.
А почему в zip ?
источник

Е

Евгений in pro.elixir
Lama Lover
А почему в zip ?
Кек, я вот даже подумал в tar.bz2 или зипануть :) решил зипануть, ну типа мало ли кто на винде сидит :))
источник

Е

Евгений in pro.elixir
хотите в tar.bz2?
источник

V

V in pro.elixir
Lama Lover
А во сколько раз разницы получились?
большие мапы, 8 потоков - https://pastebin.com/wSPvFhVP
большие мапы, 1 поток - https://pastebin.com/rcc9Fzrg
маленькие мапы, 8 потоков - https://pastebin.com/fPsqQcm7
маленькие мапы, 1 поток - https://pastebin.com/ZdVBA9fh

Резюме:
максимальная разница в скорости - 19%. Разница уменьшается с размером мапы.
источник

LL

Lama Lover in pro.elixir
Евгений
Кек, я вот даже подумал в tar.bz2 или зипануть :) решил зипануть, ну типа мало ли кто на винде сидит :))
Так а зачем вообще сжимать? Бенчи обычно в один файл получаются
источник

LL

Lama Lover in pro.elixir
V
большие мапы, 8 потоков - https://pastebin.com/wSPvFhVP
большие мапы, 1 поток - https://pastebin.com/rcc9Fzrg
маленькие мапы, 8 потоков - https://pastebin.com/fPsqQcm7
маленькие мапы, 1 поток - https://pastebin.com/ZdVBA9fh

Резюме:
максимальная разница в скорости - 19%. Разница уменьшается с размером мапы.
Ну, видимо паттернматчинг кушоет
источник

Е

Евгений in pro.elixir
Lama Lover
Так а зачем вообще сжимать? Бенчи обычно в один файл получаются
А можно ли Benchee подключить без mix-проекта? Я просто папку в архив закинул.
источник

V

V in pro.elixir
Lama Lover
Ну, видимо паттернматчинг кушоет
Да, но не только
Comparison:
IterReduce.iter_reduce      748.84 K
:maps.fold                  674.12 K - 1.11x slower +0.148 μs
Enum.reduce                 639.52 K - 1.17x slower +0.23 μs
источник

Е

Евгений in pro.elixir
Кстати, протоколы походу нельзя одним файлом, консолидация не работает.
источник

Е

Евгений in pro.elixir
на 10к записях  в мапе, у меня получилось:
Name                      ips        average  deviation         median         99th %
elixir reduce          1.70 K      587.33 μs    ±23.38%      592.33 μs      923.57 μs
iterator reduce        1.33 K      751.65 μs    ±16.95%      725.23 μs     1103.54 μs

Comparison:
elixir reduce          1.70 K
iterator reduce        1.33 K - 1.28x slower +164.32 μs
источник

AV

Alexander Veselov in pro.elixir
V
Да, но не только
Comparison:
IterReduce.iter_reduce      748.84 K
:maps.fold                  674.12 K - 1.11x slower +0.148 μs
Enum.reduce                 639.52 K - 1.17x slower +0.23 μs
Comparison:
IterReduce.iter_reduce_optimized       60.92 K
:maps.fold                             60.12 K - 1.01x slower +0.22 μs
IterReduce.iter_reduce                 44.38 K - 1.37x slower +6.12 μs
Enum.reduce                            36.30 K - 1.68x slower +11.14 μs
источник

V

V in pro.elixir
Alexander Veselov
Comparison:
IterReduce.iter_reduce_optimized       60.92 K
:maps.fold                             60.12 K - 1.01x slower +0.22 μs
IterReduce.iter_reduce                 44.38 K - 1.37x slower +6.12 μs
Enum.reduce                            36.30 K - 1.68x slower +11.14 μs
Как оптимизировал?
источник

Е

Евгений in pro.elixir
вы решили итераторы с :maps.fold сравнивать?
источник

AV

Alexander Veselov in pro.elixir
V
Как оптимизировал?
Поменял
fun.({k, v}, acc)
на
fun.(k, v, acc)
источник

Е

Евгений in pro.elixir
Как я понимаю Enum.reduce для мап использует :maps.fold, так что паниковать не стоит, а вот Enum.reduce_while что использует?
источник

a

arikai in pro.elixir
Посмотрите, что такое Enumerable и не стройте догадок :)
источник

Е

Евгений in pro.elixir
arikai
Посмотрите, что такое Enumerable и не стройте догадок :)
Это вы кому? :)
Уже все посмотрели. И судя по всему Enum.reduce_while для мап использует как раз протокольный Enumerable.reduce
источник

V

V in pro.elixir
Alexander Veselov
Поменял
fun.({k, v}, acc)
на
fun.(k, v, acc)
на больших мапах показывает скорость на 33% выше чем Enum.reduce
@pham_nuwen FYI
источник