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.
Relacionados
Imprimir
Deja un comentario: