Команда разработчиков LLVM представила предложение под названием Multi-Thread Parallel Compilation (MTPC) для улучшения ThinLTO. В настоящее время этот метод распараллеливает целые модули, но большие модули обрабатываются последовательно, создавая узкие места. MTPC стремится разрушить этот барьер, разделяя работу на уровне функций.
Как работает внутримодульный параллелизм в ThinLTO 🚀
MTPC вводит возможность разделения большого модуля на более мелкие единицы на основе функций. Каждая функция может быть скомпилирована и оптимизирована в отдельном потоке при условии правильного управления зависимостями данных и глобальными ссылками. Это позволяет многоядерным процессорам работать одновременно внутри одного модуля, сокращая время компиляции в проектах с очень большими исходными файлами.
Драма модулей, которые считали себя неприкосновенными 😅
До сих пор большие модули наслаждались спокойной жизнью: весь код компилировался последовательно, как очередь в супермаркете. С MTPC этим ленивым функциям придется начать работать параллельно, будто начальник сказал им, что кофе закончился. Разработчики смогут попрощаться с перерывами в ожидании завершения компилятора, хотя какой-нибудь модуль наверняка устроит забастовку из-за отсутствия синхронизации.