LINUX.ORG.RU
ФорумTalks

WebAssembly performance сосёт

 ,


0

5

Сейчас Dron перегоняет числодробилку для ресайза картинок на webassembly. Временно посмотреть можно тут: https://github.com/fedor-elizarov/convolve-wasm

То, что яваскрипт делает за 300мс, WA делает за 250мс.

Результат, мягко говоря, не впечатляет. Оказывается яваскриптовый JIT очень нефигово оптимизирует код. Еще конечно есть возможность оптимизировать работу с памятью, НО если копировать логику 1:1, то результат слабенький.

Вторая пичалька в том, что у WA пока нет поддержки SSE. А из v8 гугель внезапно выпилил SIMD https://bugs.chromium.org/p/v8/issues/detail?id=4124. Вроде они его выпилили в пользу будущего WA, но в итоге нигде нет.

Продолжаю наблюдать :)

UPD. Поставил Хром 57. В нем WA отрабатывает за 500мс против 300мс на яваскрипте.

★★★★★

Последнее исправление: Vit (всего исправлений: 2)

яваскрипт делает за 300мс, WA делает за 250.

250мс или с? если мс то в принципе так и ожидалось

Deleted
()

Гораздо интереснее увидеть результаты в случае компиляции других языков в WA.

hateyoufeel ★★★★★
()

То, что яваскрипт делает за 300мс, WA делает за 250.

Ахренеть, оно еще и быстрее JS.

Результат, мягко говоря, не впечатляет.

Не впечатляет возможно писать на нормальном языке и при этом получать более быстрые программы. Ну окей, чо.

tailgunner ★★★★★
()

у меня вообще медленнее:

js   10x samples: 5140.92 ms | one sample ~ 514.092  ms  
wasm 10x samples: 5979.630000000001 ms  | one sample ~ 597.9630000000001  ms
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Это нормально.

яваскриптовый JIT очень нефигово оптимизирует код

Конечно.

То, что яваскрипт делает за 300мс, WA делает за 250.

Так прирост скорости в целых 50мс. А ты чего хотел?
И не забудь сделать скидку на новизну технологии.

CYB3R ★★★★★
()
Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от Deleted

Вот так точно быть не должно. Проблема WASM в том, что хотя и исполнение должно быть быстрее, простое дёргание васмовой функции из джаваскрипта будет медленнее. Возможно, ты или дёргаешь много функций, или что-то делаешь неправильно.
И указывай версию wasm и браузера.

CYB3R ★★★★★
()
Ответ на: комментарий от Deleted

WA на 50 милисекунд быстрее :)

в принципе так и ожидалось

Да вот хрен. В своих влажных мечтах я надеялся что будет хотя бы в 2 раза быстрее. Там же ни каких bounds check и т.п.

Vit ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Убейся апстену. 20% профита на тупых конвольверах это пыль. Если это будет максимально возможная разница, проще не уродоваться, и оставить все на универсальном ламповом яваскрипте.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Там старый код, я дал цифры после того как с -O3 пересобрал.

Vit ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Ну я думал что в жиэсе до фига проверок для отката на деоптимизированный байткод. И если в WA их нет, то все будет пердолить как ракета. Ан нет.

Похоже в память уперлись. Да еще и векторных операций нет. Надо будет попробовать пердячим паром чтение-запись оптимизировать - читать/писать RGBA как 32-битное число, и дальше регистрами тусовать. По идее должно помочь.

Я хочу профит по скорости хотя бы 2 раза, иначе смысла нет заморачиваться с лишними сложностями.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Возможно, когда-нибудь прирост производительности в два раза будет реальностью, но пока это фантастика.

CYB3R ★★★★★
()
Ответ на: комментарий от Vit

Убейся апстену

После тебя.

20% профита на тупых конвольверах это пыль

20% - это всегда 20%.

проще не уродоваться, и оставить все на универсальном ламповом яваскрипте.

Вполне очевидно, что WA сделан не для жабаскрипт-макак.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты обычный мимокрокодил, не разбирающийся в теме, и строящий из себя знатока. Увянь.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Там же ни каких bounds check

Почему ты считаешь, что в v8 они есть? IMHO, одно из первых мест для оптимизации JIT компилятора.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В свое время из-за них случались деоптимизации на старом v8.

Я не возьмусь утверждать, что дело именно в bounds check. Было сказало «и т.п.», речь о всех дополнительных накладных расходах.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Ты обычный мимокрокодил, не разбирающийся в теме, и строящий из себя знатока

Я так понимаю, аргументы насчет «WA сосет» уже закончились? Вот и славно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я так понимаю, ты кроме заголовка ничего не прочел и вникать о чем пост выше твоего достоинства? Или может ты решил, что мне нужны поучения на тему что ты вывел для себя из заголовка?

Vit ★★★★★
() автор топика
Ответ на: комментарий от anonymous00

Пусть каждый пишет на чем считает нужным. Я привел цифры для такого класса задач как тяжелые числодробилки. На мой взгляд это интересно и полезно для составления оценок.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

Я так понимаю, ты кроме заголовка ничего не прочел

