Táboa de Contidos

>> 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:

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:

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):

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:

  1. A definición do intérprete a usar, por defecto #!/bin/bash
  2. Unha serie de comentarios de BASH que comezan por #PBS de modo que actúan como instrucións para o xestor de colas.
  3. 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

* -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

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 .

1)
Esta versión dos compiladores dispón dunha opción de optimización (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.
2)
Non se garante a execución en exclusividade dos nodos, se non se solicitan os 64 núcleos dun nodo.