>> 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ódulomodule_name
unload
Desactiva o módulomodule_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 comandoqsub
. É ú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
walltime=HH:MM:SS
: solicitamos a exclusividade dos recursos durante un tempo máximo de HH horas, MM minutos e SS segundos. O límite máximo de tempo permitido é de 168 horas (1 semana).
* -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
(ondeXXX
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/oue
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
-t
Crea un array de traballos. Útil cando se queren enviar moitos traballos que usan o mesmo script e só cambian os datos de entrada. Defínense un ou varios rangos de números separados por comas e/ou guións. Se só se pon un único número, o rango será de 0 ata o devandito número.
Ex:
... #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.
-W
Permite especificar atributos adicionais para o traballo co formatonomee=valor[,nomee=valor…]
. A listaxe completa e o seu formato está na páxina do MAN. O atributo máis útil édepend=dependency_list
que permite establecer dependencias entre traballos.
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 .
march
) para xerar código específico para a arquitectura dos nodos do clúster (procesadores Opteron 6200 series, 15th Family Bulldozer Interlagos). Esta opción de compilación non garante o cumprimento do estándar matemático definido en GCC, polo que non se recomenda o seu uso, salvo naqueles casos nos que se coñeza en profundidade o comportamento das opcións de compilación.