Esta es la antigua web del Centro de Supercomputación de Galicia.

Nuestro nuevo web está disponible desde el 18 de Julio de 2011 en
https://www.cesga.es

Por favor, actualice sus enlaces y marcadores.


Esta web solo se mantiene con el fin de servir como histórico de noticias, cursos, ofertas de empleo publicadas, etc.. y/o documentación.

CESGA-Centro de Supercomputación de Galicia
Galego :: Español :: English
Centro de Supercomputacion de Galicia
Inicio » Cesga
Destacados

Conectados
279 visitantes
Total desde 21-12-05: 74826193 visitas
ISO 9001:2008

EXCELENCIA GESTIÓN

Accesibilidad

Guía de uso de SUPERDOME PDF E-mail

Conectando

Una vez obtenida una cuenta de usuario (aquellos usuarios que ya tienen cuenta activa en los servidores HPC4500 o HPC320 ya disponen de cuenta en este sistema), con los datos de login y password, se pueden conectar al sistema Superdome. El nombre del servidor es sd.cesga.es y para conectarse es necesario disponer de un cliente ssh. Un cliente para Windows (Putty) puede encontarse en este enlace. Utilizando este mismo protocolo se puede transferir ficheros cara a y desde el Superdome utilizando un cliente como WinSCP. Para visualizar la salida gráfica de programas que dispongan de esta posibilidad, es necesario conectarse con el comando ssh -X, lo que fijará automáticamente la variable de entorno DISPLAY al equipo desde el cual nos estamos conectando. Para activar esta posibilidad utilizando el cliente Putty, es necesario ir al menú Connection -> SSH -> Tunnels y activar la opción "Enable X11 forwarding", y además será necesario tener instalado y funcionando un cliente X-Windows como el X-Win32.

Uso Interactivo

El sistema operativo del Superdome es UNIX (HP-UX 11iv2). Una vez conectados, se abrirá una sesión interactiva a través de un shell que puede ser ksh o bash. Este shell o intérprete tiene impuestos unos límites de tiempo de CPU, memoria y disco que se pueden consultar mediante el comando ulimit -a. De este modo, es necesario utilizar el sistema de colas para la ejecución de trabajos con grandes demandas de recursos computacionales.

Sistema de colas

Para trabajos que requieran más recursos (tiempo de cálculo, memoria o espacio en disco) que los limitados por el shell interactivo, se deberá utilizar el sistema de colas. Este sistema es el Sun Grid Engine. El modo de enviar trabajos implica conocer de antemano los valores máximos de cantidad de tiempo, número de procesadores, memoria y espacio en disco que va a requerir el cálculo. Esto permite además un mejor aprovechamiento de los recursos del sistema por parte de todos los usuarios.

El comando para enviar trabajos al sistema de colas en el Superdome es qsub, seguido por una lista de los recursos que necesita el trabajo. Por ejemplo, supongamos que queremos enviar un trabajo Gaussian que no necesita más de 2 gigabytes de memoria y 10 gigabytes de scratch, y estimamos un tiempo de ejecución aproximado no superior a 24 horas, utilizando un procesador. Si el fichero de entrada para Gaussian se llama script.com y se encuentra en el directorio "pruebas", la forma de enviar este trabajo a la cola es: 

qsub -l num_proc=1,s_rt=24:00:00,s_vmem=2G,h_fsize=10G
cd $HOME/pruebas
g98 < script.com
control+D

Si no se produce ningún error, obtendremos un mensaje de este tipo:

Your job 492 ("STDIN") has been submitted

El número 492 es lo que se llama identificador de trabajo o JOBID y nos permite identificar nuestro trabajo dentro del sistema de colas (por ejemplo, para utilizar con el comando qstat y saber si se está ejecutando, encolado, etc.). También es importante indicar este número al hacer consultas telefónicas o por correo electrónico con el personal de sistemas.

La forma de especificar recursos es con la directiva -l, seguida de los recursos que se solicitan separados con una ",". Es imprescindible dejar un espacio en blanco entre la opción "-l" y la lista de recursos. Los recursos deben ser:

Recurso

Significado

Unidades

