Gaisaryan_UMK_2014 (1157515)
Текст из файла
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное образовательное учреждение
высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ М.В. ЛОМОНОСОВА»
Факультет вычислительной математики и кибернетики
УТВЕРЖДАЮ
Декан факультета ВМК
__________________Е.И. Моисеев
«______»__________________2013
Учебно-методический комплекс
«Конструирование компиляторов»
Направление подготовки
010400_Прикладная математика и информатика
Профили бакалавриата:
3 поток "Системное программирование и компьютерные науки"
Квалификация (степень) выпускника
Бакалавр
Форма обучения
Очная
Разработчик (составитель) УМК проф. Гайсарян С. С. | ____________ | «___»_________20__ г. |
Москва
2013
Содержание
1. Место дисциплины в структуре основной образовательной программы 3
2. Цели освоения дисциплины 3
3. Компетенции обучаемого, формируемые в результате освоения дисциплины 3
4. Рабочая программа учебной дисциплины 4
4.1 Тематический план 4
4.2 Структура дисциплины по видам работ 7
4.3. Комплексное индивидуальное практическое задание 9
4.4 Содержание лекций 10
5. Образовательные технологии 10
6. Учебно-методическое и информационное обеспечение дисциплины 11
7. Материально-техническое обеспечение дисциплины 11
8. Учебно-методическое обеспечение самостоятельной работы студентов 11
8.1 Пример учебно-методического обеспечения для практического задания 11
9. Контрольно-оценочные материалы 15
9.1 Программа экзамена по курсу 15
10. Рейтинг-план дисциплины 16
-
1. Место дисциплины в структуре основной образовательной программы
Дисциплина «Конструирование компиляторов» входит в профессиональный блок вариативной части ОС МГУ по направлению подготовки 010400.62 «Прикладная математика и информатика». Логически и содержательно-методически данная дисциплина связана с общефакультетскими курсами: «Алгоритмы и алгоритмические языки», «Общая алгебра».
Освоение дисциплины «Конструирование компиляторов» обеспечивает студентов необходимыми знаниями и навыками в области оптимизирующей компиляции, а также в таких смежных областях, как статический анализ для выявления дефектов, обратная инженерия, генерация тестовых покрытий и др. В рамках курса студенты обучаются применять изученный ранее математический аппарат для решения прикладных задач.
-
2. Цели освоения дисциплины
Целью освоения дисциплины является получение базовых знаний в области разработки и применения современных компиляторов и компиляторных сред для разработки программ и для решения некоторых задач по обеспечению безопасного функционирования программ, для решения которых применяются компиляторные технологии.
-
3. Компетенции обучаемого, формируемые в результате освоения дисциплины
В результате освоения дисциплины обучающийся должен:
Знать: структуру современного оптимизирующего компилятора; структуру и состав современных компиляторных сред: GCC, LLVM и др.; промежуточные представления программы, удобные для статической оптимизации; методы машинно-независимой оптимизации; методы статической машинно-ориентированной оптимизации; методы динамического анализа и динамической оптимизации; методы динамического анализа программ и принципы построения динамических (JIT) компиляторов.
Уметь: применять компиляторные методы и технологии для решения задач обратной инженерии, защиты программного кода, обнаружения дефектов в программах и др.; строить квази-оптимальную SSA-форму процедуры; «укрупнять» узлы графа потока управления, выделяя в нем суперблоки и другие области и пересчитывая передаточные функции; осознанно выбирать режим работы компилятора, оптимальный для его программы.
Владеть: методами статического анализа и оптимизации программ на основе исследования потока данных; методами и средствами статической машинно-ориентированной оптимизации (распределение регистров, планирование кода, использование параллелизма уровня машинных инструкций).
Универсальные, профессиональные и специализированные компетенции, которыми должен обладать студент в результате освоения дисциплины
Универсальные компетенции:
а) общенаучные: способность анализировать научные проблемы и физические процессы, использовать на практике фундаментальные знания, полученные в области естественных и гуманитарных наук (НК-1); способность осваивать новую проблематику, терминологию, методологию, овладевать научными знаниями, владеть навыками самостоятельного обучения (НК-2); способность логически точно, аргументировано и ясно формулировать свою точку зрения, владеть навыками научной и общекультурной дискуссий (НК-3); готовность к творческому взаимодействию с коллегами по работе и научным коллективом, способность и умение выстраивать межличностное взаимодействие, соблюдая уважение к товарищам и проявляя терпимость к иным точкам зрения (НК-4).
в) системные: способность к творчеству, порождению инновационных идей, выдвижению самостоятельных гипотез (СК-1);
способность к поиску, критическому анализу, обобщению и систематизации научной информации, к постановке целей исследования и выбору оптимальных путей и методов их достижения (СК-2);
Профессиональные компетенции:
в области научно-исследовательской деятельности:
способность понимать и применять в исследовательской и прикладной деятельности современный математический аппарат (ПК-2);
в проектной и производственно-технологической деятельности: способность применять в профессиональной деятельности современные языки программирования и методы параллельной обработки данных, операционные системы, электронные библиотеки и пакеты программ, сетевые технологии (ПК-3);
способность приобретать новые научные и профессиональные знания, используя современные образовательные и информационные технологии (ПК-9);
способность осуществлять целенаправленный поиск информации о технологических достижениях в сети Интернет и из других источников (ПК-10).
Общая трудоёмкость дисциплины составляет 3,0 зачётных единиц (108 часов). Лекции – 32 часа, семинары – 32 часа, самостоятельная работа – 44 часа,
Экзамен в 7-м семестре.
За курс отвечает кафедра системного программирования.
-
4. Рабочая программа учебной дисциплины
-
4.1 Тематический план
-
№ | Название темы | Аудиторные занятия (часы) | Самостоятельная работа студента | |
лекции | семинары | |||
| Введение. Описание процесса компиляции. Структура оптимизирующего компилятора. Основные вопросы, изучаемые в курсе. | 1 | 2 | |
| Построение промежуточного представления программы. Базовые блоки и граф потока управления. Биткод среды LLVM – пример промежуточного представления. | 1 | 2 | 2 |
| Локальная оптимизация. Метод нумерации значений. Представление базового блока в виде направленного ациклического графа | 2 | 2 | 2 |
| Анализ потока данных – основной метод глобальной оптимизации. Примеры анализа потока данных – анализ достигающих определений и анализ живых переменных. | 4 | 2 | 2 |
| Граф потока управления: остовное дерево, обход, нумерация вершин, классификация дуг, отношение до-минирования и построение дерева доминаторов. | 4 | 4 | 4 |
| SSA-форма промежуточного пред-ставления и ее построение. Граница доминирования. Анализ потока данных в SSA-форме. Доступные выражения. | 2 | 2 | 2 |
| Обоснование анализа потока данных: полурешетки, передаточные функции, общий итерационный алгоритм. | |||
| Методы ускорения анализа потока данных. Суперблоки и другие области графа потока управления. Вычисление передаточных функций областей по передаточным функци-ям составляющих их базовых блоков. | 4 | 4 | 4 |
| Глобальный метод нумерации значений | 4 | 4 | 4 |
| Глобальный анализ указателей. Псевдонимы (алиасы). Недостаточность глобального анализа. Межпроцедурный анализ. Граф вызовов. Методы учета контекста. | 4 | 4 | 4 |
| Задачи решаемые на этапе машинно-ориентированной оптимизации. Планирование кода. Распределение регистров | 2 | 2 | 2 |
| Другие методы оптимизации: оптимизация потока управления, возвраты из рекурсивных функций. Раскрутка циклов. Открытая вставка функций. | 2 | 2 | 2 |
| Генерация объектного кода методом переписывания дерева | 4 | 4 | 4 |
| Комплексное практическое задание. | 0 | 0 | 12 |
Итого: | 32 | 32 | 44 | |
Всего (часы): (аудиторные занятия и самостоятельная работа) | 108 |
-
4.2 Структура дисциплины по видам работ
№ | Раздел Дисциплины | Неделя семестра | Виды учебной работы, включая самостоятельную работу студентов и трудоемкость (в часах) | Формы текущего контроля успеваемости (по неделям семестра) Форма промежуточной аттестации (по семестрам) | ||
лекц | прак | сам | ||||
| Введение. Описание процесса компиляции. Структура оптимизирующего компилятора. Основные вопросы, изучаемые в курсе. | 1 | 1 | 1 | ||
| Построение промежуточного представления программы. Базовые блоки и граф потока управления. Биткод среды LLVM – пример промежуточного представления. | 1 | 1 | 2 | 1 | Промежуточная проверка практического задания |
| Локальная оптимизация. Метод нумерации значений. Представление базового блока в виде направленного ациклического графа | 2 | 2 | 2 | 2 | Промежуточная проверка практического задания |
| Анализ потока данных – основной метод глобальной оптимизации. Примеры анализа потока данных – анализ достигающих определений и анализ живых переменных. | 3 | 2 | 2 | 2 | Промежуточная проверка практического задания с выставлением технических баллов |
| Граф потока управления: остовное дерево, обход, нумерация вершин, классификация дуг, отношение до-минирования и построение дерева доминаторов. | 4 | 4 | 4 | 4 | Промежуточная проверка практического задания |
| SSA-форма промежуточного пред-ставления и ее построение. Граница доминирования. Анализ потока данных в SSA-форме. Доступные выражения. | 5-6 | 2 | 2 | 2 | Промежуточная проверка практического задания |
| Обоснование анализа потока данных: полурешетки, передаточные функции, общий итерационный алгоритм. | 7 | 4 | 4 | 4 | Промежуточная проверка практического задания |
| Методы ускорения анализа потока данных. Суперблоки и другие области графа потока управления. Вычисление передаточных функций областей по передаточным функциям составляющих их базовых блоков. | 8-9 | 4 | 4 | 4 | Промежуточная проверка практического задания с выставлением технических баллов |
| Глобальный метод нумерации значений | 10 | 2 | 2 | 2 | Промежуточная проверка практического задания |
| Глобальный анализ указателей. Псевдонимы (алиасы). Недостаточность глобального анализа. Межпроцедурный анализ. Граф вызовов. Методы учета контекста. | 11-12 | 4 | 2 | 2 | Промежуточная проверка практического задания |
| Задачи решаемые на этапе машинно-ориентированной оптимизации. Планирование кода. Распределение регистров | 13-14 | 4 | 4 | 4 | Промежуточная проверка практического задания |
| Другие методы оптимизации: оптимизация потока управления, возвраты из рекурсивных функций. Раскрутка циклов. Открытая вставка функций. | 15 | 2 | 2 | 2 | Промежуточная проверка практического задания |
| Генерация объектного кода методом переписывания дерева | 16 | 2 | 2 | 2 | Итоговая проверка практического задания с выставлением технических баллов |
14 | Комплексное практическое задание. | 1-16 | 0 | 0 | 12 |
-
4.3. Комплексное индивидуальное практическое задание
В качестве практического задания студентам предлагается попробовать самостоятельно реализовать одно из оптимизирующих преобразований, используя инфраструктуру компилятора LLVM и его промежуточное представление – биткод.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.