Бакалавриат
2021/2022


Компиляторные технологии
Статус:
Курс по выбору (Программная инженерия)
Направление:
09.03.04. Программная инженерия
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 3, 4 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
5
Контактные часы:
60
Программа дисциплины
Аннотация
В результате освоения дисциплины студенты изучат основы построения оптимизирующих статических и динамических компиляторов современных языков программирования, учитывающих особенности архитектур современных компьютеров, ознакомятся с предметом и основными подходами к формальной спецификации и верификации программ.
Цель освоения дисциплины
- освоение студентами базовых знаний в области оптимизирующей компиляции программ
- приобретение теоретических знаний в области теории графов, теории решеток, методов сбора статистики, используемых при разработке методов анализа и трансформации программ
- оказание консультаций и помощи студентам в проведении собственных исследований и разработок в областях, использующих компиляторные технологии
- приобретение навыков работы на современных неоднородных распределенных компьютерных системах
- освоение студентами базовых современных достижений формальных методов в разработке программного обеспечения для критических по безопасности систем
- формирование практических навыков применения формальных методов при проектировании и разработке программного обеспечения
Содержание учебной дисциплины
- Структура оптимизирующего компилятора. Промежуточные представления компилируемой программы. Локальная оптимизация. Метод нумерации значений.
- Вычисление достигающих определений и живых переменных с помощью анализа потока данных по графу потока управления
- Доказательство сходимости итерационных методов анализа потока управления.
- Простейшие методы глобальной оптимизации процедуры: сворачивание констант, распространение копий, обнаружение недостижимого кода и т.п.
- Методы оптимизации циклов и гнезд циклов: выявление естественных циклов, вынесение в предзаголовок цикла инвариантных вычислений, анализ индуктивных переменных
- Распространение констант
- Построение частично-усеченной SSA-формы
- Выделение областей в ГПУ. Передаточные функции областей.
- Открытая вставка процедур и межпроцедурный анализ (обзор)
- Введение в теорию решеток. Построение полурешеток для различных видов анализа потока данных. Понятие передаточной функции. Монотонные и дистрибутивные передаточные функции и их свойства.
- Генерация низкоуровневого кода методом переписывания дерева.
- Распределение регистров
- Планирование кода
- Обеспечение локальности данных и оптимизация передач управления
- Конвейеризация циклов
- Параллельное выполнение циклов.
Список литературы
Рекомендуемая основная литература
- Cooper, K., & Torczon, L. (2012). Engineering a Compiler. San Francisco: Elsevier Ltd. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=354941
- Компиляторы: принципы, технологии и инструментарий, Ахо, А. В., 2008