Valor mínimo

Valor máximo

num_proc Número de CPUs (procesadores) requeridos por el trabajo --- 1 16
s_rt Máxima cantidad de tiempo real que puede durar un trabajo Tempo   300:00:00/num_proc
1000:00:00 (só para num_proc=1)
s_vmem Cantidad total de memoria RAM requerida por el trabajo Tamaño   32G
h_fsize Máximo espacio requerido por un único fichero creado por el trabajo Tamaño   100G

Si necesita utilizar valores superiores a los límites de estos recursos o necesita una priorización de sus trabajos consulte la páxina de Recursos Especiales, allí se indican los pasos a seguir.

Debemos tener en cuenta que:

Es muy importante dejar un espacio en blanco entre la opción "-l" y el siguiente recurso, mientras que después no deberá haber ningún otro espacio en blanco separando los recursos.

1. Estos valores son máximos, por lo que no se podrán superar. Esto quiere decir que si creemos que nuestro trabajo durará unas 23 horas, debemos poner como s_rt=24:00:00 para asegurarnos de dejar un margen al trabajo. Después de 24 horas el sistema finalizará el trabajo, aunque este no haya concluido.

2. Cuanto más ajustados sean estos valores a los recursos que realmente consume el trabajo, mayor prioridad para entrar en ejecución tendrá el trabajo.

Si estos recursos no son suficientes para el trabajo, éste abortará por falta de recursos y será necesario indicar los valores adecuados. En general, recomendamos solicitar recursos lo más cercanos, por encima, a los valores que se estimen necesarios. El motivo es que cuantos menos recursos se soliciten, con mayor prioridad entrará el trabajo en ejecución.

El formato de las unidades para los recursos es el siguiente:

Tiempo: especifica el período de tiempo máximo durante el que se puede utilizar un recurso. El formato es el siguiente: [[horas:] minutos:]segundos, por ejemplo:

  • 30:00 son 30 minutos
  • 100:00:00 son 100 horas
  • 1200 son 1200 segundos (20 minutos)


Tamaño: especifica el tamaño máximo en Megabytes. Se expresa en la forma entero [sufijo]. El sufijo actúa como un multiplicador definido en la siguiente tabla:

k kilo (1024) bytes
m Mega (1,048,576) bytes
g Giga (1,073,741,824) bytes

Resumiendo, vamos a poner unos ejemplos para distintos trabajos:

1. Para un trabajo que requiere poco consumo de memoria y tiempo de ejecución:

qsub -l num_proc=1,s_rt=10:00,s_vmem=100M,h_fsize=100M traballo.sh

2. Trabajo que require mucho tiempo de ejecución (80 horas) y poca memoria (é suficiente con 256mb):

qsub -l num_proc=1,s_rt=80:00:00,s_vmem=256M,h_fsize=10M traballo.sh

3. Un trabajo con grandes requerimientos de memoria (4 Gigabytes) pero poco tiempo de ejecución:

qsub -l num_proc=1,s_rt=30:00,s_vmem=4G,h_fsize=10M traballo.sh

4. Un trabajo que genera un fichero grande (hasta 20 Gigabytes) de resultados:

qsub -l num_proc=1,s_rt=30:00:00,s_vmem=500M,h_fsize=20g traballo.sh

5. Un trabajo que consume 100 horas de CPU, 2 Gigabytes de memoria y genera un fichero de 5 gigabytes:

qsub -l num_proc=1,s_rt=100:00:00,s_vmem=2G,h_fsize=5G traballo.sh

6. Un trabajo paralelo con 8 procesadores y 10 horas de tiempo de ejecución total, 8 Gigabytes de memoria total y genera un fichero de 10 gigabytes:

qsub -l num_proc=8,s_rt=10:00:00,s_vmem=8G,h_fsize=10G traballo.sh


Una vez que ejecutamos el comando qsub, y obtenemos el identificador para el trabajo, éste pasa a una cola apropiada para su ejecución. El trabajo esperará su turno o el momento en que estén disponibles los recursos solicitados, para pasar a la ejecución, y finalmente el trabajo concluirá y desaparecerá de la cola.

 

 Chequeando el estado de los trabajos