Ты понимаешь не так.

вникать о чем пост выше твоего достоинства?

Пост демонстрирует непонимание того, зачем нужен WA. Hint: не для соревнований по скорости с JS.

А перлы вроде:

я думал что в жиэсе до фига проверок для отката на деоптимизированный байткод

показывают незнакомство с предметом.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Пост демонстрирует

Ты не осилил понять что демонстрирует пост. Поздравляю.

показывают незнакомство с предметом.

Кэп, твои диагнозы тут не в тему, т.к. ты к предмету вообще не имеешь отношения.

Vit ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Да ты непризнанный гений походу.

Завязывай сталкивать технический тред в УГ

Ты зачем-то это начал.

WebAssembly performance сосёт (комментарий) кто-то сначала сам не вписался в контекст.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

Ну я думал что в жиэсе до фига проверок для отката на деоптимизированный байткод

не думаю. учитывая как гугель на него ставку сделал со своим V8, да и как из него ноду сделали - там все прилизали дальше некуда в этом плане.

Я хочу профит по скорости хотя бы 2 раза, иначе смысла нет заморачиваться с лишними сложностями

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

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

там в другом профит

Я в курсе. Но задачи есть разные. Меня вот интересует performance. Почему бы нет? И я делюсь практическими результатами на эту тему.

Vit ★★★★★
() автор топика

у WA пока нет поддержки SSE

а при чем тут WA? на мобильниках-то SSE нету, да и вообще там все регистры и инструкции виртуальные. или ты просто про SIMD? как человек, пищущий бэк к LLVM (другой, не wasm) могу сказать что это фееричный геморрой впихивать его туда. обозначив любой регистр как принимающий вектор ты автоматом вешаешь себе геморрой по самые уши

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от Vit

Но задачи есть разные. Меня вот интересует performance

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

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Да, я про то что в JS называют SIMD. На мобилках вроде есть Neon, через который делаются подобные операции.

Как оно в реализации - не знаю. Меня оно интересует как юзера, потому что есть задачи под это. Сначала в JS обещали SIMD, но он как-то не доехал до сих пор. Возможно его перенесут в WebAssembly. Меня бы такое тоже устроило. Но пока всё грустно.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Завязывай сталкивать технический тред в УГ

Прости, я не знал.

Тебе не понравился ответ на твои поучения?

Он мне очень понравился. Такой... технический.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Vit

Как оно в реализации - не знаю.

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

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Да не, тут с алгоритмом полный порядок, больше из него не выжать. Дошло до мелких нюансов. Пока надежда на то, что можно чтение/запись в память оптимизировать. Больше идей не осталось. Хотя конечно по сравнению с SIMD это костыль.

Vit ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Найди себе другой тред чтобы нудить и поучать. Возможно где-то ты будешь более востребован.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Дошло до мелких нюансов. Пока надежда на то, что можно чтение/запись в память оптимизировать

хрена себе мелкий нюанс. это как раз то что в первую очередь делать надо, обращение к памяти намного больше циклов займет чем сложить 2 раза вместо 1

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

Надо быть последовательным :) . Сначала сравнивали что будет если делать 1:1. Понять, сколько просирает JIT. Оказалось, JIT нереально крут. Конечно будем двигаться дальше, будет следующая серия.

Мне еще интересно посмотреть, будет ли профит если у картинки координаты менять между конвольверами. Во «взрослых» реализациях этим эффективнее используют кеш проца на чтении. Но пробьется ли это все через виртуалки - ХЗ. На яваскрипте разницы не было.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

смысла нет заморачиваться с лишними сложностями.

Полностью согласен. Лучше пусть JIT улучшают.

WARNING ★★★★
()

Ну значит опять воспользоваться этими фишками и создать оптимизированный сайт выйдет только у профессионалов. Вебмакаки умудрятся заставить тормозить и webassembly.

karton1 ★★★★★
()

Рад слышать. С содроганием представляю будущий веб, который пришлось бы дебажить в асме.

Sadler ★★★
()

Я уверен (но большинство не согласны), что его ждут не для числодробления, я чтобы прекратить чебя чувствовать хакиром за БК-0010 и начать программировать

Shadow ★★★★★
()

Ну с другой стороны, WA всё же лучше, чем жс.

awesomebuntu
()
Ответ на: комментарий от anonymous00

Да нет, можно без проблем писать на С++ и сейчас, без всяких ваших webassembly:)

ixrws ★★★
()
Ответ на: комментарий от Shadow

Да нет, как раз для числодробления. Потому как с текущими возможностями типизированных массивов и прочего в js, вполне легко компиляются и C и С++ при этом такой код уже сейчас получает полный доступ ко всему web api, а не как WA, неизвестно когда.

ixrws ★★★
()
Последнее исправление: ixrws (всего исправлений: 1)
Ответ на: комментарий от karton1

Ох уж эти дети, надоели. Профессионалы ещё как делают тормозные сайты, был бы заказ. Закажут быстро и красиво и сделают им медленно и тормозно. Вы думаете кто-то сейчас заказывает эффективные сайты что ли? В вашем воображении!

ixrws ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.