Пользователь
250,2
рейтинг
25 декабря 2013 в 17:47

Разработка → Asm.js стал ещё быстрее

Компания Mozilla порадовала новостью об очередном улучшении производительности Asm.js. Этот промежуточный язык обеспечивает исключительно высокую скорость выполнения кода, написанного на языках вроде C и C++, является свободной альтернативой Google Native Client и работает в любом браузере (хотя в Firefox — быстрее всего).

Например, после компиляции кода C++ в Asm.js с помощью компилятора Emscripten раньше потеря производительности была примерно двукратной, теперь же код Asm.js медленнее нативной программы не более чем в полтора раза.

Некоторые из проведённых оптимизаций небольшие и незначительные, а другие более серьёзные. Например, Firefox недавно научился оптимизировать некоторые операции с плавающей запятой таким образом, что вместо чисел float64 вычисления осуществляются с менее точными числами float32, что даёт очень большую прибавку в производительности. Соответствующее изменение было внесено в Asm.js, компилятор Emscripten и движок SpiderMonkey.

На диаграмме показана скорость выполнения операций в разных окружениях, относительно clang 3.2 (принят за единицу). Меньшее время соответствует лучшему результату.



Красным цветом показан Firefox со сгенерированным кодом на Emscripten с использованием 32-битных чисел (firefox-f32). Как видим, операции на Asm.js выполняются очень близко к нативной скорости в операционной системе. Максимальная разница составляет эти самые 1,5 раза, а в некоторых случаях Firefox показывает даже лучшую производительность!

Разработчики обещают продолжать оптимизацию и дальше, хотя уже сейчас, например, движок Unreal Engine 3 отлично запускается в браузере. В своё время это была одна из первых демонстраций Asm.js.

Анатолий Ализар @alizar
карма
739,5
рейтинг 250,2
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (16)

  • 0
    Ну теперь можно майнить биткоины без WebGL.
    • +2
      Суть майнинга биткоина браузером была в майнинге на видеокартах посетителей(были, конечно и cpu-шные майнеры, но это уже очень смешно). А код для GPU и так не на js написан.
      • +1
        Primecoin майнится исключительно на CPU (пока вроде-бы нет реализаций на GPU), так что реально
        • 0
          Вроде как есть, только выигрыша нет.
      • 0
        И правда. s/биткоины/лайткоины/g s/без WebGL/не только на WebGL/g.
  • +4
    Я давно подписан на issue 2599 в Хроме, как не хотели делать поддержку Asm.js, так и не хотят.
    • +4
      Возьмите любой вопль Mozilla'овцев где они объясняют почему они не будут поддерживать PPAPI и NaCl, сделайте поиск с заменой s/PPAPI/asm.js/ — и поймёте почему. Все доводы останутся в силе: отсутствие формальной спецификации, меняющиеся «правила игры», которые устанавливает «дядя» (в данном случае Mozilla) и прочая, прочая, прочая.

      Есть только одно отличие: если поддержка PPAPI нужна для того, чтобы вообще запустить NaCl приложение или PPAPI Flash (без оной поддержки они вообще не запустятся), то asm.js вполне запускается просто как JavaScript. Но так как это повод для снижения приоритета у этого бага по сравнению с аналогичным багом в Firefox, а не для повышения его!

      Если в каких-то популярных web-приложениях начнёт активно использоваться asm.js, то это будет поводом добавить ещё какое-то количество оптимизаций в V8 для того, чтобы они стали вменяемо работать (собственно пара таких случаев в этом же самом баге и упомянута), но, если честно, я не могу себе представить ситуацию, когда Google вдруг поставит себя в зависимость от непредсказуемых изменений в asm.js (подобных описанным в статье), которые делает совсем другая «группа товарищей».

      Впрочем вам-то что: ровно по той же причине вы можете использовать asm.js даже если его не поддерживает Chrome! Только не рассчитывайте на 1.5-2 кратное замедление по сравнению с «нативом». 5x-10x — более реалистичный вариант, он, я думаю, будет примерно выдаваться и Chrome и MS IE (последних версий). Ну а в Firefox ваше приложение будет «летать», да — считайте это бонусом.
      • 0
        отсутствие формальной спецификации, меняющиеся «правила игры»

        Мне кажется это «от части» из-за: «specification (work in progress)».
      • –6
        Впрочем вам-то что: ровно по той же причине вы можете использовать asm.js даже если его не поддерживает Chrome!
        Мне по фану попробовать запилить поддержку asm.js в V8 в том виде, как его позиционирует Мозила, но поскольку шансы, что патч примут около нуля, я этим не занимаюсь.
      • 0
        Насколько я слышал, позиция разработчиков Chrome не просто «мы не будем делать поддержку asm.js». asm.js — это строго типизированное подмножество JavaScript, соответственно, само по себе, должно быть быстрым. Таким образом, если разработчики Firefox запилили отдельную ветку транслятора для кода с «use asm», то разработчики Chrome говорят, что с таким строго типизированным кодом обязан справляться штатный транслятор. Т. е. «мы не будем делать отдельный костыль, а будем улучшать штатный оптимизатор».
        • 0
          Я правильно понимаю, что вследствие этого поддержки asm.js на node.js тоже не будет?
  • +1
    Как же меня веселят веб-демо, которые сразу, очевидно исключительно удобства ради, записаны на видео…
    • +1
      Хотя конкретно в этом случае, как ни странно, можно найти и ссылку на саму дему. Попробовал запустить в лисе под маком, нормально работает.
  • 0
    Как же всё-таки удивительно. Запустил демку в хроме на i3 FullHD — никаких тормозов.
    • 0
      Вас удивляет, что ваш настольный компьютер без тормозов тянет демку, "запиленную" почти четыре года назад для телефонов (надо полагать, четырёхгодичной давности)? Вот если бы это был FutureMark современный, тогда было бы о чём говорить, а так… в ранние 3D игры я думаю уже в QEMU скомпилированном под JavaScript и запущенным в MS IE можно играть.
      • 0
        Дак не на JavaScript'е же она работает на телефонах. Поэтому да, удивляет.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.