Оптимизация в компиляторах (8 сем ВМК) (1157502)
Текст из файла
6
Программа по дисциплине: Конструирование оптимизирующих компиляторов
по направлению:
профиль подготовки: Системное программирование
кафедра Системного программирования
курс: 4 (бакалавриат)
семестр: весенний экзамен 8 семестр
ОБЪЁМ УЧЕБНОЙ НАГРУЗКИ И ВИДЫ ОТЧЁТНОСТИ.
Вариативная часть, в т.ч. : | __4___ зач. ед. |
Лекции | __34___ часа |
Практические занятия | __ нет ___ часов |
Лабораторные работы | __16___ часов |
Индивидуальные занятия с преподавателем | __нет___ часов |
Самостоятельные занятия | __18__ часов |
Итоговая аттестация | Экзамен 8 семестр |
ВСЕГО | 50 часов |
-
ЦЕЛИ И ЗАДАЧИ
Цель курса – Целью курса является изучение основ построения оптимизирующих статических и динамических компиляторов современных языков программирования, учитывающих особенности архитектуры современных компьютеров.
Задачами данного курса являются:
-
освоение студентами базовых знаний в области компиляторных технологий и оптимизирующей компиляции программ;
-
приобретение теоретических знаний в области теории графов, теории решеток, методов сбора статистики, лежащих в основе современных компиляторных технологий;
-
оказание консультаций и помощи студентам в проведении собственных исследований и разработок в областях, использующих компиляторные технологии;
-
приобретение навыков работы на современных распределенных неоднородных компьютерных системах.
-
Структура и содержание дисциплины
Структура дисциплины
Перечень разделов дисциплины и распределение времени по темам
№ темы и название | Количество часов |
1. Архитектура оптимизирующего компилятора. Цели и задачи курса. | 1 |
2. Построение промежуточного представления среднего уровня (обзор). | 1 |
3. Машинно-независимая оптимизация компилируемого кода. | 14 + 8 |
4. Машинно-ориентированная оптимизация. | 10 + 8 |
5. Динамическая и адаптивная оптимизация в компиляторах времени выполнения. | 4 |
6. Современные компиляторные среды. | 2 |
7. Применение статического и динамического анализа для решения различных задач инженерии программ. | 2 |
ВСЕГО часов | 50 (34 л. + 16 лаб.) |
Вид занятий
ЛЕКЦИИ:
№ темы и название | Количество часов |
1. Архитектура оптимизирующего компилятора. Цели и задачи курса. | 1 |
2. Построение промежуточного представления среднего уровня (обзор). | 1 |
3. Машинно-независимая оптимизация компилируемого кода. | 14 |
4. Машинно-ориентированная оптимизация. | 10 |
5. Динамическая и адаптивная оптимизация в компиляторах времени выполнения. | 4 |
6. Современные компиляторные среды. | 2 |
7. Применение статического и динамического анализа для решения различных задач инженерии программ. | 2 |
ВСЕГО часов | 34 |
ЛАБОРАТОРНЫЕ РАБОТЫ:
№ темы и название | Количество часов |
3. Машинно-независимая оптимизация компилируемого кода. | 8 |
4. Машинно-ориентированная оптимизация. | 8 |
ВСЕГО часов | 16 |
ВИДЫ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
№ п.п. | Темы | Трудоёмкость (количество часов) |
1 | Изучение теоретического курса – выполняется самостоятельно каждым студентом по итогам каждой из лекций, результаты контролируются преподавателем на лекционных и практических занятиях, используются конспект (электронный) лекций, учебники, рекомендуемые данной программой, методические пособия. | 14 час. |
2 | Решение задач по заданию преподавателя: – решаются задачи, выданные преподавателем по итогам лекций, и сдаются в конце семестра; используются электронный конспект и слайды лекций, учебники, рекомендуемые данной программой (см. ниже), | 4 час. |
3 | Подготовка к выполнению лабораторных работ. | |
4 | Подготовка к экзамену | |
ВСЕГО (зач. ед.(часов)) |
Содержание дисциплины
№ п/п | Название модулей | Разделы и темы лекционных занятий | Содержание |
1 | Архитектура оптимизирую-щего компилятора. Цели и задачи курса. | Архитектура оптимизирующе-го компилятора. | Задача компиляции. Основные фазы компиляции. Промежуточные представления программы. Цели и задачи курса. |
2 | Построение промежуточно-го представле-ния среднего уровня (обзор). | Построение промежуточного представления среднего уровня | Лексический, синтаксический и контекстный анализ исходного кода, построение абстрактного синтаксического дерева и таблицы символов (промежуточное представление верхнего уровня). Построение промежуточного представления среднего уровня – трехадресный код (четверки). Граф потока управления и алгоритм его построения. |
3 | Машинно-независимая оптимизация компилируе-мого кода. | Локальная оптимизация. | Задачи локальной оптимизации. Построение ациклического направленного графа базового блока методом нумерации значений. Особенности реализации локального метода нумерации значений. |
Глобальная оптимизация. Анализ и оптимизация потока управления. | Оптимизация переходов и возвратов из функций. Открытая вставка функций. Развертка циклов. | ||
Глобальная оптимизация. Анализ потока данных. | Анализ потока данных – основной метод глобальной и межпроцедурной оптимизации. Итерационный алгоритм анализа потока данных на полурешетках. Сходимость итерационного алгоритма для различных классов передаточных функций. Монотонные и дистрибутивные структуры потока данных. | ||
Глобальная оптимизация. Анализ зависимостей. | DU-цепочки. Зависимости по данным и по управлению. Граф зависимостей. Построение срезов (слайсов). | ||
Глобальная оптимизация. Методы ускорения анализа потока данных. | Построение глубинного остовного дерева графа потока управления. Нумерация узлов графа потока управления (в глубину). Дерево доминаторов и алгоритм его построения. Понятие области. Виды областей Алгоритм построения иерархии областей для приводимых графов потока управления. Дерево управления процедуры. Анализ потоков данных на основе областей. Построение передаточных функций областей с помощью операций композиции, сбора и замыкания. Замкнутость структуры потока данных относительно операций композиции, сбора и замыкания. Трехэтапный алгоритм анализа потока данных на основе областей (на примере достигающих определений). Метод расщепления узлов для обработки неприводимых графов потока управления. | ||
Глобальная оптимизация гнезд циклов. | Выделение гнезд циклов на графе потока управления. Вынесение инвариантных вычислений за пределы цикла. Сокращение количества индуктивных переменных. Выбор оптимального порядка циклов в гнезде для улучшения локальности данных. Развертка циклов. | ||
Глобальная нумерация значений | SSA-форма и оптимальный метод ее построения. Нумерация значений в расширенном базовом блоке. Повторное использование результатов для блоков, входящих в несколько путей. Механизм контекстно-ориентированных хэш-таблиц. Алгоритм нумерации значений на основе доминаторов. Объединение глобальной нумерации значений с построением SSA-формы. | ||
Глобальный анализ псевдонимов | Проблемы, связанные с обработкой членов структур, элементов массивов и данных, доступных по указателям, в том числе – динамических данных. Понятие псевдонима (алиаса). Псевдонимы в языке Си (указатели). Псевдонимы в языке Java (объектные ссылки). Глобальный анализ псевдонимов: первая фаза – обнаружение псевдонимов, вторая фаза – распространение псевдонимов (задача анализа потока данных). Недостаточность глобального анализа псевдонимов. | ||
Межпро-цедурный анализ указателей | Межпроцедурный анализ указателей. Граф вызовов и способы его задания. Чувствительность анализа к потоку управления и контексту вызова. Контекстно-нечувствительный межпроцедурный анализ, его достоинства и недостатки. | ||
4 | Машинно-ориентиро-ванная оптимизация. | Особенности архитектуры современных компьютеров и задача генерации оптимального кода. | RISC и CISC. Конвейер потока команд: блокировки конвейера, система сброса конвейера, конфликты по данным. Вырезки из массивов. Конвейер данных. Выдача команд. Блок предсказания переходов. Конвейерное выполнение. Out-of-Order-процессоры. VLIW и EPIC. Многоядерные процессоры. |
Промежуточное представление низкого уровня (последователь-ность трехадресных инструкций). | Операции низкого уровня. Модель целевой машины (целевой язык). Псевдорегистры. Режимы адресации: прямая, косвенная, индексированная адресации. Задачи машинно-ориентированной оптимизации: распределение памяти, распределение и назначение регистров, планирование кода. | ||
Распределение и назначение регистров. | Распределение и назначение регистров в пределах базового блока (Функция getReg()). Глобальное распределение регистров. Интервалы жизни значений переменных и их построение. Оценка стоимости сброса. Конфликтные ситуации, граф конфликтов и его построение. Распределение и назначение регистров с помощью алгоритма раскраски графа конфликтов снизу вверх. | ||
Планирование кода. | Постановка задачи планирования кода: цель планирования кода – эффективное использование параллелизма на уровне команд. Ограничения планирования кода – зависимости по данным и по управлению. Упорядочение фаз распределения регистров и планирования кода. Способы оценки эффективности расписания. Локальное планирование кода: алгоритм планирования списка. Конвейеризация одиночных циклов. | ||
5 | Динамиче-ская и адаптивная оптимизация в компилято-рах времени выполнения | Динамическая и адаптивная оптимизация в компиляторах времени выполнения | Структура JIT-компилятора. Примеры JIT-компиляторов. Уровни оптимизации. Архитектура JIT-компилятора (на примере экспериментального JIT-компилятора Jikes RVM): подсистема измерений, подсистема перекомпиляции, подсистема управления процессом динамической компиляции (контроллер). Фазы JIT-компиляции. Профилирование в JIT-компиляторах. Профилирование с помощью «семплов». Хранение данных о профилях. Динамическая и адаптивная оптимизация в JIT-компиляторах. |
6 | Современные компилятор-ные среды. | Современные компиляторные среды. | GCC, LLVM |
7 | Применение статического и динамиче-ского анализа для решения различных задач инженерии программ. | Применение статического и динамического анализа для решения задач инженерии программ (обзорная лекция). | Рассматриваются проблемы поиска дефектов, контроля за использованием выбранного подмножества исходного языка, понимания программ (обратная инженерия) и др. |
-
Образовательные технологии
№ п/п | Вид занятия | Форма проведения занятий | Цель |
1 | лекция | изложение теоретического материала | получение теоретических знаний по дисциплине |
2 | лекция | изложение теоретического материала с помощью презентаций | повышение степени понимания материала |
3 | лекция | решение задач по заданию преподавателя – решаются задачи, выданные преподавателем по итогам лекционных занятий, и сдаются в конце семестра, используются конспект (электронный) лекций, учебники, рекомендуемые данной программой, а также учебно-методические пособия | осознание связей между теорией и практикой, а также взаимозависимостей разных дисциплин |
4 | самостоятельная работа студента | подготовка к защитам лабораторных работ, подготовка к экзамену и зачету с оценкой | повышение степени понимания материала |
-
Учебно-методическое и информационное обеспечение дисциплины
-
Основная литература.
-
-
A.В. Axo, М.С. Лам, P. Сети, Дж.Д. Ульман. Компиляторы: принципы, технологии и инструментарий. Издание второе. / М.: ООО «И.Д. Вильямс», 2008, ISBN: 978-5-8459-1349-4
-
K. D. Cooper and L. Torczon. Engineering a Compiler. 2nd edition. / Elsevier (Morgan Kaufman Publishers), 2012, ISBN: 978-0-12-088478-0.
-
Дополнительная литература.
-
Y. N. Srikant, P. Shankar. The Compiler Design Handbook. 2nd edition. CRC press – 2008 ISBN: 978-1-4200-4382-2
-
The LLVM Compiler Infrastructure. // http://llvm.org/
-
A GNU Manual. // http://gcc.gnu.org/
-
The SUIF 2 Compiler System. // http://suif.stanford.edu/suif/suif2/
-
Free Compiler Construction Tools. // http://www.thefreecountry.com/programming/compilerconstruction.shtml
-
Пособия и методические указания.
Слайды лекций (Интернет)
Программу составил
С. С. Гайсарян, доцент, к.ф.–м.н.
«_____»_________2013 г.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.