Primera versión estable del constructor de moldes desarrollado por LLVM lld

Rui Ueyama, autor del enlazador LLVM lld y del compilador chibicc, presentó la primera versión estable del nuevo enlazador Mold de alto rendimiento, que es notablemente más rápido que los enlazadores GNU gold y LLVM lld en la velocidad de vincular archivos de objetos. El proyecto se considera listo para su implementación en producción y puede utilizarse como un reemplazo más rápido y transparente del enlazador GNU en sistemas Linux. Los planes para la próxima versión importante incluyen completar el soporte para la plataforma macOS, después de lo cual se comenzará a trabajar en la adaptación de Mould para Windows.

Mold está escrito en C++ (C++20) y tiene licencia AGPLv3, que es compatible con GPLv3, pero no compatible con GPLv2, ya que requiere cambios abiertos al desarrollar servicios de red. Esta elección se explica por el deseo de obtener financiación para el desarrollo: el autor está dispuesto a vender los derechos del código para obtener una nueva licencia bajo una licencia permisiva, como la del MIT, o proporcionar una licencia comercial separada para aquellos que no estén satisfechos con la AGPL.

Mold admite todas las funciones del vinculador GNU y tiene un rendimiento muy alto: la vinculación se realiza a una velocidad solo la mitad de rápida que simplemente copiar archivos con la utilidad cp. Por ejemplo, al compilar Chrome 96 (tamaño de código 1.89 GB), se necesitan 8 segundos para vincular archivos ejecutables con información de depuración en una computadora de 53 núcleos usando GNU gold, LLVM lld: 11.7 segundos y Mold solo 2.2 segundos (26 veces más rápido que GNU oro). Al vincular Clang 13 (3.18 GB), se necesitan 64 segundos en GNU gold, 5.8 segundos en LLVM lld y 2.9 segundos en Mold. Al compilar Firefox 89 (1.64 GB), se necesitan 32.9 segundos en GNU gold, 6.8 segundos en LLVM lld y 1.4 segundos en Mold.

Primera versión estable del constructor de moldes desarrollado por LLVM lld

Reducir el tiempo de compilación puede mejorar significativamente la conveniencia de desarrollar proyectos grandes al reducir la espera en el proceso de generación de archivos ejecutables al depurar y probar cambios. La motivación para crear Mold fue la frustración de tener que esperar a que se completara el enlace después de cada cambio de código, el bajo rendimiento de los enlazadores existentes en sistemas multinúcleo y el deseo de probar una arquitectura de enlace fundamentalmente diferente sin recurrir a modelos demasiado complicados como como vinculación incremental.

El alto rendimiento al vincular un archivo ejecutable desde una gran cantidad de archivos objeto preparados por el compilador en Mold se logra mediante el uso de algoritmos más rápidos, la paralelización activa de operaciones entre los núcleos de CPU disponibles y el uso de estructuras de datos más eficientes. Por ejemplo, Mold implementa técnicas para realizar cálculos intensivos mientras copia archivos, carga previamente archivos de objetos en la memoria, usa tablas hash rápidas para la resolución de caracteres, escanea tablas de reubicación en un hilo separado y deduplica secciones fusionadas que se repiten en diferentes archivos.

Fuente: opennet.ru

Añadir un comentario