Firefox 18 перейдёт на IonMonkey, JIT-компилятор нового поколения

Материал из Викиновостей, свободного источника новостей

12 сентября 2012 года

Разработчики Mozilla сообщили о миграции JavaScript-движка экспериментальной ветки Firefox на IonMonkey, JIT-компилятор следующего поколения, который позволит значительно повысить производительность JavaScript приложений за счёт использования нового метода JIT-компиляции и передовых техник оптимизации. Первым релизом, перешедшим на IonMonkey, станет Firefox 18, выход которого запланирован на начало января.

Одним из ключевых новшеств IonMonkey является система вероятностной оценки типов, в рамках которой предложен гибридный метод статического и динамического анализа, позволяющий точно сопоставить типы для каждой переменной и каждого свойства JavaScript-программы. Напомним, что JavaScript является языком с динамической типизацией, с одной стороны это предоставляет большую гибкость для разработчиков, но с другой стороны создает трудности при создании JIT-компиляторов. Так как невозможно заранее определить какой тип данных будет содержаться в переменной, возникают трудности при сопоставлении переменной с определенными фиксированными инструкциями, рассматривающими эту переменную, например, как строку или число. IonMonkey сделал существенный шаг вперёд в плане решения данной проблемы и позволил избавиться от выполнения большого числа дополнительных проверок в процессе работы JavaScript-программы.

Другим важным улучшением является использование адаптивных методов выбора той или иной техники оптимизации для выполняемого JavaScript-кода. Если JIT-компиляторы первых двух поколений (TraceMonkey и JägerMonkey) поддерживали только прямую однонаправленную трансляцию JavaScript в машинные инструкции, то IonMonkey дополнительно снабжён средствами для обратной связи, позволяющими оценить эффективность результата выполнения сгенерированных инструкций и при необходимости внести корректировки и оптимизации, учитывающие особенности выполняемого JavaScript-кода.

Архитектура IonMonkey разделена на три компонента: трансляция JavaScript в промежуточное представление (IR), применение различных алгоритмов к IR и трансляция финального IR в машинный код. Подобное разделение значительно увеличило гибкость работы JIT-компилятора и упростило сопровождение кода и его доработку. Например, добавление новых алгоритмов оптимизации теперь напоминает написание плагинов.

Среди других улучшений можно отметить: задействование техники LICM (Loop-Invariant Code Motion) для выноса инструкций за пределы циклов; поддержка метода GVN (Global Value Numbering) для ликвидации избыточного кода; реализация линейной схемы распределения регистров LSRA (Linear Scan Register Allocation), применяемой также в таких проектах, как HotSpot JVM и LLVM; поддержка DCE (Dead Code Elimination) для удаления неиспользуемого кода; новый анализатор границ, позволяющий обойтись без лишних проверок выхода за границы буфера. В настоящее время IonMonkey поддерживает генерацию кода для архитектур i386, x86_64, и ARM.

Итогом проделанной работы стало значительное повышение производительности выполнения кода JavaScript. При выполнении тестового комплекта Kraken (Архивная копия от 1 июля 2020 на Wayback Machine) Firefox 18 с IonMonkey показал прирост производительности на 26% (по графику на 10%), по сравнению с Firefox 15 и тестовой версией Firefox 17.

В тесте V8 benchmark (Архивная копия от 2 мая 2016 на Wayback Machine) Firefox 18 опередил Firefox 17 на 7%, а текущий релиз Firefox 15 на 20%.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Firefox 18 перейдёт на IonMonkey, JIT-компилятор нового поколения», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.