online mac compiler compile c++ compiler-construction makefile g++ multicore

c++ - mac - g++ ubuntu



Compilando con g++ usando múltiples núcleos (6)

La gente ha mencionado make pero bjam también apoya un concepto similar. El uso de bjam -jx instruye a bjam para construir hasta x comandos simultáneos.

Usamos los mismos scripts de compilación en Windows y Linux y el uso de esta opción reduce a la mitad nuestros tiempos de compilación en ambas plataformas. Bonito.

Pregunta rápida: ¿cuál es la bandera del compilador para permitir que g ++ engendre varias instancias de sí mismo para compilar proyectos grandes más rápido (por ejemplo, 4 archivos fuente a la vez para una CPU multi-core)?

Muchas gracias.


No estoy seguro acerca de g ++, pero si está usando GNU Make, entonces "make -j N" (donde N es la cantidad de hilos que make puede crear) permitirá a make ejecutar múltiples trabajos de g ++ al mismo tiempo (tan largo ya que los archivos no dependen el uno del otro).


No existe tal indicador, y tener uno va en contra de la filosofía de Unix de hacer que cada herramienta realice solo una función y la desempeñe bien. Los procesos del compilador de desove son conceptualmente el trabajo del sistema de compilación. Lo que probablemente esté buscando es la bandera -j (jobs) para GNU make, a la

make -j4

O puede usar pmake o sistemas similares de fabricación en paralelo.


Puedes hacer esto con make - con gnu make es el indicador -j (esto también ayudará en una máquina uniprocesador).

Por ejemplo, si desea hacer 4 trabajos paralelos:

make -j 4

También puede ejecutar gcc en una tubería con

gcc -pipe

Esto canalizará las etapas de compilación, lo que también ayudará a mantener los núcleos ocupados.

Si tiene máquinas adicionales disponibles también, puede consultar distcc , que también compilará las compilaciones.


distcc también se puede usar para distribuir compilaciones no solo en la máquina actual, sino también en otras máquinas en una granja que tiene distcc instalado.


make hará esto por ti. Investigue los modificadores -j y -l en la página man. No creo que g++ sea ​​paralelizable.