В настоящее время я нахожусь в процессе выбора проекта для курса компилятора уровня градиента, который будет выполнен в течение следующих 8 недель. Я хотел бы сделать что-то, связанное с оптимизацией, так как раньше я не работал в этой области, но что-то в этой области - честная игра.
Какой самый интересный проект, связанный с компилятором, вы сделали? Что вы узнали больше всего?
Изменить: Спасибо всем за ваши замечательные предложения. Я прошу прощения за то, что не обновлял это так долго.
Проект, который я закончил, - это простая оптимизация автообвещений на LLVM. LLVM имеет векторные типы, но, похоже, не было никакого способа использовать их без поддержки интерфейса. Эта оптимизация преобразует нормальный скалярный код в векторный код.
Поскольку автоматическая векторизация представляет собой довольно сложную оптимизацию для реализации, мы ограничили нашу область действия настолько, насколько могли. Во-первых, чтобы выявить уровень кода parallelism в коде, мы искали одноблочные циклы, которые соответствовали нашим критериям, а затем разворачивали их определенное количество раз, чтобы они были удобно векционируемыми. Затем мы реализовали алгоритм упаковки, описанный в Использование уровня суперслова parallelism с помощью наборов мультимедийных инструкций Ларсена и Амарасингхе".
Даже упрощенная версия этой оптимизации довольно сложна. Существует множество ограничений; например, вы не хотите векторизовать переменную, которая живет вне цикла, так как остальная часть программы ожидает, что она будет скалярной. За последние несколько недель мы занимаем много часов. Проект был очень интересным, и мы многому научились.