C++ 11/14 и современные аспекты построения компиляторов

Материал из Кафедра математической кибернетики
Версия от 16:22, 19 сентября 2014; KonovodovV (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Спецкурс для студентов 3-5 курсов, магистрантов.

Лекции проходят по четвергам, в 18:05 в аудитории 705.

Лектор — к.т.н., начальник отдела разработки компиляторов Intel Мелик-Адамян Арег Фрикович.

Первое занятие — 25.09.2014

Аннотация курса

Цель курса — знакомство студентов с основами работы современных оптимизирующих компиляторов с использованием языка С++11/14. Курс решает следующие задачи: формирование системного представления об возможностях языка С++, архитектурах современных микропроцессоров, основных структурах данных и алгоритмах, применяемыми в компиляторах.

Предварительное расписание курса

Тема лекции Трудоёмкость
1. Введение. Понятие компиляции, виды оптимизирующей компиляции. Архитектуры современных микропроцессоров. Почему С++? 4 часа
2. Внутреннее представление программы и его построение. Как обрабатываются виртуальные функции? Дедукция типов в С++ 11. 4 часа
3. Управляющий граф, построение и использование. Программирование графов на С++. Boost::graph. 2 часа
4. Анализ потока данных на основе решения системы уравнений. Лямбда или не-лямбда? 4 часа
5. Динамический и статический профилировщики программ. Что нужно знать о компоновщике в Linux? 2 часа
6. Мелко-зернистые оптимизации. Основные алгоритмы в STL. 2 часа
7. Сбор общих подвыражений, удаление избыточных операций чтения из памяти. Основные алгоритмы в STL (2). 2 часа
8. Подстановка констант, удаление мертвого кода. Как устроен исполняемый файл в Linux и причем тут С++? Mangling. 2 часа
9. Межпроцедурный анализ программ. STL Контейнеры. 2 часа
10. Межпроцедурные оптимизации. STL Контейнеры (2) 2 часа
11. Анализ зависимостей в цикловых регионах программы. Параллелизм в С++ 11. 2 часа
12. Цикловые оптимизации и условия их корректности. Векторные инструкции. SIMD в С++. 4 часа

Литература

Основная

  • ISO/IEC Programming Language — C++ Standard, 14882:2014
  • Никлаус Вирт, Построение компиляторов, ДМК, Москва, 2010.
  • Keith Cooper, Engineering a Compiler, Second Edition, Morgan Kaufmann, Burlington, 2011.

Дополнительная

  • Steven S. Muchnick, “Advanced Compiler Design and Implementation”, Morgan Kauffman, San Francisco,1997.
  • Dick Grune, Henri E. Bal, Ceriel J.H. Jacobs and Koen G. Langendoen, Modern Compiler Design, by John Wiley & Sons,Ltd, 2000.
  • Randy Allen, Ken Kennedy, Optimizing Compilers for Modern Architectures. 2002 by Academic Press.