Chrome для поддержки Simd.js


Благодаря поддержке Firefox и Microsoft, работающей над этим в Chakra, новость о том, что Chrome получит поддержку Simd.js, завершает набор, за исключением Safari.

SIMD (Single Instruction Multiple Data) — один из самых простых и легких механизмов параллельной обработки. По сути, все сводится к упаковке нескольких значений в один регистр и последующему выполнению операции, как если бы это было одно значение. Конечно, есть некоторые накладные расходы — вам нужно упаковать и распаковать данные, но в большинстве случаев их можно минимизировать.

Это не так хорошо, как использование графического процессора, но все намного проще. Это также то, что используют многие программы C / C ++ для ускорения таких вещей, как кодеки и вычисления в играх.

?? Учитывая, что JavaScript является целью компиляторов, таких как Emscripten, которые использовались для преобразования игр и других графических программ, чтобы они запускались в браузере, отсутствие поддержки SIMD в JavaScript ограничивает диапазон программ, которые могут быть скомпилированы без руководства. модификация. Существует официальный полифил, который эмулирует SIMD с использованием типизированных массивов, но он медленный.

RealSIMD может в 3 раза или больше ускорять программы, которые его интенсивно используют.

На диаграмме ниже вы можете увидеть данные Mozilla по запуску polyfill v simd.js как части Asm.js.

Процесс добавления инструкций SIMD в JavaScript на удивление прост. Все, что вам нужно, это три новых векторных типа: float32x4, float64x2 и int32x4, а также некоторые представления типизированных массивов. После загрузки данных в новые типы данных арифметические операторы работают как параллельные операции. То есть, если вы умножаете две переменные float32x4, все четыре числа с плавающей запятой умножаются за одну операцию.

Есть небольшая проблема, заключающаяся в том, что разное оборудование поддерживает разные типы инструкций SIMD. Хорошей новостью является то, что есть ядро операций, которые поддерживаются SSE на Intel и AMD x86 и NEON на ARM. Следовательно, нет 256- и 512-битных векторных операций. Это означает, что расширения simd.js будут работать на платформах x86 и ARM, а Google планирует поддержку на всех платформах Blink. Это позволит Android запускать программы, использующие SIMD.


Добавить комментарий