Size: a a a

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

2020 December 22

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Это C++ библиотека. Такая большая разница между вектороной и скалярной версиями объясняется тем, что оригинальный код изначально использовал SIMD интринсики, которые эмулировались в скалярной версии. Тут показательно то, что wasm с SIMD и native с SIMD не сильно так и отличаются. Ну и прекрастно виден потенциал WebAssembly. Собственно JS никогда не будет автовекторизироваться или даже просто векторизироваться. Поэтому с приходом SIMD тезис о том, что wasm не всегда быстрее JS отпадет сам собой, по крайней мере для приложений где возможна векторизация
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Некоторые алгоритмы скалярно в принципе не очень работают
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
В смысле что медленно
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
MaxGraey
Это C++ библиотека. Такая большая разница между вектороной и скалярной версиями объясняется тем, что оригинальный код изначально использовал SIMD интринсики, которые эмулировались в скалярной версии. Тут показательно то, что wasm с SIMD и native с SIMD не сильно так и отличаются. Ну и прекрастно виден потенциал WebAssembly. Собственно JS никогда не будет автовекторизироваться или даже просто векторизироваться. Поэтому с приходом SIMD тезис о том, что wasm не всегда быстрее JS отпадет сам собой, по крайней мере для приложений где возможна векторизация
Замечательный результат, на самом деле!
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Замечательный результат, на самом деле!
Это да. Но все из-за ручной векторизации, компилятор боюсь так хорошо автовекторизировать не сможет. Кстати а ты не вкурсе какие наиболее продвинутые библиотеки для автовекторизации сейчас наиболее эффективны? Unified Region Vectorizer (RV) или что то на основе полигедральной (Polytope) модели?
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Векторайзер в компиляторе в общем работает, хотя вручную успех может быть больше. Бенчмарки SPEC CPU используют компилятор, например. Как минимум нужно его доводить до ума. Из библиотек на ум приходит Highway (Google), пока не могу больше ничего вспомнить. Посмотрю RV и Polytope
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Кстати, как SIMD из AS использовать?
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Хайвэем навеян flexible-vectors :)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Векторайзер в компиляторе в общем работает, хотя вручную успех может быть больше. Бенчмарки SPEC CPU используют компилятор, например. Как минимум нужно его доводить до ума. Из библиотек на ум приходит Highway (Google), пока не могу больше ничего вспомнить. Посмотрю RV и Polytope
Ну Highway это абстракции / полифилы, я имел ввиду библиотеки для автовекторизации с позиции компилятора
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Кстати, как SIMD из AS использовать?
Нужно добавить флаг —enable simd для asc. И тогда стануд доступны simd интринсики
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
MaxGraey
Ну Highway это абстракции / полифилы, я имел ввиду библиотеки для автовекторизации с позиции компилятора
Я вот просто думаю, стоит ли к binaryen прикручивать библиотеку вроде RV?
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
MaxGraey
Ну Highway это абстракции / полифилы, я имел ввиду библиотеки для автовекторизации с позиции компилятора
А, понятно. Про отдельные библиотеки не слышал, надо поискать что-то. Смысл есть, но в emcc уже есть (слегка поломаная) векторизация из llvm, и в общем это может быть сложный код.
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Пока wasm-simd считает что все инструкции одинаково дёшевы, что совсем не правда на практике
источник

M

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

https://graphics.cg.uni-saarland.de/papers/perard-2018-wpmvp.pdf
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
👍
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Всё правда :)  Спасибо за статью, изучаю
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Из компиляторных библиотек может быть полезна polly
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
http://polly.llvm.org. Её можно собирать и использовать совсем без llvm
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Из компиляторных библиотек может быть полезна polly
Я знаю про polly. Очень медленная и зачастую редко дает ощутимый результат. Не самая лучша реализаци полигедральной оптимизации. Поэтому и отключена в LLVM по умолчанию)
источник

PP

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