Para comprobar el estado en que se encuentran los trabajos, se puede utilizar el comando qstat

qstat

Obtendremos una salida como la siguiente:

Job id prior name user state submit/start at Queue master
489 0 STDIN carlosf r 12/29/2003 19:49:05 Cola1 MASTER

El significado de los campos es el siguiente:

Job ID: 489 es el valor del JOB-ID que le ha asignado el sistema de colas PBS. El JobID es un identificador único para cada trabajo y permite realizar el seguimiento del mismo.

Prior: indicar la prioridad con que se está ejecutando el trabajo

Name: STDIN es el nombre del trabajo que se ha enviado a la cola. Si se ha enviado un trabajo desde la entrada estándar (es decir, escribiendo los comandos al enviar el trabajo), aparecerá STDIN. En el caso de ser un script, aparecerá el nombre del script.

User: carlosf es el login del usuario que ha enviado el trabajo a la cola

State: "r" es el estado en que se encuentra el trabajo e indica que está en ejecución (running). Los otros posibles estados de un trabajo son:

    • t: transfiriéndose el trabajo para comenzar su ejecución. R indica que el trabajo está en ejecución.
    • s: suspendido temporalmente para ejecutar trabajos más prioritarios
    • w: el trabajo está encolado en espera de que haya suficientes recursos para ser ejecutado o debido a que se han excedido los límites por el usuario.

Submit/start at: fecha y hora en la que el trabajo fue enviado a la cola o entró en ejecución.

Queue: cola 1 es el nombre de la cola a la que se envió el trabajo. La cola destino dependerá de los recursos que se hayan solicitado.

Master: indica el host desde el que se envió el trabajo.  

Ejecución de trabajos paralelos

El Cluster Integrity Superdome está formado por dos nodos de 64 CPUs cada uno. Es posible, por lo tanto, utilizar modelos de paralelización de memoria compartida (del estilo OpenMP) para la comunicación dentro de un nodo, como modelos de memoria distribuida (del tipo MPI) para la comunicación entre nodos y también dentro de un nodo. En ambos caos, el número de CPUs máximo que se puede utilizar estará limitado a 16 y siempre se utilizará dentro de un mismo nodo.

Sistemas de ficheros

Existen distintos sistemas de ficheros con diferentes características en función de los requerimientos de espacio y velocidad de acceso.

Directorio home
Es el directorio en el que estarán los datos y ficheros habituales de trabajo diario, y del que se hacen backups de modo regular. La cantidad de datos por usuario en su directorio home está limitada a 10 Gbytes. Utilizando el comando "quota -v" cada usuario puede conocer en cualquier momento la cantidad de datos que todavia puede introducir en su cuenta.

Sistema de almacenamento
Todos los usuarios que necesiten mayores demandas de almacenamiento que las disponibles en su directorio home, deberán solicitar acceso al sistema de almacenamiento masivo, enviando un mail a  precisando la cantidad de almacenamiento necesario y cual va a ser su uso.

Directorio de scratch
Es un espacio de almacenamiento para datos temporales y que se utiliza en aplicaciones como Gaussian o Gamess que requieren un fichero grande en el que escriben gran cantidad de datos de modo continuado. Sólo es posible acceder a este directorio a través del sistema de colas y con la variable de entorno $TMPDIR. Los datos que se encuentren en este directorio desaparecerán al finalizar el trabajo. Si algún fichero contenido en este directorio fuese necesario, es responsabilidad de cada usuario el copiarlo a su directorio home antes de que concluya el trabajo.

 Utilización del scratch

Para cada trabajo que se envía a la cola, se genera un directorio en el disco scratch local de los nodos. Este disco de scratch es más rápido que los discos que contienen el directorio home de los usuarios, por lo que los programas que requieren realizar muchas operaciones de entrada-salida deberían utilizar este directorio scratch como lugar de trabajo. El nombre de este directorio varía en cada ejecución y es accesible mediante la variable de entorno $TMPDIR dentro del trabajo. Es necesario tener en cuenta que este directorio se elimina al terminar la ejecución de los trabajos, por lo que si se ha escrito en los datos que queramos conservar, es necesario copiarlos al directorio home del usuario.


