>> Volver á páxina principal do clúster
Preparación do traballo para o seu envío ao xestor de colas
Compilación
Compilación C/C++/Fortran
A colección de compiladores GNU (GNU Compiler Collection, GCC) é accesible no clúster a través dos seus comandos e opcións habituais. Por defecto, os compiladores instalados no sistema pertencen á versión 4.9.2 de GCC (versión por defecto do SO).1)
ct$ module load gcc
ct$ gcc -O exemplo.c -o exemplo
ct$ g++ -O exemplo.cpp -o exemplo
ct$ gfortran -O exemplo.f -o exemplo
As opcións recomendadas son:
-O
Xera código optimizado para obter un maior rendemento. É equivalente a -O1
. Alternativamente, pódense utilizar as opcións -O0
, -O2
ou -O3
. O número indica o nivel de optimización, sendo 0 o nivel sen ningún tipo de optimización e 3 o nivel co que se obtén un maior rendemento (a opción -O3
realiza algunhas optimizacións agresivas que poden xerar resultados imprecisos).
-o <name>
Establece o nome do ficheiro executable.
Compilación OpenMP
A colección de compiladores GCC permite a compilación de código OpenMP, indicándoo mediante a opción -fopenmp
.
ct$ gcc -O -fopenmp exemplo.c
ct$ g++ -O -fopenmp exemplo.cpp
ct$ gfortran -O -fopenmp exemplo.f
Compilación MPI
Para compilar código MPI é preciso cargar un módulo MPI (como, por exemplo, o módulo openmpi
), que proporcione os scripts de compilación de código MPI (mpicc
, mpicxx
, mpif77
). Estes scripts fan chamadas ao compilador da linguaxe correspondente.
ct$ module load openmpi
ct$ mpicc -O exemplo.c
ct$ mpicxx -O exemplo.cpp
ct$ mpif77 -O exemplo.f
Xestión do contorno
Xestión de software con modules
O comando modules
permite xestionar, de maneira eficaz e consistente, múltiples versións de librarías e sofware para que o usuario empregue a versión axeitada en función dos seus requirimentos. O seu funcionamento baséase no encapsulamento, dentro dun módulo, das variables de contorna relacionadas cunha versión de software determinada. Deste xeito, é o propio usuario quen xestiona a utilización das diferentes versións de software dispoñibles no sistema.
A xestión, a nivel de usuario, dos módulos realízase co comando modules
:
ct$ module avail
ct$ module list
ct$ module load module_name
ct$ module unload module_name
ct$ module purge
As opcións son:
avail
Amosa todos os módulos dispoñibles no sistema.
list
Amosa todos os módulos que están a ser empregados na sesión actual.
load
Activa o módulo module_name
unload
Desactiva o módulo module_name
purge
Desactiva todos os módulos da sesión actual.
O comando modules
manipula as variables de contorna relacionadas cos path do sistema (PATH
, LD_LIBRARY_PATH
, etc.), polo que se recomenda aos usuarios non modificar estas variables de xeito arbitrario.
Recoméndase utilizar este comando de maneira interactiva. O seu uso dentro de .bashrc
para cargar automaticamente módulos habituais non está recomendado, xa que todos os scripts que se executen len este ficheiro.
Recoméndase empregar as versións por defecto dos diferentes módulos. En calquera caso, o comando module avail
proporciona unha listaxe completa de todos os módulos e versións dispoñibles.
Variables de contorna durante a execución
Por defecto, a contorna de execución do sistema Torque/PBS define algunhas variables de contorna que poden ser utilizadas dentro dos scripts (listaxe completa no MAN de qsub
):
PBS_O_WORKDIR
: contén o path do directorio de traballo ($PWD
) dende onde se executou o comando qsub
. É útil para establecer un directorio de referencia durante a execución dos traballos indicados.
PBS_ARRAYID
: contén o índice do array correspondente cando o traballo se lanza coa opción -t.
PBS_JOBID
: o job_id asignado ao traballo.
PBS_JOBNAME
: o nome asignado polo usuario ao traballo.
Ademais calquera variable exportada desde o script de lanzamento do traballo estará dispoñible na contorna de execución.
Escribir o script
O envío de traballos realízase a través dun comando cuxo argumento obrigatorio é o nome dun script de shell. O script ten que dispor de permisos de execución.
ct$ chmod u+x script.sh
Dentro do script, o usuario debe indicar as accións que se realizarán nos nodos, unha vez que os recursos requiridos estean dispoñibles. Exemplos de scripts contén diferentes exemplos relacionados cos módulos instalados no clúster).
O script ten basicamente tres elementos:
A definición do intérprete a usar, por defecto #!/bin/bash
Unha serie de comentarios de BASH que comezan por #PBS
de modo que actúan como instrucións para o xestor de colas.
Comandos de BASH que definen o traballo a executar.
Exemplo simple de script:
#!/bin/bash
#PBS -l nodes=1:ppn=1,walltime=1:00:00
cd /path/to/job/
./executable
Parámetros PBS
Básicos
-N
Indica o nome de referencia do noso traballo no sistema de colas. Por defecto sería o nome do executable.
Ex: #PBS -N myjob
-l
Indica os recursos que se solicitan para a execución do noso traballo, como o número de núcleos computacionais e o tempo de execución. Os diferentes tipos de recursos sepáranse por comas.
Ex: #PBS -l nodes=1:ppn=1,walltime=1:00:00
* -e
Indica o ficheiro no que se redireccionará a saída estándar de erro do noso executable. Por defecto, a saída estándar de erro redirecciónase a un ficheiro con extensión .eXXX
(onde XXX
representa o identificador PBS do traballo).
*Ex: #PBS -e mySTD.err
-ou
Indica o ficheiro no que se redireccionará a saída estándar do noso executable. Por defecto, a saída estándar redirecciónase a un ficheiro con extensión .oXXX
(onde XXX
representa o identificador PBS do traballo).
Ex: #PBS -ou mySTD.out
-m
Indica o tipo de eventos que serán notificados por correo electrónico. Os argumentos posibles desta opción son: b
cando o traballo se emita aos nodos, a
no caso de que se aborte a execución do traballo inesperadamente e/ou e
cando o traballo termine a súa execución sen ningún incidente. Estes argumentos non son excluíntes e pódense combinar.
Ex: #PBS -m ae
-M
Indica a dirección de correo na que se notificarán os eventos indicados coa opción -m
.
Ex: #PBS -M nombre.usuario@usc.es
Avanzados
...
#PBS -t 0-4
cat input.${PBS_ARRAYID} > output.${PBS_ARRAYID}
...
Neste exemplo os datos de entrada atópanse en 5 ficheiros chamados input.0, input.1,etc. Ao usar este script, xeraremos 5 traballos distintos cada un cun valor do índice distinto. O de índice 0 lerá os datos de entrada do arquivo input.0 e escribirá a saída en output.0, o de índice 1 usará input.1 e output.1, etc.
Por exemplo, para facer que o traballo 2 comece cando job1 rematase con éxito poriamos isto no script que lanza o job2 (fai falla saber o job_id do traballo 1):
#PBS -Wdepend=afterok:<job1_id>
Scritps de exemplo
Hai numerosos exemplos de scripts para diversas linguaxes de programación nesta páxina .