Size: a a a

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

2019 December 28

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Вызов функции по указателю просерает перформанс как минимум не меньше, чем ифы. 🤷‍♀
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Pavel 🛸
В идеале сделать что то вроде переключение скоростей на указателях, после чего все функции меняются на другие. Язык не важен, это другой проект.
Звучит как типичное ООП с vtable.
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Вызов функции по указателю просерает перформанс как минимум не меньше, чем ифы. 🤷‍♀
Окей, попробую тогда.
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
Кстати, трюк с глобальной переменной в жс в хроме ухудшал перф, а в фаерфоксе улетал в космос на х7.
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Кстати, трюк с глобальной переменной в жс в хроме ухудшал перф, а в фаерфоксе улетал в космос на х7.
Зависит от особенностей JIT и стартового перформанса в абсолютных числах. 🤷‍♀
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Зависит от особенностей JIT и стартового перформанса в абсолютных числах. 🤷‍♀
Ну там 1.5 секунды горячего кода, джит должен был переключится.
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Ну там 1.5 секунды горячего кода, джит должен был переключится.
Переключиться с какого режима на какой? 😉
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
С не оптимального жс-ного, на спекулятивные вычисления
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Ну там 1.5 секунды горячего кода, джит должен был переключится.
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Pavel 🛸
С не оптимального жс-ного, на спекулятивные вычисления
Почему Вы думаете, что он в начале неоптимально работал? Почему Вы думаете, что НЕ переключился?
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Почему Вы думаете, что он в начале неоптимально работал? Почему Вы думаете, что НЕ переключился?
Мне кажется вы не так поняли, я думаю он переключился за первые миллисекуны. Кстати борода if-ов (у меня их минимум 8), хуже указателя на функцию https://stackoverflow.com/questions/20906060/if-statement-vs-function-pointer
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Понятно, что один указатель на функцию без ифов лучше, чем несколько ифов. Но если у Вас 8 ифов, то не думаю, что Вы отделаетесь одним указателем на функцию, и в ней самой не будет ифов. 😉
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Мне кажется вы не так поняли, я думаю он переключился за первые миллисекуны. Кстати борода if-ов (у меня их минимум 8), хуже указателя на функцию https://stackoverflow.com/questions/20906060/if-statement-vs-function-pointer
Не всегда, если это switch-case (который в худшем случае трансформируется в jump table) то произвордительрность может быть и не хуже, кроме того у меня часто выходило, что бинарный поиск организованный через иерархию вложенных if-else был быстрее даже чем поисковая таблица, но это все зависит от размеров. иногда только реальные бенчмарки скажут наверняка
источник
2019 December 29

К

Константин in WebAssembly — русскоговорящее сообщество
а как нормально пробросить массив больше чем стандартная страница?
я конечно сделал grow(столько_сколько_нужно) у exports.memory, но верно ли это?
источник

К

Константин in WebAssembly — русскоговорящее сообщество
(учтем что это чистый wasm без обвязки в виде emcc)
источник

К

Константин in WebAssembly — русскоговорящее сообщество
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Константин
а как нормально пробросить массив больше чем стандартная страница?
я конечно сделал grow(столько_сколько_нужно) у exports.memory, но верно ли это?
можно использовать эти методы:

__builtin_wasm_current_memory(); // получить колличество выделенных страниц (memory.size)
__builtin_wasm_grow_memory(pagesDelta); // увеличить текущее колличество страниц на pagesDelta
источник

К

Константин in WebAssembly — русскоговорящее сообщество
MaxGraey
можно использовать эти методы:

__builtin_wasm_current_memory(); // получить колличество выделенных страниц (memory.size)
__builtin_wasm_grow_memory(pagesDelta); // увеличить текущее колличество страниц на pagesDelta
ну это тоже самое что со стороны js я дергаю grow
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Ну да, а ты чего хочешь?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Если ты хочешь пробросить массив, который не помещается в линейную память, то его нужно расширить, где уже это делать тебе решать, где удобнее там и расширяй)
источник