Skip to content

Subcomandos

Miguel Ángel Prosper edited this page Jun 12, 2024 · 6 revisions

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 y err (termina la ejecución)
  • Variable TMP: directorio temporal de ejecución

Especificación

usr: Verificació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'

job: Tarea PBS

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}"
Clone this wiki locally