Pull to refresh

Comments 4

Очевидно, что результат вызова нашей "горячей" функции WASM кэшируется

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

Ну а бывает, что WebAssembly медленнее. Я тут недавно баловался с бенчмаркингом своего JVM -> JS/WebAssembly транслятора и написал для него на Kotlin софтверный 3D. И вот почему-то WebAssembly вариант работает медленнее.

Эксприменты интересные, но профайлинг ужасный.

Во-первых что такое 50 мс?
Даже с точки зрения таймингов, в Windows timeslice выделяемый на один процесс в среднем это 20 мс. То есть 50 мс это грубо говоря два timeslice, плюс время на переключения и обработку. Хорошо, если эти timeslice между всеми вашими замерами попадали на одно и тоже ядро, которое в этот момент находилось в одном и том-же состоянии (динамическая же частота). В Линукс вроде timeslice 10-15 мс минимальный. И так как весь процесс выполняется быстро, процесс скедулеру нет смысла выдавать более длинный timeslice чтобы обработать все одним махом.

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

Или вообще хорошо закопаться в то, на что именно уходит время - парсинг, рендеринг, запуск и передача кода в wasm сама по себе может занять время... тут я не специалист.
Но то, что ваши ваши расчеты принципиально не могут показать преимущества wasm над js из-за побочных эффектов - IMHO факт.

В старые-дедовские времена, когда вышел ИЕ11, то там кое-какие бенчмарки вырывались в топ и все удивлялись как же так. На самом деле компилятор просто выкусывал ненужные куски или просто вычислял значение заранее.

Так вот, ваш примитивный тест JS ничего не показывает, так как вы не привели скомпилированный код. Я, например, не могу по «мс» сказать ВО ЧТО скомпилировался ваш код. Может быть там за вас сумму посчитали. Может быть цикл на четвёрки разбили.

Источник: https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775

Sign up to leave a comment.

Articles