Оптимизация времени работы и качества генерируемого кода компиляторов Apache Harmony Куртов Николай Владимирович студент 3-го курса ФИТ НГУ руководитель: Фурсов Михаил Юрьевич
Компиляторы Jitrino Jitrino.JET Быстрая компиляция Отсутствие оптимизаций Jitrino.OPT Оптимизация генерируемого кода Длительная компиляция Два уровня промежуточного представления
Перекомпиляция Клиентский режим Максимально быстрый запуск Перекомпиляция "горячих" методов Серверный режим Агрессивная оптимизация В том числе Profile- guided optimization Продолжительное исполнения
Замена кода On-Stack-Replacement: Замена кода исполняемого метода "на лету" В Apache Harmony замена кода происходит на входе в метод
Профилирование Профилирование – сбор различных метрик о программе в момент ее выполнения для дальнейшей оптимизации Entry-Backedge profile Block profile Edge profile
Entry-Backedge Profile 2 счётчика: o число вызовов метода o число обратных переходов Используется как индикатор для перекомпиляции метода Требует минимум дополнительных ресурсов
Block profile Число исполнений каждого блока в коде метода Определяет "горячие" блоки Прост в реализации A: 100B: 100 C: 100D: 100
Edge Profile Показывает, число раз, которое выполнился каждый условный переход Допускает те же оптимизации, что и Block Profile Полезен для оптимизации code-layout A BC D EF
Состояние в начале работы Jitrino.JET поддерживает сбор данных Entry-Backedge профилирования Jitrino.OPT поддерживает сбор данных Edge и Value профилирования и использует их при оптимизации
Цели работы Jitrino.JET поддерживает сбор данных Entry-Backedge, Edge и Value профилирования Создание универсального режима работы, имеющего скорость старта клиентского режима и качество кода серверного режима
Вопросы?