Глобальный оптимизатор для .NET приложений Серебрянский Андрей 544гр. Научный руководитель: Дмитрий Степанович Ломов Рецензент: Дмитрий Юрьевич Булычев Постановка задачи Повторное использование кода Структурное программирование Объектно-ориентированиое программирование Программы строятся из компонент COM Java .NET Недостатки Чрезмерная абстракция Параметризация компонент Конечное приложение зачастую не использует всю функциональность компоненты Оптимизация приложения Идея: оптимизировать приложение как набор взаимодействующих компонент Гибкость. Богатый набор настроек для управления оптимизацией Расширяемость. Возможность модификации представленных алгоритмов Эффективность. Безопасность. Оптимизации не должны менять семантику программы Преимущества данного подхода Отсутствует необходимость в исходном коде Отсутствует необходимость явно указывать часть входных параметров для методов Глобальный анализ позволяет учесть все зависимости и значения глобальных переменных Существующие работы Partial Evaluation of an Object-Oriented Imperative Language (Morten Marquard, Bjarne Steensgaard, Department of Computer Science, University of Copenhagen) COMPOSE (Ulrik P. Schultz, Julia L. Lawall, Charles Consel, Gilles Muller) CILPE (Andrei M. Chepovsky, Andrei V. Klimov) Offline смешанный вычислитель Поддерживает объекты, объекты с частично известными полями, массивы и простые типы Преимущества данной работы Оптимизация применяется в контексте всего приложения Используется гибридный смешанный вычислитель Реализованы вспомогательные алгоритмы для улучшения периода связывания (binding-time improvements) Обзор реализации Проектная модель и менеджер алгоритмов Глобальный анализ Настройки оптимизации. Интерфейс расширения. Пользователи могут модифицировать реализованные алгоритмы либо использовать свои реализации Приоритет методов. Эвристика Анализ значений глобальных переменных Оптимизатор Менеджер хранения Оптимизатор Гибридный смешанный вычислитель Binding-time improvements Поливариантное разделение переменных Объекты, частично известные структуры и массивы, простые типы Пример: (x+y)+1 и (x+1)+y Раскрутка циклов Кэширование Предотвращение зацикливания Результаты тестирования Тестирование проводилось на многокомпонентных приложениях, которые используют математическую библиотеку для вычислений Название теста Ratio matrix_multiplication 1.61 cos 1.83 ray_tracing 1.45 chebyshev 1.1 fft 0.96 Выводы Создан оптимизатор для приложений на платформе .NET Тестирование показало его достаточную эффективность Дальнейшие планы Поддержка коллекций Де-виртуализация Использование особенностей JIT компилятора