Size: a a a

WebAssembly — русскоговорящее сообщество

2020 July 07

AS

Aλexander Syrotenko in WebAssembly — русскоговорящее сообщество
MaxGraey
Да правильно бенчмаркать - это целое искусство) Нужно правильно подготовить данные, правильно написать бенч тесты, что бы оптимизатор не выкинул мертвый код и все это было максимально приближено к реальному кейсу, замерить на раздых размерах входных данных а для этого нужно хорошо разбираться и в том что ты меряешь а не рассматривать это как черный ящик. Ну и самое важное - это правильно измерять и обрабатывать полученные замеры, отбраковывать случайные всплески, делать прогрев, исключать внешние факторы влияющие на результат, правильно сделать агрегацию датасета пользуясь различными критериями (z-score, t-distribution / критерий стьюдента) и выводить не только дисперсию (variance) но и skewness. И т д там еще много нюансов.

Без всего этого доверять результатам бенчмарка вряд ли стоит)
C удовольствием прорекламирую JMH 🙂
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Aλexander Syrotenko
C удовольствием прорекламирую JMH 🙂
Да такой подход много где используется. В том же https://docs.rs/bencher/0.1.5/bencher. Только там вместо Blackhole как JVH - black_box. А агрегация и фильтрафия происходит посредством Winsorizing трансформации https://docs.rs/bencher/0.1.5/bencher/stats/fn.winsorize.html
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Хотя тримать распределение, такая себе затея, особенно если это не строго нормальное распределение и имееться сильный скос
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Polina Gurtovaya
Именно! А то происходят истории типа "ой, в новой версии все ускорилось в 2 раза" а потом "ой нет, это мы мак к розетке подключили" :)
😂
источник

DB

Dmitry Bogomya in WebAssembly — русскоговорящее сообщество
ё
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
В других областях с этой проблемой уже давно столкнулись
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Например есть SPEC, что в теории решает проблему как и микро/синтетических бенчмарков, так и зависимости от производителей
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
К вебу это не так просто применить, конечно
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Например есть SPEC, что в теории решает проблему как и микро/синтетических бенчмарков, так и зависимости от производителей
Есть одна маленькая проблемка со стандартными бенчмарк наборами. Под них вендоры очень сильно затацичают сви показаьтели) Я был как то очень удивлен когда класический  алгоритм нахождения всех простых чисел посредством решета эратосшена на Rust просто на порядки превосходил версии на C/C++. У них ведь обинаковый бэкенд) Ну после более детального расследования выяснились интерестные подробности. В обзем если там изменить немного CFG то вся «магия» проподает =)
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Это в Rust или в движках когда из раста wasm выходит?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Это в Rust или в движках когда из раста wasm выходит?
Это в Rust. Точно не помню где там у них хак, по моему на уровне MIR
источник

でゲソ in WebAssembly — русскоговорящее сообщество
MaxGraey
Есть одна маленькая проблемка со стандартными бенчмарк наборами. Под них вендоры очень сильно затацичают сви показаьтели) Я был как то очень удивлен когда класический  алгоритм нахождения всех простых чисел посредством решета эратосшена на Rust просто на порядки превосходил версии на C/C++. У них ведь обинаковый бэкенд) Ну после более детального расследования выяснились интерестные подробности. В обзем если там изменить немного CFG то вся «магия» проподает =)
типо без simd компилить?
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
MaxGraey
Это в Rust. Точно не помню где там у них хак, по моему на уровне MIR
Крууто, не знал :) Часть популярных бенчмарков для веба сделана теми же людьми что и браузеры, это даёт ещё больший простор для "творчества"
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Вот можете глянуть как классно раскручиваются циклы:
https://godbolt.org/z/aGutFx

Нигде такого не увидете больше)
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Ну не то чтобы нигде... 512 - не 512, но читал, что PyPy тоже бешено разворачивает циклы, до 30 итераций, что ли. Потому что на каких-то бенчмарках это даёт больший выход.
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
В целом, это общая проблема...
источник

AS

Aλexander Syrotenko in WebAssembly — русскоговорящее сообщество
JVM тоже скоро сумеет! 😁
источник

AS

Aλexander Syrotenko in WebAssembly — русскоговорящее сообщество
Вот дождёмся вальхаллы, по-моему)
источник

AS

Aλexander Syrotenko in WebAssembly — русскоговорящее сообщество
Ииииии 😁
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
От такого частично помогает бОльшее количество бенчмарков - в каких-то из них это будет вредить, например размер кода станет невыносимо большим и придётся от части таких трюков избавиться
источник