суббота, 4 июня 2016 г.

Список учебных курсов по оптимизирующим компиляторам


Как вы помните, я читаю курс по оптимизирующим компиляторам. В процессе подготовки к лекциям приходится искать много материала по теме, часто бывает что какой-то информации нету в книгах, и гугл выбрасывает меня на лекции с других ВУЗов или публикации. В этом посте поделюсь ссылками на другие курсы лекций, относящиеся к компиляторам, из которых я брал информацию.
  • CSE501 - Implementation of Programming Languages, University of Washington.
    Курс довольно разнообразный и не совсем по оптимизациям. Меня интересовал раздел по анализу потока данных и немного про анализ указателей. Но помимо этого там есть интересный материал по верификации и по высокопроизводительным вычислениям. В разделе prerequirements есть ссылки на более базовые курсы.
  • CIS570 - Modern Programming Language Implementation, Penn Engineering.
    Общий курс по компиляторам, затрагиваются вопросы анализов потока данных, анализа указателей, распределения регистров.
  • CS252 - Advanced Topics in Programming Languages, Harvard School of Engeneering and Applied Sciences.
    Очень интересный курс по анализу программ. Затрагивает как статические, так и динамические языки.
  • CS378 - Programming For Performance, The University of Texas.
    Весьма интересный курс по высокопроизводительным системам с большим упором на аппаратуру. Затронуты особенности работы процессора, памяти, многопоточности. Отдельно можно отметить хорошую лекцию по цикловым оптимизациям.
  • CS143 - Compilers, Stanford University.
    Почти классический курс по компиляторам - большое внимания лексерам/парсерам, довольно мало внимания оптимизациям. Но даже там встречается полезный материал. (Не, на самом деле хороший курс, сделан и продуман лучше некоторых предыдущих).
  • COMP512 - Advanced Compiler Construction, Rice University.
    Его читает сам K. D. Cooper, автор книги "Engineering a compiler"! Теперь о курсе. В общем очень клёвый курс, посвящённый оптимизирующим компиляторам. Подразумевает что студенты уже имеют определённое представление о компиляторах.
  • COMP515 - Advanced Compilation for Vector and Parallel Processors,
    Rice University.
    Курс посвящён оптимизациям для архитектур с явным параллелизмом. Т.о. основное внимание уделяется анализу зависимостей, векторизации, конвейеризации, работе с кэшем.
  • COS320 - Compiling Techniques, Princeton University.
    Ещё один классический курс по компиляторам. Изюминку ему придаёт наличие материала по компиляции ML, и вообще повышенное внимание к структуре промежуточного представления программы. Радуют отдельные лекции по AST и по системе типов.
  • CS352 - Compilers: Principles and Practice, Purdue Universit.
    Довольно базовый курс, ближе к классическому. Про оптимизации почти ничего нет, но есть про структуру программы и про проверки типов (что не так часто встречается).
  • CS243 - Program Analysis and Optimization, Stanford University.
    Это почти канонъ хотя бы потому что одним из лекторов является сама М. Лам (одна из авторов Dragon Book'а)! Курс, как можно догадаться, посвящён анализам и оптимизациям. Рассказывается про анализ и оптимизацию потока данных, конвейеризацию, прочие цикловые оптимизации, анализ указателей, немного про динамическую компиляцию.
  • CS745Optimizing Compilers, Carnegie Mellon University.
    Базовый курс по компиляторам, минимум треть которого посвящена анализу потока данных и локальным оптимизациям. Но прочие темы, необходимые для данного курса присутствуют. Несколько лекций посвящено LLVM, что делает курс интересным.
  • CS745Optimizing Compilers, Carnegie Mellon University.
    Нет, я не опечатался. Это тот же курс из того же университета. Но он читается другой группой преподавателей, и поэтому немного отличается. Набор тем в целом такой же, но слайды иногда различаются. В любом случае стоит иметь его ввиду.
  • CS412/413 - Introduction to Compilers, Cornell University.
    Тоже весьма годный классический курс по компиляторам, но для оптимизаций тоже есть несколько хороших лекций. Радует большое внимание семантическому анализу и представлению программы в компиляторе.
  • CS5470 - Compiler Principles and Techniques, The University of Utah.
    Данный курс тоже является довольно классическим. Его особенность в том что теоретический курс идёт в тесной привязке к практической работе - разработке компилятора MiniJava, поэтому он является весьма целостным и хорошо структурированным. На самом деле как-то так и должен выглядеть хороший курс по программированию.
  • CS553: Programming Language Design and Implementation (Algorithmic Language Compilers), Colorado State University.
    Курс по оптимизирующим компиляторам. Тоже уделено внимание LLVM, есть видео с лекций. К сожалению внешним пользователям не все материалы доступны.
Можно заметить что в списке нет ни одного русскоязычного ресурса. В первую очередь это связано с тем что при поиске англоязычных терминов в выдаче сначала присутствуют англоязычные ресурсы.

Но есть и другая проблема - в России почему-то не принято выкладывать материалы курса в общий доступ. Если вы посмотрите на приведённые мной ссылки, то тут у каждого курса есть своя страничка с описанием и материалами. У нас такое встречается крайне редко. Часто по причине банального отсутствия материалов (ну нету у преподов слайдов, всё на бумажках и из головы читается).

У меня есть мечта выложить свои материалы, но пока я этого не делаю просто потому что курс пока не готов. Только после второго года чтения я начинаю понимать как правильно строить структуру этого курса. А ведь ещё нужно придумать практические задания. В общем пока ещё надо много над чем поработать.

PS. Если кто подкинет ссылочек на хорошие русскоязычные курсы - буду очень благодарен ;)

    Комментариев нет:

    Отправить комментарий