Nota para los usuarios de Gaussian98:

La instalación de Gaussian98 en el CESGA está configurada para utilizar automáticamente este directorio como espacio de scratch, por lo que el usuario de esta aplicación no necesita configurar la variable de entorno GAUSS_SCRDIR.

Directorio /tmp
En este directorio de acceso común para todos los usuarios se pueden introducir pequeños ficheros temporales, aunque su utilización está desaconsejada y su contenido podrá ser eliminado de forma periódica.

Editores de texto
Ademais del vi, están disponibles emacs, xemacs y xedit.

Más información para la utilización del  Gaussian98.

Compilación

Compilador de C/C++

Existen tres compiladores para C/C++:

  • cc, compila código en C
  • c89, compila código en ANSI C
  • aCC -o CC, que compila código en C++.

Por defecto, la compilación genera código de 32bits. Para compilar para 64bits es necesario incluir la opción +DD64. Si se quiere producir código optimizado para Itanium2, añadir además la opción +DSItanium2.

Todos los compiladores admiten hasta cuatro niveles de optimización que se activan con la opción +Onivel, siendo nivel igual a 0, 1 (opción por defecto), 2, 3 o 4. La optimización -fast ó -Ofast selecciona una combinación de opciones para una ejecución óptima en velocidad (en concreto, +O2, +Onolimit, +Olibcalls, +Ofltacc=relaxed, +DSnative, +FPD, -Wl,+pi,4M, -Wl,+pd,4M y -Wl,+mergeseg)

Todos los compiladores de C/C++ soportan OpenMP 2.0 (véase más abajo cómo activarla).

Compilador de Fortran

El compilador existente es el propio de HP. Entre las características principales están:

· Soporte de F77/F90/F95
· Soporte de OpenMP 2.0
· Autoparalelizador
· Generación de código de 32 bits (por defecto) o 64 bits

Para compilar un programa es necesario ejecutar el comando

f90 fichero.F

En este caso generará código por defecto para 32 bits. Si se quiere compilar con soporte para 64 bits, hay que incluir la opción +DD64. Si se quiere producir código específico para Itanium2 (opción recomendada) existe la opción +DSItanium2 ó +DSnative. Por ejemplo, si se pretende compilar para Itanium2 con soporte para 64 bits se ha de ejecutar el comando.

f90 +DD64 +DSitanium2

Optimización

Existen 4 niveles de optimización que se seleccionan con +O<nivel> ó -O<nivel>, además de poder controlar en cada caso las opciones de compilación con las diferentes opciones +O<opcion>. Además, HP Fortran incluye una optimización apropiada para muchos programas que se activa con +Ofast. Aparte de ejecutar las optimizaciones más adecuadas para la máquina, cambia el tamaño de página de datos y de programa a 4MB, permitiendo reducir las pérdidas de TLBs en programas que consuman memoria o cuyo ejecutable sea grande. Estos parámetros pueden cambiarse posteriormente a través del comando chatr.

f90 +Ofast +DD64 entrada.F

 
Cambio de tamaño de página de ejecución

El procesador Itanium2 incluye 128 entradas para TLB de tipo TEXT (código del programa) y 128 para DATA (datos). Para una ejecución óptima del programa es posible, en función de las necesidades del mismo, seleccionar el tamaño de página que se utilizará para ese programa utilizando el comando chatr con la siguiente sintaxis:

chatr +pd <tamaño páxina datos> +pi <tamaño páxina executable> executable

Los tamaños válidos son 4K, 16K, 64K, 256K, 1M, 4M, 16M, 64M, 256M, 1G, 4G, D, y L, donde D significa "por defecto" y L "la más grande posible".

Por ejemplo, supongamos que tenemos que ejecutar un programa que necesite 16GB de memoria RAM para datos. Para distribuir esos 16GB en solo 128 páginas, necesitaríamos páginas de 128MB (que no se pueden seleccionar). Para mejorar el resultado del programa se podrían utilizar páginas de 256MB utilizando el comando:

chatr +pd 256M <executable>


