Size: a a a

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

2019 December 11

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
То есть когда fma операции нету на проце, он производит двойное округление и при этом даже не сообщает это.
источник

OS

Oleg Shelajev in WebAssembly — русскоговорящее сообщество
640x480 = 300K
1920x1080 = 2000K

2000 / 300 = 6.45
20 * 6.45 = 130

Так на так и выхо
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Я думал его можно реализовать в рамках операции trunc, но похоже она округляет уже округленное значение, а нужен прямой доступ к режиму округления, который доступен из плюсов.
В Wasm только один режим округления ROUND_TO_EVEN кажется (или ODD) не помню. Но это правильно, это свмый точный режим округления
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
MaxGraey
В Wasm только один режим округления ROUND_TO_EVEN кажется (или ODD) не помню. Но это правильно, это свмый точный режим округления
Even, да. Претензий нету к этому, это почти везде так, проблема в том что qfma полифилится молчком.
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
То есть когда fma операции нету на проце, он производит двойное округление и при этом даже не сообщает это.
Все верно. Думаю проще было бы ввести какой нибудь флаг, через который можно проверить есть ли натичная поддержка FMA или нету и дальше уже просто свой полифил вставлять если ее нету
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Oleg Shelajev
640x480 = 300K
1920x1080 = 2000K

2000 / 300 = 6.45
20 * 6.45 = 130

Так на так и выхо
Что это?
источник

OS

Oleg Shelajev in WebAssembly — русскоговорящее сообщество
Калькуляция на коленке?
источник

OS

Oleg Shelajev in WebAssembly — русскоговорящее сообщество
Так не работает?
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
MaxGraey
Все верно. Думаю проще было бы ввести какой нибудь флаг, через который можно проверить есть ли натичная поддержка FMA или нету и дальше уже просто свой полифил вставлять если ее нету
Тоже вариант решения, либо флаг либо FMAC нужен сейчас.
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
mAX
Товарищи, еще такой вопрос
Я попробовал собрал h264 декодер из libavcodec в wasm
по тестам 640х480 декодит 140fps без проблем даже на мобилках
но вот 1920х1080 уже где-то 15-20fps
возможно ли что можно его как-то ускорить параметрами компиляции или может какие эмуляторы всяких аппаратных ускорителей типа SIMD и прочего можно включить?
Если задача параллелится, можно исхитриться написать шейдер.
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Тоже вариант решения, либо флаг либо FMAC нужен сейчас.
Просто FMAC очень медленный чаще всего его можно очень сильно упростить для частного случая и там остануться по сути только fast double add / multiply + округление
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
MaxGraey
Просто FMAC очень медленный чаще всего его можно очень сильно упростить для частного случая и там остануться по сути только fast double add / multiply + округление
Во всех низкоуровневых языках оно не детерминировано, а в остальных не доступно. В джава детерминировано FMA и выполняется как FMAC, а в васме решили пойти другим путем.
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
mAX
Товарищи, еще такой вопрос
Я попробовал собрал h264 декодер из libavcodec в wasm
по тестам 640х480 декодит 140fps без проблем даже на мобилках
но вот 1920х1080 уже где-то 15-20fps
возможно ли что можно его как-то ускорить параметрами компиляции или может какие эмуляторы всяких аппаратных ускорителей типа SIMD и прочего можно включить?
Можно SIMD и потоки, но там нужно это пока руками адаптировать и будет работать пока только под флагами
https://github.com/brion/ogv.js/
источник

m

mAX in WebAssembly — русскоговорящее сообщество
MaxGraey
Можно SIMD и потоки, но там нужно это пока руками адаптировать и будет работать пока только под флагами
https://github.com/brion/ogv.js/
спасибо, интересный проект!
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Тоже вариант решения, либо флаг либо FMAC нужен сейчас.
Кстати проверить поддерживается точный fma в qfma очень просто - нужно произвести проверку вроде abs(qfma(a, b, c) - (a * b + c)) > 0.5ulp и если это так, то можно использовать qfma не боясь за точность
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
впротивном случае делать фоллбек на более замороченную версию
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
MaxGraey
Кстати проверить поддерживается точный fma в qfma очень просто - нужно произвести проверку вроде abs(qfma(a, b, c) - (a * b + c)) > 0.5ulp и если это так, то можно использовать qfma не боясь за точность
Ну, интересно, да, это если нету флагов в языке.
источник

P🛸

Pavel 🛸 in WebAssembly — русскоговорящее сообщество
Будет срабатывать 50/50, но корректно.
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Pavel 🛸
Будет срабатывать 50/50, но корректно.
Я думаю если правильно выбрать a, b и c то это будет значительно лучше
источник

M

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