systemadmin.es > Programación > Usando el Make en paralelo

Usando el Make en paralelo

Mediante el Make podemos automatizar ciertas tareas, generalmente la compilación de programas. Vamos a ver cómo podemos usar el Make en paralelo para las tareas que se pueda

La sintaxis del Make permite definir muy bien lo que podemos hacer en paralelo y lo que no, una simplificación sería:

objectivo1: prereq1 prereq2 prereq3 prereq4 prereq5
             comandos 

Esto indica que para construir el objetivo1 necesita de los prereq1 al 5, los cuales se definen:

prereq1: fichero.origen
         comando

Por lo tanto, para construir el objetivo1 podemos paralelizar los requisitos previos.

La opción que controla el número de procesos en paralelo que ejecuta es la opción -j.

Una buena regla que podemos aplicar para escoger el número de procesos paralelos a utilizar es usar el número de procesadores:

$ cat /proc/cpuinfo  | grep processor
processor	: 0
processor	: 1
processor	: 2
processor	: 3

Vamos a ver un ejemplo compilando un openldap en el sistema con un socket y 4 cores. Primero vemos con un solo proceso:

$ time make -j 1

(...)

real	2m17.436s
user	1m36.378s
sys	0m23.033s

A continuación probamos con dos procesos:

$ time make -j 2


real	1m5.739s
user	1m36.025s
sys	0m22.177s

A continuación con el mismo número de procesos paralelos que cores tiene la máquina:

$ time make -j 4


real	0m43.115s
user	1m36.026s
sys	0m21.362s

Seguimos subiendo a seis y vemos como el tiempo no se reduce:

$ time make -j 6


real	0m42.542s
user	1m36.353s
sys	0m21.444s

Lo mismo si usamos el doble de procesos que el número de cores:

$ time make -j 8


real	0m39.926s
user	1m36.897s
sys	0m22.107s

Lo mismo vara un número significativamente mayor de procesos:

$ time make -j 24


real	0m40.971s
user	1m37.054s
sys	0m22.598s

Los resultados no sólo dependen del número de procesos, sino también de cómo de paralelizable es el proceso y de las propias tareas pero en general algo ganaremos paralelizando el Make.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>