2009-12-27 18 views
16

¿Hay algún software disponible en Linux que compila un código fuente que contiene una gran cantidad de archivos de forma paralela en sistemas multinúcleo o distribuidos? Las bibliotecas como gcc o xserver tardan mucho tiempo en compilarse en la máquina unicore/dual y la mayoría de las veces es frustrante cuando se necesita mucha recopilación. ¿Hay alguna técnica para compilar dicho código fuente de forma paralela?Compilar programas en sistema multinúcleo o distribuido

+0

relacionados: http: // stackoverflow. com/questions/414714/compiling-with-g-using-multiple-cores – miku

Respuesta

27

En los sistemas de memoria distribuida, puede usar distcc para distribuir los trabajos de compilación a otras máquinas. Esto requiere un poco de configuración, pero realmente puede acelerar tu construcción si tienes algunas máquinas adicionales.

En los sistemas multinúcleo de memoria compartida, puede simplemente usar make -j, que intentará crear trabajos de creación basados ​​en las dependencias en sus archivos make. Puede ejecutar la siguiente manera:

$ make -j 

que impondrá ningún límite en el número de puestos de trabajo dio lugar, o puede ejecutar con un parámetro entero:

$ make -j8 

lo que limitará el número de trabajos de construcción concurrentes . Aquí, el límite es de 8 trabajos simultáneos. Por lo general, desea que esto sea algo cercano a la cantidad de núcleos en su sistema.

+1

AFAIK hay dos escuelas en la "cantidad de trabajos". Uno es n + 1 y el otro 2n, donde n es el número de núcleos. La razón de ambos es que siempre hay un hilo esperando una vez que se completa ... Personalmente, no he visto una diferencia real si puse -j5 o -j8 en un quadcore – Kimvais

+0

Tampoco he visto mucho beneficio de ninguno de los dos +1 o 2n en multinúcleos, pero tampoco he visto una gran disminución en el rendimiento de esos. Sospecho que no obtienes todo el beneficio que podrías de esas opciones que b/c make no establece afinidad para los núcleos o los sockets, pero realmente no lo he probado (ni siquiera he comprobado si hago establece la afinidad, pero apuesto a que no). – tgamblin

+1

La construcción a menudo está vinculada a IO. Muchos archivos pequeños para trabajar significan mover una gran cantidad de datos hacia y desde el disco ... Además, los tenedores son económicos en Linux, pero * ellos * cuestan algo, lo que contribuye a que no se escale. Finalmente, las prácticas recursivas y otras malas prácticas de mapeo pueden robar * mucho *. – dmckee

4

ccache se puede utilizar también para acelerar el proceso de compilación

+0

ccache solo se beneficia realmente cuando a menudo necesita reconstruir artefactos idénticos, y si necesita hacer eso, su sistema de compilación es defectuoso para empezar. – JesperE

Cuestiones relacionadas