Тоже занимаюсь компиляторами, только не для LLVM, а для виртуальной машины (исполнитель запросов колоночной базы, что-то отдаленно напоминающее интерпретатор SQLite). В свое время случайно узнал про SSA из какой-то статьи - для меня это было настолько неожиданное открытие, что я две недели переписывал генерацию кода в эту форму. Оказалось - мега удобная штука. Я бы послушал про оптимизации, основанные на IR. С dead code и удалением дубликатов - понятно, какие еще оптимизации применяются и как они работают, как определяется момент завершения цикла оптимизации?
Спасибо за вопрос! SSA - широко известная форма, хотя и не все компиляторы её используют, но она действительно упрощает часть оптимизаций. Про оптимизации, выполняющиеся в middle-end компиляторов можно почитать в классических книгах, помимо широко известного Dragon book, можно еще посоветовать Engineering: A Compiler www.amazon.com/Engineering-Compiler-Keith-Cooper/dp/012088478X (Modern Compiler Design link.springer.com/book/10.1007/978-1-4614-4699-6 еще например). Также можно посмотреть на документацию LLVM с описанием базовых оптимизирующих проходов, которые в нем есть llvm.org/docs/Passes.html#transform-passes. Завершение каждой оптимизации - очень индивидуальный вопрос, построенный часто на различных эвристиках, поверенных на определенном наборе бенчмарков. Это может быть завершение поиска всех подходящих для данной оптимизации случаев, использование различных thresholdов, анализ того насколько разрослось CFG и т.д. Тема оптимизаций очень обширная, и хотя мы ещё, конечно, будем разговаривать про компиляторы, но покрыть всё детально невозможно в таком формате, поэтому если есть заинтересованность, рекомендуем почитать литературу и посмотреть на код LLVM/GCC и других компиляторов (большинство open-source).
в каком месте на данный момент находится передовая мысль разработчиков архитектуры? кто займет вершину надолго в ближайшем будущем ? ренессанс cisc возможен?)
Кто займёт вершину - это вопрос не технический, а скорее экономический и политический. RISC-V может сильно потеснить тот же ARM, но если это случится, то, скорее всего, не потому, что он такой замечательный с архитектурной точки зрения. Сейчас грань между RISC и CISC довольно сильно размыта. CISC-процессоры внутри имеют RISC-подобные конвейеры, исполняющие микрооперации. RISC-процессоры получают "сложные" инструкции (пример: векторые инструкции в RISC-V), переменную длину команд с особенностями кодирования (примеры из RISC-V: RVC, крипто-расширения) и прочие фичи, которые скорее похожи на CISC. Когда-то память микрокода была важна, и это деление было важным. Сейчас скорее важны кеши, параллелизм уровня инструкций и предсказание переходов.
пока похоже что apple, amd и intel будут делать перескакивать друг через друга снова как в 90-х. и ещё в этот клуб пытается попасть arm, а может будут и другие претенденты
Еее, респект за контент, бэкенд в массы!
Спасибо! Скоро будет второй выпуск ;)
Спасибо! Было было интересно.
Спасибо, нам очень приятно!
Том Круз в с++😂😂😂
Тоже занимаюсь компиляторами, только не для LLVM, а для виртуальной машины (исполнитель запросов колоночной базы, что-то отдаленно напоминающее интерпретатор SQLite). В свое время случайно узнал про SSA из какой-то статьи - для меня это было настолько неожиданное открытие, что я две недели переписывал генерацию кода в эту форму. Оказалось - мега удобная штука. Я бы послушал про оптимизации, основанные на IR. С dead code и удалением дубликатов - понятно, какие еще оптимизации применяются и как они работают, как определяется момент завершения цикла оптимизации?
Спасибо за вопрос! SSA - широко известная форма, хотя и не все компиляторы её используют, но она действительно упрощает часть оптимизаций. Про оптимизации, выполняющиеся в middle-end компиляторов можно почитать в классических книгах, помимо широко известного Dragon book, можно еще посоветовать Engineering: A Compiler www.amazon.com/Engineering-Compiler-Keith-Cooper/dp/012088478X (Modern Compiler Design link.springer.com/book/10.1007/978-1-4614-4699-6 еще например).
Также можно посмотреть на документацию LLVM с описанием базовых оптимизирующих проходов, которые в нем есть llvm.org/docs/Passes.html#transform-passes.
Завершение каждой оптимизации - очень индивидуальный вопрос, построенный часто на различных эвристиках, поверенных на определенном наборе бенчмарков. Это может быть завершение поиска всех подходящих для данной оптимизации случаев, использование различных thresholdов, анализ того насколько разрослось CFG и т.д.
Тема оптимизаций очень обширная, и хотя мы ещё, конечно, будем разговаривать про компиляторы, но покрыть всё детально невозможно в таком формате, поэтому если есть заинтересованность, рекомендуем почитать литературу и посмотреть на код LLVM/GCC и других компиляторов (большинство open-source).
в каком месте на данный момент находится передовая мысль разработчиков архитектуры? кто займет вершину надолго в ближайшем будущем ? ренессанс cisc возможен?)
Кто займёт вершину - это вопрос не технический, а скорее экономический и политический. RISC-V может сильно потеснить тот же ARM, но если это случится, то, скорее всего, не потому, что он такой замечательный с архитектурной точки зрения.
Сейчас грань между RISC и CISC довольно сильно размыта. CISC-процессоры внутри имеют RISC-подобные конвейеры, исполняющие микрооперации. RISC-процессоры получают "сложные" инструкции (пример: векторые инструкции в RISC-V), переменную длину команд с особенностями кодирования (примеры из RISC-V: RVC, крипто-расширения) и прочие фичи, которые скорее похожи на CISC. Когда-то память микрокода была важна, и это деление было важным. Сейчас скорее важны кеши, параллелизм уровня инструкций и предсказание переходов.
пока похоже что apple, amd и intel будут делать перескакивать друг через друга снова как в 90-х. и ещё в этот клуб пытается попасть arm, а может будут и другие претенденты
Подкаст не нашёлся через AntennaPod. Его нет на подкаст-платформах?
Наш подкаст Битовые маски уже доступен на большинстве площадок: bitmask.mave.digital/
@@ultimate_engineer Благодарю. Вот теперь он нашёлся через AntennaPod. Подписался, послушаем. Спасибо!
Правда для бэкендеров они слишком много улыбаются, как-то не натурально получается
Дмитрий просто только что после отпуска - зарядил коллег своим отдохнувшим видом :)