¿Puede gcc usar múltiples núcleos al enlazar?
linker (3)
La opción -j
te refieres es manejada por make
not gcc
.
El uso de make -jn
pregunta por make
para ejecutar las acciones en el Makefile
con múltiples procesos paralelos (Reemplace n
con un número. En el caso de make -j 2
es el proceso 2
).
Make manejará bien la mayoría de las tareas de sincronización al hacer construcciones paralelas.
Entonces, al compilar toneladas de archivos fuente con GCC, se puede usar -j para usar todos los núcleos disponibles. Pero ¿qué pasa con el enlazador? ¿Existe una opción similar para acelerar la vinculación o GCC no admite subprocesos múltiples? En algunos proyectos más grandes realmente puede tomar un tiempo ... (¡y odio esperar!)
Edit: Gracias por señalar que -j es una opción para make y no gcc / g ++. ¡Pero esto no responde a mi pregunta! ¡Me gustaría saber si gcc puede usar subprocesos múltiples al vincular un programa!
Try gold , que fue desarrollado por Ian Lance Taylor et al. de Google y lanzado como parte del paquete binutils de GNU.
De Wikipedia:
La motivación para escribir oro fue hacer un enlazador que sea más rápido que el enlazador GNU, especialmente para aplicaciones grandes codificadas en C ++.
Debo admitir que todavía no lo he probado, pero se menciona en la página web del proyecto WebKitGTK .
Para obtener más información, consulte un artículo escrito por el autor de gold: A New ELF Linker .
Más importante aún, vea el trabajo sobre el enlace incremental / paralelo / concurrente de Sander Mathijs van Veen titulado Enlace simultáneo con el enlazador de oro GNU y la bibliografía que contiene.
lld , el enlazador desarrollado por el proyecto LLVM, usará múltiples núcleos por defecto. También he encontrado que es aproximadamente 2 -Wl,--threads -Wl,--thread-count,xxx
más rápido que el oro que se ejecuta con varios subprocesos ( -Wl,--threads -Wl,--thread-count,xxx
)