Лекции по оптимизирующим компиляторам
В последние несколько месяцев занимался довольно новым для себя делом - читал лекции по курсу «Оптимизирующие компиляторы». Раньше мне не приходилось читать лекции (ну или почти не приходилось), да и предмет не самый распространённый. В общем о том что получилось, что хочется дополнить и исправить расскажу ниже.
Сам по себе курс длится два семестра, я читаю только первый. В нём предполагается рассказать в целом про оптимизирующие компиляторы и сами оптимизации. Курс был составлен на основе моих конспектов этого курса, прочитанного в МФТИ в 2013 году.
Теперь про содержимое самого курса. Сейчас он состоит из 11 лекций:
- Введение в оптимизирующие компиляторы;
- Введение в теорию языков и автоматов. Лексический анализ;
- Введение в теорию языков и автоматов. Синтаксический анализ;
- Алгоритмы на графах, используемые в компиляторах;
- Структуры данных в оптимизирующих компиляторах;
- Оптимизации управления;
- Потоковые оптимизации;
- Цикловые оптимизации;
- Цикловые оптимизации (часть 2). Оптимизации памяти;
- Анализ указателей;
- Планирование кода. Межпроцедурные оптимизации.
Я хочу дорабатывать данный курс. Пока мне видятся не лучшими решениями следующие вещи:
- Наличие второй и третьей лекции. Теорию автоматов нужно изучать отдельно, а информацию по фронтенду можно слить в одну лекцию. Но не думаю что это подойдёт для кафедры, на которой читается курс - отдельно теории автоматов у них нет;
- В девятой лекции идёт остаток восьмой про циклы и ещё треть лекции про оптимизации памяти. По идее про оптимизации памяти нужна отдельная лекция, но у меня по данной теме очень мало информации;
- Одиннадцатая лекция тоже содержит две разные темы, их неплохо бы читать отдельно.
Есть ещё некоторые замечания по каждой лекции в отдельности, но об этом я расскажу когда (если) выложу слайды.
Ещё есть масса тем, про которые или не рассказано ничего, или сказано очень мало:
- ничего нет про распараллелвание
- почти ничего нет про режим -fwhole/-flto
- мало про профилирование
- ничего нет про векторизацию
- почти ничего про межпроцедурные анализы
- ничего про оптимизации C++
- ничего про средства отладки/разработки/workflow
В общем сейчас у меня появились небольшие наработки по данному курсу, есть что и куда пилить. Но хотелось бы узнать у сообщества: что ещё следует читать в курсе оптимизирующих компиляторов, возможно кто-то знает удачные примеры таких курсов? /p>