The death of optimizing compilers


🔗 Эта заметка — комментарий для страницы:
https://cr.yp.to/talks/2015.04.16/slides-djb-20150416-a4.pdf

Не могу сказать, что безусловно согласен с этим докладом, но он заставляет задуматься. Форматирование оригинала, конечно, нечитаемо. Вероятно, изначально слайды были в текстовом формате. Но прочитать оригинал, безусловно, стоит.

Основные тезисы в моём пересказе.

Код программы можно разделить на 2 группы:

  1. Небольшое количество «горячего» кода, многократное исполнение которого занимает почти всё время работы программы.
  2. Большое количество «холодного» кода, который исполняется редко (в том числе, например, только при запуске) и не оказывает заметного влияния на производительность.

Производительность «холодного» кода никого не должна волновать. Достаточно много кода сейчас пишется на интерпретируемых языках программирования (Python) или исполняется в браузере с большими накладными расходами.

«Горячий» код оптимизируется вручную разработчиками алгоритма, потому что его оптимизация требует глубокого знания алгоритма (грубо говоря, «чем можно пренебречь ради ускорения») и глубокого знания аппаратной платформы. Одно только руководство по системе команд процессоров Intel сейчас занимает 5 томов (2a-2d) и 2.2 тыс. страниц.

Оптимизирующие компиляторы — это очень сложные программы, которые сами могут вносить ошибки в оптимизируемый код. Состав стадий оптимизации влияет на время компиляции и, например, на удобство отладки. При этом для «холодного» кода оптимизации бесполезны. А для «горячего» кода компилятор не способен достичь уровня оптимизации, близкого к тому, который может получить специалист. Мы говорим об оптимизациях наподобие кэширования, изменения методов расчёта и формул. Компилятор, который может проводить только преобразования, сохраняющие семантику исходного кода, не имеет права так делать.

Вывод: дальнейшее усложнение оптимизирующих компиляторов не имеет особого смысла.

(В заключение автор цитирует Кнута о перспективах систем интерактивной трансформации программ, как одного из направлений развития. Но наиболее интересен, на мой взгляд, предыдущий тезис.)

Максим Кривчиков