Прво стабилно издание на Mould builder развиен од LLVM lld

Руи Уејама, автор на поврзувачот LLVM lld и компајлерот chibicc, го претстави првото стабилно издание на новиот поврзувач на Mold со високи перформанси, кој е забележливо пред поврзувачите на GNU gold и LLVM lld во однос на брзината на поврзување на објектните датотеки. Проектот се смета за подготвен за распоредување на производството и може да се користи како побрза транспарентна замена за GNU поврзувачот на Linux системите. Плановите за следното големо издание вклучуваат подготвеност за поддршка за macOS платформата, по што ќе започне работата на прилагодување на Mold за Windows.

Калапот е напишан во C++ (C++20) и се дистрибуира под лиценцата AGPLv3, која е во согласност со GPLv3, но не е во согласност со GPLv2, бидејќи бара да се отворат промени кога се развиваат мрежни услуги. Овој избор се должи на желбата да се добие финансирање за развој - авторот е подготвен да ги продаде правата на кодот за релиценцирање под дозволена лиценца, како што е MIT, или да обезбеди посебна комерцијална лиценца за оние кои не се задоволни со AGPL.

Mold ги поддржува сите карактеристики на поврзувачот на GNU и е многу брз, поврзувајќи се со само половина од брзината од едноставното копирање датотеки со cp. На пример, кога се гради Chrome 96 (големина на кодот 1.89 GB), потребни се 8 секунди за да се изградат извршни датотеки за дебагинфо c на 53-јадрен компјутер користејќи GNU gold, 11.7 секунди за LLVM lld и само 2.2 секунди за Mold (26 пати побрзо од GNU злато). При поврзување на Clang 13 (3.18 GB), на GNU gold му се потребни 64 секунди, на LLVM lld 5.8 секунди, а на Mold 2.9 секунди. При поврзување на Firefox 89 (1.64 GB), GNU gold трае 32.9 секунди, LLVM lld трае 6.8 секунди, а Mold трае 1.4 секунди.

Прво стабилно издание на Mould builder развиен од LLVM lld

Намалувањето на времето за поврзување може значително да ја подобри употребливоста на развојот на големи проекти со намалување на чекањето во процесот на генерирање на извршни датотеки за време на дебагирање и тестирање промени. Молд беше мотивиран од досадноста што мораше да чека да заврши поврзувањето по секоја промена на кодот, како и лошите перформанси на постоечките поврзувачи на повеќејадрените системи и желбата да се проба фундаментално различна архитектура за поврзување без непотребно прибегнување кон комплицирани модели, како што се инкрементално поврзување.

Високите перформанси за поврзување на извршна датотека од голем број објектни датотеки подготвени од компајлерот во Mold се постигнуваат со користење на побрзи алгоритми, активно паралелизирање на операциите помеѓу достапните јадра на процесорот и користење на поефикасни структури на податоци. На пример, Mold ја имплементира техниката на извршување интензивни пресметки истовремено со копирање датотеки, претходно преземање датотеки со објекти во меморијата, користење на брзи табели за хаш при разрешување знаци, скенирање на табели за преместување во посебна нишка и дедупликација на споени делови кои се повторуваат во различни датотеки.

Извор: opennet.ru

Додадете коментар