Size: a a a

Compiler Development

2020 June 05

MO

Mar Ort in Compiler Development
Peter Sovietov
Кстати, Вы здесь конкретные работы какие-то подразумевали? Просто я очень интересуюсь этой темой и опасаюсь что-то важное пропустить :)
Конкретных работ не вспомню к сожалению, но, насколько мне известно, в компиляторе МЦСТ что-то подобное используется. Думаю @alexanius что-то точно знает 🙂
источник

MO

Mar Ort in Compiler Development
У них конечно не OoO, но идеи могут быть близки
источник

AT

Alexander Tchitchigi... in Compiler Development
Peter Sovietov
Это уже, наверное, к вопросу мотивации. Дело не в PhD, как в самоцели. Самоучка из-за своей неутолимой тяги к знаниям превращается в оригинального исследователя, к которому на поклон идут обладатели формальной степени. В истории CS было достаточно примеров :)
Другое дело, что есть и упрямые личности, которые не хотят иметь ничего общего с "академией", не хотят "лишних знаний" и всеми силами отстаивают свой метод "от сохи".
Так что, видимо, вопрос нужно ставить иначе. Имеет ли смысл серьезному компиляторщику выступать, писать статьи в академические журналы.
Кажется, вопрос про статьи и журналы — уже оффтоп, но всё же отмечу, что написание и публикация оных (в академических журналах и конференциях) — отдельное специфическое умение. Поэтому, если оно не было развито в процессе получения PhD, то действительно может быть лучше не тратить на это силы и нервы.
источник

PS

Peter Sovietov in Compiler Development
Mar Ort
У них конечно не OoO, но идеи могут быть близки
А меня как раз не OoO интересует. Спасибо!
источник

MO

Mar Ort in Compiler Development
Есть еще МЦСТ сайт, где ребята выкладывают свои статьи, ссылку потерял, но назывался что-то вроде compiler-dev.ru
источник

MO

Mar Ort in Compiler Development
Peter Sovietov
А меня как раз не OoO интересует. Спасибо!
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Кажется, вопрос про статьи и журналы — уже оффтоп, но всё же отмечу, что написание и публикация оных (в академических журналах и конференциях) — отдельное специфическое умение. Поэтому, если оно не было развито в процессе получения PhD, то действительно может быть лучше не тратить на это силы и нервы.
Пока мы обсуждаем это в контексте компиляторов — почему бы не продолжать? Это в каком-нибудь web frontend не нужно, наверное, знакомиться с академическими работами в области. А вот даже у самых-самых практико-ориентированных компиляторщиков обязательно найдется несколько важных статьей, из которых было ими многое почерпнуто. И в какой-то момент совершенно естественно будет уже не только получать, но и что-то отдать :)
источник

PS

Peter Sovietov in Compiler Development
Да, я с этой работой знаком, спасибо!
источник

A

Alex in Compiler Development
Ну я изначально не стал отвечать, т.к. вопрос был про что-то x86 подобное, где физические регистры скрыты от программиста, но если уж тегнули )

В Эльбрусах обращение в регистрам явное и переименование регистров происходит явным образом. При этом алгоритм планирования/распределения довольно сложный и размазан на большое количество оптимизационных фаз. Я не вдавался в подробности планирования, но если есть конкретный вопрос, то постараюсь ответить.

Можно, например почитать диссертацию Дмитрия Иванова (его статью уже привели) по планированию http://www.mcst.ru/doc/ivanov_121009.pdf
источник

AT

Alexander Tchitchigi... in Compiler Development
Peter Sovietov
Пока мы обсуждаем это в контексте компиляторов — почему бы не продолжать? Это в каком-нибудь web frontend не нужно, наверное, знакомиться с академическими работами в области. А вот даже у самых-самых практико-ориентированных компиляторщиков обязательно найдется несколько важных статьей, из которых было ими многое почерпнуто. И в какой-то момент совершенно естественно будет уже не только получать, но и что-то отдать :)
С этим-то я полностью согласен, но оно никак не противоречит моему тезису. Т.е. я вполне понимаю людей, которые много чего знают и умеют, но совершенно не хотят писать и публиковать статьи, поскольку профильная академическая тусовка — обособленный мирок со своими устоями, куда может быть очень трудно "влезть с улицы".
источник

PS

Peter Sovietov in Compiler Development
Alex
Ну я изначально не стал отвечать, т.к. вопрос был про что-то x86 подобное, где физические регистры скрыты от программиста, но если уж тегнули )

