-
Notifications
You must be signed in to change notification settings - Fork 1
Subcomandos
Un subcomando es un añadido de código al final del ya existente en la herramienta. Los subcomandos se componen de dos secciones, se mostrará una implementación del subcomando mpi
como ejemplo ilustrativo.
Las secciones siempre han de empezar por la siguiente línea:
#!/seccion/subcomando
Durante las secciones siempre se cumplirá y ha de mantener lo siguiente:
- Directorio de trabajo actual: raíz del proyecto
- Argumentos del ejecutable: pasados por el usuario
- Comandos de información:
info
yerr
(termina la ejecución) - Variable
TMP
: directorio temporal de ejecución
Primero se define la ayuda del usuario en caso de sintaxis incorrecta. Cada una de las líneas en este bloque siempre han de comenzar por una almohadilla seguida de un espacio. La primera es la sintaxis esperada y las siguientes, indentadas con un tabulador, son las especificaciones de los argumentos; estas últimas suelen ser el nombre, un ejemplo y su descripción separados por tabuladores.
Después se define el código para verificar esta sintaxis. La primera línea es la verificación del número de argumentos; si no se cumple, se debe ejecutar el comando man
para mostrar el bloque anterior. Las siguientes líneas verifican cada argumento; si no se cumple alguno, se debe ejecutar el comando err
dando una explicación.
#!/usr/mpi
# main nodes [args...]
# main main.c (main file's relative path)
# nodes 16 (number of nodes to utilise)
# args ... (program arguments)
[ $# -ge 4 ] || man
[ -f "$3" ] || err 'main file not found'
[[ "$4" =~ ^[0-9]+$ ]] || err 'nodes must be positive integer'
Primero se definen los ajustes PBS de la tarea. Cada una de las líneas en este bloque siempre ha de comenzar por una almohadilla seguida de PBS
y un espacio. Los ajustes son evaluados por un interprete, así que permiten substituciones de variables, a diferencia de qsub
que los interpreta literalmente.
Después se define el código a ejecutar durante la tarea.
#!/job/mpi
#PBS -q bi -l nodes=$4:ppn=4
EXE="$TMP/exe"; NODE="$TMP/node"
uniq "$PBS_NODEFILE" >"$NODE"; mpicc "$3" -o "$EXE"
mpirun -np "$4" -machinefile "$NODE" "$EXE" "${@:5}"