¿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
Respuesta
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.
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
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
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
GNU make (la marca estándar instalado en los sistemas Linux) permite la ejecución de comandos en paralelo - echar un vistazo a http://www.gnu.org/software/make/manual/make.html#Parallel
- 1. Sistema distribuido Java
- 2. Sistema de archivos distribuido para .NET
- 3. Marco de Java para el sistema distribuido
- 4. ¿Sistema de control de versión distribuido e integrable en Java?
- 5. Marcos de prueba de integración para probar un sistema distribuido?
- 6. Crear errores de red para probar un sistema distribuido
- 7. Necesito un sistema de búsqueda de valor-clave distribuido
- 8. Los lenguajes de programación para el sistema distribuido
- 9. numpy en hardware multinúcleo
- 10. Escalar aplicaciones multiproceso en máquinas multinúcleo
- 11. ¿Cómo aprovechar las CPU multinúcleo al compilar proyectos C# en una solución grande?
- 12. Programas para compilar HTML a partir de una plantilla
- 13. Almacenamiento en caché distribuido
- 14. Programación multinúcleo en Haskell - Control.Parallel
- 15. Registro distribuido con canal
- 16. Force gcc para compilar programas de 32 bits en la plataforma de 64 bits
- 17. CPU de ensamblaje y multinúcleo
- 18. Python distribuido
- 19. ¿Cómo ejecutar programas en una consola externa con Sublime Text en el sistema de Windows?
- 20. apunta a una clase en el boost distribuido dinámicamente multi_array, sin compilar
- 21. Sistema para organizar programas de Ruby de varios archivos?
- 22. multinúcleo con plyr, MC
- 23. Python: ¿Procesamiento multinúcleo?
- 24. ¿Cronómetro cronómetro .Net y multinúcleo?
- 25. ¿Cómo funciona Photoshop (o programas de dibujo)?
- 26. Secciones críticas con procesadores multinúcleo
- 27. x86 Pregunta LOCK en CPU multinúcleo
- 28. Programación multinúcleo: las partes duras
- 29. ¿Dónde almacenar eventos en un sistema distribuido que utiliza el abastecimiento de eventos?
- 30. ¿Cuáles son los mejores documentos para aprender sobre algoritmos para comunicar actualizaciones en un sistema distribuido?
relacionados: http: // stackoverflow. com/questions/414714/compiling-with-g-using-multiple-cores – miku