Slurm deja de procesar #SBATCH
directivas en la primera línea de código ejecutable en un script. Para usuarios cuyo #SBATCH
las directivas no dependen del código que intentan ejecutar por encima de esas directivas, solo coloque el #SBATCH
líneas en la parte superior.
Consulte la otra respuesta para obtener una solución alternativa si, al igual que con OP, sus opciones de muestra dependen de los comandos que ha colocado sobre ellas.
El script por lotes puede contener opciones precedidas por "#SBATCH" antes de cualquier comando ejecutable en el script . sbatch dejará de procesar más directivas #SBATCH una vez que se haya llegado a la primera línea que no sea un comentario que no sea un espacio en blanco en el script.
De los documentos de muestra, mi énfasis.
Esto no funcionará. Qué sucede cuando ejecutas
sbatch myscript.sh
es que slurm analiza el script para esas líneas especiales #SBATCH, genera un registro de trabajo, almacena el script por lotes en alguna parte. El script por lotes se ejecuta solo más tarde cuando se ejecuta el trabajo.
Por lo tanto, debe estructurar su flujo de trabajo de una manera ligeramente diferente y primero calcular la cantidad de procesos que necesita antes de enviar el trabajo. Tenga en cuenta que puede usar algo como
sbatch -n $numProcs myscript.sh
, no necesita generar automáticamente el script (también, mpirun debería poder obtener la cantidad de procesos en su asignación automáticamente, no es necesario usar "-np").