This is an old revision of the document!
2)
march
) to generate code specifically for the cluster's nodes architecture (Opteron 6200 series, 15th Family Bulldozer Interlagos). This compilation option doesn't guarantee that the mathematical standard defined in GCC is followed, so its use is not recommended unless you know what you're doing.
ct$ module load gcc ct$ gcc -O example.c -o example ct$ g++ -O example.cpp -o example ct$ gfortran -O example.f -o exampleThe recommended options are:
-O
Generate optimized code to get better performance. Is equivalent to -O1
. Alternatively, you can use the options -O0
, -O2
or -O3
. Number indicates the optimization level, being 0 the less optimization and 3 the most (( 3 is quite aggressive and can lead to issues).-o <name>
Sets the binary file name.-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 es necesario cargar un módulo MPI (como, por ejemplo, el módulo
openmpi
), que proporcione los scripts de compilación de código MPI (mpicc
, mpicxx
, mpif77
). Estos scripts hacen llamadas al compilador del lenguaje correspondiente.
ct$ module load openmpi ct$ mpicc -O exemplo.c ct$ mpicxx -O exemplo.cpp ct$ mpif77 -O exemplo.f===== Gestión del entorno =====
modules
permite gestionar, de manera eficaz y consistente, múltiples versiones de librerías y sofware para que el usuario utilice la versión adecuada en función de sus requerimientos. Su funcionamiento se basa en el encapsulamiento, dentro de un módulo, de las variables de entorno relacionadas con una versión de software determinada. De este modo, es el propio usuario quien gestiona la utilización de las diferentes versiones de software disponibles en el sistema.
La gestion, a nivel de usuario, de los módulos se realiza con el comando modules
:
ct$ module avail ct$ module list ct$ module load module_name ct$ module unload module_name ct$ module purgeLas opciones son:
avail
Muestra todos los módulos disponibles en el sistema.list
Muestra todos los módulos que están siendo utilizados en la sesión actual.load
Activa el módulo module_name
unload
Desactiva el módulo module_name
purge
Desactiva todos los los módulos de la sesión actual.modules
manipula las variables de entorno relacionadas con los path del sistema (PATH
, LD_LIBRARY_PATH
, etc.), por lo que se recomienda a los usuarios no modificar estas variables de modo arbitrario.
Se recomienda utilizar este comando de manera interactiva. Su uso dentro de .bashrc
para cargar automáticamente módulos habituales no está recomendado, ya que todos los scripts que se ejecuten leen este fichero.
Se recomienda utilizar las versiones por defecto de los difentes módulos. En cualquier caso, el comando module avail
porporciona una lista completa de todos los los módulos y versiones disponibles.
==== Variables de entorno durante la ejecución ====
Por defecto, el entorno de ejecución del sistema Torque/PBS define algunas variables de entorno que pueden ser utilizadas dentro de los scripts (lista completa en el MAN de qsub
):PBS_O_WORKDIR
: contiene el path del directorio de trabajo ($PWD
) desde donde se ha ejecutado el comando qsub
. Es útil para establer un directorio de referencia durante la ejecución de los trabajos indicados.PBS_ARRAYID
: contiene el índice del array correspondiente cuando el trabajo se lanza con la opción -t.PBS_JOBID
: el job_id asignado al trabajo.PBS_JOBNAME
: el nombre asignado por el usuario al trabajo.ct$ chmod u+x script.shDentro del script, el usuario debe indicar la acciones que se realizarán en los nodos, una vez que los recursos requeridos estén disponibles. Ejemplos de scripts contiene diferentes ejemplos relacionados con los módulos instalados en el clúster). El script tiene básicamente tres elementos:
#!/bin/bash
#PBS
de modo que actúan como instrucciones para el gestor de colas.#!/bin/bash #PBS -l nodes=1:ppn=1,walltime=1:00:00 cd /path/to/job/ ./executable==== Parámetros PBS ==== === Básicos ===
-N
Indica el nombre de referencia de nuestro trabajo en el sistema de colas. Por defecto sería el nombre del ejecutable.#PBS -N myjob
-l
Indica los recursos que se solicitan para la ejecución de nuestro trabajo, como el número de núcleos computacionales y el tiempo de ejecución. Los diferentes tipos de recursos se separan por comas.#PBS -l nodes=1:ppn=1,walltime=1:00:00
nodes=N:ppn=K
: solicitamos N
nodos computacionales, y K
núcleos en cada nodo.((No se garantiza la ejecución en exclusividad de los nodos, si no se solicitan los 64 núcleos de un nodo.
This page is not fully translated, yet. Please help completing the translation.
(remove this paragraph once the translation is finished)
>> Volver a la página principal del cluster
The GNU compiler collection (GCC) is accessible in the cluster trough its commands and usual options. By default the compilers installed are from the GCC 4.7.2 version. 1)
walltime=HH:MM:SS
: solicitamos la exclusividad de los recursos durante un tiempo máximo de HH horas, MM minutos y SS segundos. El límite máximo de tiempo permitido es de 168 horas (1 semana).-e
Indica el fichero en el que se redireccionará la salida estándar de error de nuestro ejecutable. Por defecto, la salida estándar de error se redirecciona a un fichero con extensión .eXXX
(donde XXX
representa el identificador PBS del trabajo). #PBS -e mySTD.err
-o
Indica el fichero en el que se redireccionará la salida estándar de nuestro ejecutable. Por defecto, la salida estándar se redirecciona a un fichero con extensión .oXXX
(donde XXX
representa el identificador PBS del trabajo). #PBS -o mySTD.out
-m
Indica el tipo de eventos que serán notificados por correo electrónico. Los argumentos posibles de esta opción son: b
cuando el trabajo se emita a los nodos, a
en caso de que se aborte la ejecución del trabajo inexperadamente y/o e
cuando el trabajo termine su ejecución sin ningún incidente. Estos argumentos no son excluyentes y se pueden combinar.#PBS -m ae
-M
Indica la dirección de correo en la que se notificarán los eventos indicados con la opción -m
.#PBS -M nombre.usuario@usc.es
-t
Crea un array de trabajos. Útil cuando se quieren enviar muchos trabajos que usan el mismo script y solo cambian los datos de entrada. Se definen uno o varios rangos de números separados por comas y/o guiones. Si solo se pone un único número, el rango será de 0 hasta dicho número. ... #PBS -t 0-4 cat input.${PBS_ARRAYID} > output.${PBS_ARRAYID} ...En este ejemplo los datos de entrada se encuentran en 5 ficheros llamados input.0, input.1,etc. Al usar este script generaremos 5 trabajos distintos cada uno con un valor del índice distinto. El de índice 0 leerá los datos de entrada del archivo input.0 y escribirá la salida en output.0, el de índice 1 usará input.1 y output.1, etc.
-W
Permite especificar atributos adicionales para el trabajo con el formato nombre=valor[,nombre=valor…]
. La lista completa y su formato está en la página del MAN. El atributo más útil es depend=dependency_list
que permite establecer dependencias entre trabajos. #PBS -Wdepend=afterok:<job1_id>===== Scritps de ejemplo ===== Hay numerosos ejemplos de scripts para diversos lenguajes de programación en esta página .