pregunta sobre comandos CLI multinúcleo

pregunta sobre comandos CLI multinúcleo

Tengo una colección de 150 comandos CLI para ejecutar en un archivo, en mi máquina de 12 núcleos. Ejecutar las 150 tareas en segundo plano atasca el sistema y, por experiencia, he descubierto que tener entre 12 y 18 tareas en ejecución es óptimo.

En el pasado, simplemente dividía los 150 comandos en archivos por lotes de 12 o 13 partes, usando el comando dividir, y luego ejecutaba cada uno. Sin embargo, algunos de los archivos por lotes terminaron antes que otros, y finalmente termino con 3 o 4 archivos por lotes que tardan mucho más en finalizar que otros, mientras que los otros 9 u 8 núcleos están inactivos.

Mi objetivo es mantener los 12 núcleos en funcionamiento hasta que se ejecuten los 150 comandos CLI.

¿Es posible hacer que cada procesador tome una tarea de la lista de 150 comandos de la CLI, marque ese comando como en ejecución y deje que los otros 11 procesadores tomen su propio elemento, hasta que los 150 estén terminados, sin que los procesadores se tropiecen entre sí y se agarren? ¿El mismo comando CLI? Las escrituras de archivos deben ser únicas.

¿Hay alguna manera fácil de hacer esto?

Respuesta1

Usando GNU Parallel se ve así:

cat 150commands.txt | parallel

Ejecutará un trabajo por núcleo.

GNU Parallel es un paralelizador general y facilita la ejecución de trabajos en paralelo en la misma máquina o en varias máquinas a las que tiene acceso ssh. A menudo puede reemplazar un forbucle.

Si tiene 32 trabajos diferentes que desea ejecutar en 4 CPU, una forma sencilla de paralelizar es ejecutar 8 trabajos en cada CPU:

Programación sencilla

En cambio, GNU Parallel genera un nuevo proceso cuando uno finaliza, manteniendo las CPU activas y, por lo tanto, ahorrando tiempo:

Programación paralela GNU

Instalación

Si GNU Parallel no está empaquetado para su distribución, puede realizar una instalación personal, que no requiere acceso de root. Se puede hacer en 10 segundos haciendo esto:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para otras opciones de instalación consultehttp://git.savannah.gnu.org/cgit/parallel.git/tree/README

Aprende más

Ver más ejemplos:http://www.gnu.org/software/parallel/man.html

Mira los vídeos de introducción:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Sigue el tutorial:http://www.gnu.org/software/parallel/parallel_tutorial.html

Regístrese en la lista de correo electrónico para obtener ayuda:https://lists.gnu.org/mailman/listinfo/parallel

información relacionada