В Эльбрусах обращение в регистрам явное и переименование регистров происходит явным образом. При этом алгоритм планирования/распределения довольно сложный и размазан на большое количество оптимизационных фаз. Я не вдавался в подробности планирования, но если есть конкретный вопрос, то постараюсь ответить.

Можно, например почитать диссертацию Дмитрия Иванова (его статью уже привели) по планированию http://www.mcst.ru/doc/ivanov_121009.pdf
Насколько я понял, там используется пошаговый эвристический подход, что и позволило его совместить со списковым планировщиком. Я прав?
источник

A

Alex in Compiler Development
Peter Sovietov
Насколько я понял, там используется пошаговый эвристический подход, что и позволило его совместить со списковым планировщиком. Я прав?
*уточнение: планированием занимается другой человек, а я в потроха не смотрел*

на сколько я понимаю, там используется списковое планирование. Эвристиками в компиляторе утыкано абсолютно всё, планирование в том числе. Касательно пошаговости я не готов это утверждать потому что у нас есть несколько планирований: для конвейеризованных циклов с вращающимися регистрами и для обычного кода
источник

МБ

Михаил Бахтерев... in Compiler Development
Vladimir Kazanov
Одного не понимаю: как он все это успевает в одиночку-то
Так очевидно. Он на Guile пишет, в котором, повторюсь, отличная библиотека, которая помогает очень быстро кодить.
источник

PS

Peter Sovietov in Compiler Development
Alex
*уточнение: планированием занимается другой человек, а я в потроха не смотрел*

на сколько я понимаю, там используется списковое планирование. Эвристиками в компиляторе утыкано абсолютно всё, планирование в том числе. Касательно пошаговости я не готов это утверждать потому что у нас есть несколько планирований: для конвейеризованных циклов с вращающимися регистрами и для обычного кода
Спасибо! Собственно, сам списковый планировщик работает по шагам, последовательно. И можно рассматривать его работу как своего рода символическое исполнение команд машиной. И в процессе этого исполнения можно эвристически распределять регистры. То есть делать примерно то же, что делает OoO-процессор с алгоритмом Tomasulo, но — в compile-time. Я, конечно, здесь все упрощаю сильно :)
источник

МБ

Михаил Бахтерев... in Compiler Development
Peter Sovietov
Присоединюсь к мнению по поводу планировщика. В целом, OoO предполагает динамическое планирование и от компилятора, по большому счету, требуется исполнить принцип "не навреди". Полезно спланировать последовательность команд _совместно_ с распределением регистров. Но это делают, в основном, только очень специальные компиляторы :)
Portland Group и Intel это делают для некоторых моделей процессоров.
источник

A

Alex in Compiler Development
Peter Sovietov
Спасибо! Собственно, сам списковый планировщик работает по шагам, последовательно. И можно рассматривать его работу как своего рода символическое исполнение команд машиной. И в процессе этого исполнения можно эвристически распределять регистры. То есть делать примерно то же, что делает OoO-процессор с алгоритмом Tomasulo, но — в compile-time. Я, конечно, здесь все упрощаю сильно :)
да, я что-то про пошаговость другую подумал изначально. У нас при раскрутке циклов создаётся несколько копий для разных факторов, а потом через несколько фаз выбирается оптимальная. Я что-то это на шаги планирования перенёс и засомневался
источник

MO

Mar Ort in Compiler Development
Peter Sovietov
Спасибо! Собственно, сам списковый планировщик работает по шагам, последовательно. И можно рассматривать его работу как своего рода символическое исполнение команд машиной. И в процессе этого исполнения можно эвристически распределять регистры. То есть делать примерно то же, что делает OoO-процессор с алгоритмом Tomasulo, но — в compile-time. Я, конечно, здесь все упрощаю сильно :)
В jvm одно время были идеи примерно такое же планировали делать, сэмулировать Tomasulo в compile-time 🙂
источник

PS

Peter Sovietov in Compiler Development
Mar Ort
В jvm одно время были идеи примерно такое же планировали делать, сэмулировать Tomasulo в compile-time 🙂
Фактически, перевод в SSA-форму для линейного участка — это и есть большая часть алгоритма Tomasulo :)
источник

PS

Peter Sovietov in Compiler Development
Alex
да, я что-то про пошаговость другую подумал изначально. У нас при раскрутке циклов создаётся несколько копий для разных факторов, а потом через несколько фаз выбирается оптимальная. Я что-то это на шаги планирования перенёс и засомневался
Это похоже на алгоритм программной конвейеризации :)
источник

A

Alex in Compiler Development
Да, она тоже копии циклов создаёт. Больше копий циклов богу копий циклов
источник