HeadlinesBriefing favicon HeadlinesBriefing.com

mold: Массивно-параллельный компоновщик

Hacker News •
×

Компоновка — это критический этап в процессе сборки программного обеспечения, который объединяет скомпилированные объектные файлы в единый исполняемый файл или общую библиотеку. Несмотря на десятилетия инженерных усилий, время компоновки остается значительным узким местом в цикле редактирование-компиляция-отладка, особенно для больших программ на C++. Существующие компоновщики используют ограниченный параллелизм, оставляя большинство ядер процессора простаивающими во время компоновки.

Мы представляем mold, компоновщик Unix/Linux, который систематически применяет параллелизм данных по всему конвейеру компоновки. Мы сначала анализируем архитектурные ограничения, которые мешают существующим компоновщикам масштабироваться, включая запутанное разрешение символов и обработку архивов, а затем показываем, как новая конструкция, которая их разъединяет, преодолевает эти ограничения.

На больших реальных программах mold связывает отладочные двоичные файлы размером в несколько гигабайт максимум за несколько секунд, а часто менее чем за секунду. Он в 2,4-16,1 раза быстрее современного компоновщика lld и до 112 раз быстрее традиционного GNU ld. Абляционное исследование показывает, что ни одна отдельная оптимизация не доминирует; ускорение достигается за счет совокупного эффекта распараллеливания всех проходов.

Ключевые сущности: Люди: Rui Ueyama