- вариацию на тему LoopUnroll с рядом ограничений, но генерирующую код, более удобный для планировщика инструкций.
С Петром обсуждали пример из доклада, где unrolling даёт ускорение. Пример сам по себе - кусок прохода компилятора, где перед компилятором встаёт задача - какие из конверсий применить. Каждая из конверсий привносит своё ускорение в кол-ве сохранённых тактов (вес), но есть такие конверсии, которые нельзя применить одновременно (например, где участвует одна и та же инструкция). Задача тривиально сводится к MWVCP - NP-полной задаче. Далее для маленьких размеров её решаем перебором, для больших - эвристиками.
Пример, как инженерная задача, имхо, интересный, хоть и заурядный. Кому из коллег рассказывал, тоже таковым его находили (кроме ревьюверов). На С++ Russia доклад про него железно забревается вопросом "и что же полезного слушатели должны из этого вынести?"
А я уверен, что по теме можно было бы сделать интересный доклад. Максимум пользы был бы получен, если бы изложение шло от общего к частному. Сначала можно рассмотреть известную задачу выбора порядка фаз (phase ordering problem) и подходы к ее решению. Затем перейти уже к Вашему собственному решению. Кстати, беглый поиск по google scholar показывает, что таким образом эта задача ранее не решалась. Возможно, это был бы доклад не для C++ Russia, а для компиляторных митапов, которые недавно образовались, но, в любом случае, у Вас, уверен, получилось бы интересно все это рассказать! :)
Пëтр, спасибо! Наверное, для митапа по компиляторам - да, подойдëт, там требования на доклад другие.
Обсуждают сегодня