Utilización de MLIB (BLAS/LAPACK/ScaLAPACK)

HP MLIB contiene versiones robustas y optimizadas para Itanium2 de todas las funciones de BLAS 1, 2 y 3, BLAS sparse, LAPACK, ScaLAPACCK, SuperLU_DIST, Fast Fourier transforms (FFTs) y convoluciones. Incluye además la funcionalidad completa de la librería METIS 4.0.1 (http://www-users.cs.umn.edu/~karypis/metis/metis/).

Para compilar un programa que necesite estas librerías se han de incluir las opciones -lveclib -llapack. En función del modelo de datos seleccionado (32 bits o 64 bits) se incluirán las referencias adecuadas en cada caso a las librerías correspondientes.

Por ejemplo, el comando

f90 +DD64 entrada.F -lveclib -llapack

generará un ejecutable que cargará a las librerías (si se utilizan en el programa, claro está),

/opt/mlib/lib/hpux64/libveclib.so y /opt/mlib/lib/hpux64/liblapack.so

NOTA: para 64 bits, y sólo cuando los enteros son de 64 bits - Integer*8 en Fortran y long long en C -, se pueden también referenciar las librerías veclib8 y lapack8. Es preferible compilar estas librerías de forma estática, ya que el rendimiento es mejor. 

 
Compilación con MPI

HP MPI está basado en las implementaciones del estándar MPICH (de Argonne National Laboraroty) y LAM (de la Universidad de Notre Dame). Es totalmente compatible con el estándar MPI 1.2 e incluye algunas de las funcionalidades de MPI 2.0, como ROMIO, una implementación de MPI I/O de ANL. Para una descripción de las características de MPI 2.0 soportadas, véase el manual HP MPI User's Guide, Seventh Edition.

Existen tres comandos que permiten compilar fácilmente un programa para que precise MPI:

  • mpicc, que utiliza por defecto el compilador /opt/ansic/bin/cc
  • mpiCC, que utiliza /opt/aCC/bin/aCC
  • mpif90, que utiliza /opt/fortran90/bin/f90

Cada uno de ellos llamará al compilador adecuado en cada caso, con las opciones del compilador que se incluyan a mayores e incluirá las librerías necesarias de MPI. Al igual que en casos anteriores, es necesario indicar si se compila para 32bits o 64bits.

Para ejecutar la aplicación se pueden usar los comandos:

  •  mpirun
  • mpiexec

Por ejemplo,

mpirun -np 4 mpihello


Compilación y ejecución con OpenMP

Tanto el compilador de Fortran como de C soportan la versión 2 de OpenMP. Para compilar un programa que necesite utilizar OpenMP se ha de utilizar la opción +Oopenmp. Si el código incluye directivas para OpenMP y no se quieren utilizar, se ha de utilizar la opción +Onoopenmp. Por ejemplo, para compilar el programa programa.F con OpenMP utilizar el comando:

f90 +Oopenmp -o programa programa.F

Por defecto, el número de hilos que se arrancan es igual al número de procesadores (es decir, en el caso del Superdome 64). Para controlar el número de hilos que se ejecutan, utilizar la variable OMP_NUM_THREADS=<número de hilos>. Por ejemplo, en la shell ksh el siguiente comando limitará el número de hilos a 16:

export OMP_NUM_THREADS=16

Si se ejecuta en batch, esa variable tendrá un valor igual al número de procesadores seleccionados en el qsub con la opción -l num_proc.

 
Documentacion Adicional

Para información más detallada y manuales de programación, se puede consultar la siguiente página web http://doc.cesga.es/superdome/Programming.html, donde también se encuentra información específica para el procesador Itanium y optimización de aplicaciones para este procesador.

Modificado ( 04.08.2009 )
Master HPC

CESGA APOYA

PRACE Award 2009

Itanium Alliance Award

Proyectos

Miembro de Gelato

Acreditación EUGridPMA

Novedades
Dominio gallego

ALERTA VIRUS MENSUAL

infoarrobacesga.es :: Telf.: +34 981 569810 - Fax: 981 594616 :: Avda. de Vigo s/n 15705, Santiago de Compostela.
CESGA