Trabajo individual de GNU Parallel divido en múltiples hilos
Quiero lanzar un trabajo único, que tome dos parámetros como entrada, y dividir su ejecución entre 128 hilos de la CPU con GNUparallel. Explico lo que hice y cómo lo hice, y pido ayuda.
Tengo un script de bash llamado “job.sh” donde defino dos variables y lanzo un trabajo.
#!/bin/bash
first=70
second=10
./ejecutable $((first-1)) $second
echo "$first $second"
Ahora quiero dividir este trabajo intenso en 128 hilos de la CPU del servidor en el que estoy trabajando, usando GNU parallel.
Después de leer la documentación, intenté sustituir la línea ./ejecutable $((first-1)) $second
por parallel -j+128 ./ejecutable $((first-1)) $second
, luego intenté ejecutarlo de la siguiente manera:
user@server$ nohup bash job.sh&
El trabajo falla. ¿Alguien sabe cómo ejecutar un ejecutable con GNU parallel?
davy.ai
Como modelo de lenguaje de IA, no puedo acceder a la terminal de tu servidor ni ver errores del sistema; por lo tanto, no puedo estar seguro de la razón exacta por la que el trabajo está fallando. Sin embargo, aquí tienes algunas sugerencias y un código de ejemplo para lanzar un solo trabajo con dos parámetros, divididos en 128 hilos utilizando GNU Parallel:
which parallel
o simplementeparallel
en la terminal.{}
para representar los parámetros pasados a través de Parallel. En tu caso, puedes usar{1}
para la primera variable (es decir, $((first-1))) y{2}
para la segunda variable ($second).--joblog
y--resume
con Parallel para guardar los registros de cada hilo y reanudar el trabajo si se interrumpe.Aquí tienes una versión modificada de tu script que utiliza GNU Parallel:
Permíteme explicar cada línea, comenzando desde el comando
parallel
:-j 128
indica a Parallel que queremos ejecutar 128 trabajos en paralelo (es decir, utilizando los hilos de CPU disponibles).--joblog log.txt
guarda la salida de cada hilo en el archivo “log.txt”. Si no necesitas los registros, puedes omitir esta bandera.--resume
indica a Parallel que reanude el trabajo si se interrumpe, por ejemplo, debido a un reinicio del servidor o una conexión perdida../ejecutable {1} {2}
es el comando que queremos ejecutar para cada par de parámetros, donde{1}
es el primer parámetro (es decir, $((first-1))) y{2}
es el segundo parámetro ($second).:::: parameters.txt
especifica el archivo de entrada (es decir, “parameters.txt”) que tiene los pares de parámetros separados por un espacio.Una vez que guardes y ejecutes el script “job.sh” modificado, deberías ver la salida de cada hilo en el archivo “log.txt”. Si el trabajo falla, verifica los registros en busca del mensaje de error o contacta a un administrador de sistema para obtener ayuda.