• Hardware

Actualización 2015

En Febrero 2015 se pone en producción la siguiente ampliación del sistema:

18 HP ProLiant XL230a Gen9 – Compute node (node configuration)
Processor

2 x Intel Haswell E5-2680

2.5 GHz, 30MB Level 3 Cache, 120W, 12 cores per processor

Memory

64 GB

Storage

2 x 1TB 6G SATA 7.2K 2.5in

Networking

Dual Port Intel 1GbE NIC

Dual Port Infiniband FDR 40Gb

Actualización 2014

En Junio 2014 se pone en producción la siguiente ampliación del sistema:

10 HP ProLiant DL320e Gen8 v2 – Compute node (node configuration)
Processor

1 x Intel Haswell E5-1240

3.4 GHz, 8MB Smart Cache, 80W, 4 cores per processor

Memory

32 GB

Storage

1 x 2TB 6G SATA 7.2K 3.5in

Networking

Dual Port Intel 1GbE NIC

Actualización 2012

En Octubre 2012 se pone en producción la siguiente ampliación del sistema:

8 HP ProLiant SL230s Gen8 – Compute node (node configuration)
Processor

2 x Intel Sandy Bridge E5-2670

2.6 GHz, 20MB Level 3 Cache, 115W, 8 cores per processor

Memory

64 GB

Storage

1 x 2TB 6G SAS 7.2K

Networking

Dual Port Intel 1GbE NIC

Dual Port Infiniband FDR 40Gb

2 HP DL 560 Gen8 - Fat node (node configuration)
Processor

4 x Intel Sandy Bridge E5-4620

2.2 GHz, 16MB Level 3 Cache, 95W, 8 cores per processor

Memory

512 GB PC3-1333R

Storage

6 x 1TB 3G SAS 6G 7.2K NHP

Networking

Four Port HP 1GbE NIC

Dual Port Infiniband FDR 40Gb

Actualización 2011

En Marzo 2011 se ha puesto en producción la siguiente ampliación del sistema:

46 HP ProLiant SL165z G7 – Compute node (node configuration)
Processor

2 x AMD Opteron™ Processor 6174

2.2 GHz, 12MB Level 3 Cache, 80W, 12 cores per processor

Memory

32 GB (27 nodes) & 64 GB (19 nodes)

Storage

1 x 500GB 3G SATA 7.2K NHP

Networking

2 Embedded Dual Port Intel 1GbE NICs (4 total NICs)

4 HP DL 385 G7 - Visualization node (node configuration)
Processor

2 x AMD Opteron™ Processor Model 6174

2.2 GHz, 12MB Level 3 Cache, 80W

Memory

64 GB PC3-1333R

Storage

1 x 2TB 3G SATA 7.2K NHP

Networking

2 Embedded Dual Port Intel 1GbE NICs (4 total NICs)

Vis. Card

ATI Firepro V7800

Total
Processor

1,200 cores 2.2GHz

Memory

2,400 GB

Storage

31 TB

Networking

NFS GbE & Dedicated MPI GbE

Performance

10,240 GFlops

Power
consumption

21KW

CPU hours

10 Million hours

Perf./KW

487GFlops/KW

  • Estado de los sistemas

En el siguiente enlace podrá consultar el estado del SVG estado de los sistemas.

  • Guía de uso
    • Acceso:

    Se accede al sistema a través de svg.cesga.es siguiendo las instrucciones que se detallan a continuación:

    1. Conectarse a svg.cesga.es de la forma habitual

    2. Lanzar una sesión interactiva: compute --arch [amd|sandy]
    (amd: nodos AMD Opteron; sandy: nodos Intel Sandy Bridge)

    3. Cargar los módulos necesarios de compiladores, aplicaciones, etc.


    NOTAS:

    module av muestra los módulos disponibles

    module help muestra una ayuda básica de como utilizar el módulo

    • Envío de trabajos al sistema de colas:

    El envio de trabajos se realiza del siguiente modo:

    Trabajos secuenciales:

    qsub -l arch=[amd|sandy|ivy|haswell|ibhas],num_proc=1,s_rt=1:00:00,s_vmem=2G,h_fsize=20G trabajo.sh

    Trabajos paralelos openmp:

    qsub -l arch=[amd|sandy|ivy|haswell|ibhas],num_proc=16,s_rt=1:00:00,s_vmem=2G,h_fsize=20G trabajo.sh

    Trabajos paralelos MPI:

    qsub -l arch=[amd|sandy|ivy|haswell|ibhas],num_proc=1,s_rt=1:00:00,s_vmem=2G,h_fsize=20G -pe mpi 16 test.sh

    Para más detalles consultar la guía de Intel MPI


    Los limites máximos son los siguientes:

    • Memoria: hasta 1TB
    • Numero de cores por nodo: hasta 32
    • Numero de cores por trabajo: hasta 192
    • Tamaño de scratch: hasta 4TB
    • Tiempo máximo de ejecución de trabajos: hasta 300 horas "elapsed" en nodos "amd" y hasta 48 horas en nodos "sandy"

    Puede obtener información detallada sobre la política de uso del SVG ejecutando:
    module help sge
    Esta política puede imponer restricciones adicionales sobre los límites máximos anteriores, pudiendo dinámicamente en función de las necesidades específicas en cada momento.

    • Sistemas de ficheros:

    Ver guía almacenamiento


    • Compiladores y herramientas de desarrollo:

    Combinaciones de compiladores, librerías BLAS/LAPACK y MPI disponibles:

    Compiladores de intel. Intel

    Compiladores GNU. GNU

    Compiladores Open64. OPEN64

    Compiladores de PGI. PGI

    Referencias: documentación recomendada

     

    Intel(RECOMENDADO)

    Uso habitual en el CESGA:

    Compiladores:

    https://www.cesga.es/soporte_usuarios/usr-servicio-computacion/Aplicaciones?app=Intel%20C%2B%2B%20Compiler

    https://www.cesga.es/soporte_usuarios/usr-servicio-computacion/Aplicaciones?app=Intel%20Fortran%20Compiler

    Librería matemática

    https://www.cesga.es/soporte_usuarios/usr-servicio-computacion/Aplicaciones?app=MKL

    MPI:

    https://www.cesga.es/soporte_usuarios/usr-servicio-computacion/Aplicaciones?app=Intel%20MPI%20Library

     

    GNU

    Uso habitual en Scientific Linux 6

    https://www.cesga.es/soporte_usuarios/usr-servicio-computacion/Aplicaciones?app=GNU%20Compilers

     

    OPEN64:

    Para utilizar los compiladores de Open64 debe cargarse el módulo correspondiente:

    module load open64: Carga los compiladores de Open64

    Para compilar códigos, deberá utilizarse los siguientes comandos:

    opencc fichero.c (códigos en C)

    openCC fichero.C (códigos en C++)

    openf90 fichero.f90 (códigos en FORTRAN 90)

    openf95 fichero.f95 (códigos en FORTRAN 95)

    Algunas opciones de compilación importantes son:

     

    -O2

    Nivel de optimización por defecto; equivalente a “-O”. Realiza un conjunto de optimizaciones globales.

    -O3

    “-O2” con algunas optimizaciones más agresivas; en particular, “-O3” activa LNO.

    -Ofast

    Se expande en “-O3”, “-ipa”, y algunas otras optimizaciones más agresivas.

    -LNO

    Habilita las optimizaciones en bucles anidados, incluyendo vectorización y generación de instrucciones prefetch.

    -ipa

    Realiza análisis y optimizaciones interprocedimentales. Optimiza a través de funciones y límites del fichero.

    3-fb-create

    -fb-opt

    Activa optimizaciones profile-guided (dirigidas por retroalimentación). Requiere compilaciones separadas.

    -apo

    Habilita la paralelización automática de bucles.

    -mso

    Realiza optimizaciones de escalabilidad en procesadores multicore.

    -march

    Genera instrucciones para un tipo de procesador específico.

    -mp

    Activa el soporte para OpenMP (versión 2.5)

    -HP

    Especifica el número de huge pages (2MB) usados por los segmentos bss, data, text and heap. Esta característica puede no estar disponible en todos los sistemas operativos.

     

    Información más detallada sobre la utilización de los compiladores de Open64 y la optimización de las aplicaciones se puede encontrar en:

    http://developer.amd.com/documentation/articles/pages/optimizewithopen64.aspx

    Fortran intrinsics:

    El soporte de los procedimientos intrinsecos en fortran se controla mediante la opción -intrinsic=

    Para incluir en la compilación todas las intrínsecas soportadas se debe usar  -intrinsic=EVERY

    Adicionalmente es posible sólo incluir la función necesaria: -intrinsic=<función>. Por ej: -intrinsic=rand incluiría la extensión GNU rand (http://gcc.gnu.org/onlinedocs/gfortran/RAND.html)

     

    Librerías matemáticas ACML (BLAS/LAPACK/FFT):

    ACML proporciona un conjunto de rutinas matemáticas optimizadas para aplicaciones de cálculo intensivo. Constan de los siguientes componentes principales:

    • Una implementación completa de nivel 1, 2 y 3 de Basic Linear Algebra Subrutines (BLAS), con rutinas optimizadas para alto rendimiento en procesadores AMD Opteron.

    • Un paquete completo de las rutinas de álgebra lineal (LAPACK). Además de tener las ventajas de disponer de BLAS optimizadas, un conjunto de rutinas LAPACK se han optimizado para conseguir un rendimiento considerablemente mayor que las implementaciones LAPACK estándar.

    • Fast Fourier Transforms (FFTs) en tipos de datos single, double, single-complex and double-complex.

    • Generadores de números aleatorios, tanto en simple como en doble precisión.

    Para utilizar estas librerías matemáticas es necesario cargar el módulo correspondiente:

    module load acml/4.4.0_open64

    Para linkar un programa que necesite estas librerías es necesario seguir la siguiente fórmula general:

    openf90 test.f90 -o test -lacml

    Si se quiere utilizar la versión OpenMP de estas librerías debemos cargar el módulo:

    module load acml/4.4.0_open64_OpenMP

    y linkar siguiendo esta fórmula:

    openf90 -mp test.F -o test -lacml_mp

    NOTA: Soporte OpenMP sólo disponible para las rutina BLAS

     

    Compilación y ejecución con OpenMP

    Tanto el compilador de Fortran como de C soportan OpenMP. Para compilar un programa que necesite utilizar OpenMP se ha de utilizar la opción -openmp o -mp. Por ejemplo, para compilar el programa test.F con OpenMP utilizar el comando:

    openf90 -openmp programa.F -o programa, o bien,

    openf90 -mp programa.F -o programa

    Por defecto, el número de hilos que se arrancan es igual al número de procesadores. 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 o bash el siguiente comando limitará el número de hilos a 6:

    export OMP_NUM_THREADS=6

    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.

     

    Compilación y ejecución con MPICH2

    Para utilizar MPICH2 debe cargarse el módulo correspondiente:

    module load mpich2

    Al cargar este módulo se cargan automáticamente los compiladores Open64, que serán los que se utilizarán por defecto:

    • mpicc, compila código MPI en C, utilizando el compilador de Open64 opencc

    • mpicxx, compila código MPI en C++, utilizando el compilador de Open64 openCC

    • mpif90, compila código MPI en Fortran 90, utilizando el compilador de Open64 openf90

    Si se desea utilizar otros compiladores, es necesario cargar el módulo correspondiente al compilador:

    mpich2/1.3.2p1-gnu: Compiladores GNU gcc/g++/gfortran

    mpich2/1.3.2p1-pgi: Compiladores PGI pgcc/pgCC/pgf90

    Para ejecutar la aplicación se pueden usar estos comandos indistintamente:

    mpirun

    mpiexec

    A estos comandos se le debe indicar el número de procesos a utilizar (opción -np) y el ejecutable con sus parámetros. El fichero de nodos es asignado por el sistema de colas y su ubicación es $TMPDIR/machines.

    Ejemplo:
    mpirun -np 4 ./mpi_program


    Librerías matemáticas paralelas ScaLAPACK:

    ScaLAPACK (Scalable LAPACK) es una librería que incluye un subconjunto de rutinas LAPACK rediseñado para computadores paralelos de memoria distribuida. Actualmente está escrito en estilo Single-Program-Multiple-Data usando pasos de mensaje explícitos para la comunicación entre procesos. Se asume que las matrices se colocan siguiendo una descomposición cíclica de bloque de dos dimensiones. ScaLAPACK está diseñada para computación heterogénea y es portable a cualquier computador que soporte MPI.

    Para utilizar estas librerías matemáticas es necesario cargar el módulo correspondiente:

    module load scalapack

    Para linkar un programa que necesite estas librerías es necesario seguir la siguiente fórmula general:

    mpif90 example.f -o example -lscalapack -lblacsF77init_MPI-LINUX-0 -lblacs_MPI-LINUX-0 -lblacsF77init_MPI-LINUX-0 -lacml

    Se ejecuta igual que cualquier programa MPI:

    mpirun -f $TMPDIR/machines -np 4 ./example

     

    PGI

     

    Se recomienda la utilización de los compiladores de Open64, aunque también existe la posibilidad de utilizar los compiladores de PGI. Para utilizar los compiladores de PGI debe cargarse el módulo correspondiente:

    module load pgi: Carga todo el entorno de PGI

    Para compilar códigos, deberá utilizarse los siguientes comandos:

    pgcc fichero.c (códigos en C)

    pgCC fichero.C (códigos en C++)

    pgf77 fichero.f (códigos en FORTRAN 77)

    pgf90 fichero.f90 (códigos en FORTRAN 90)

    pgf95 fichero.f95 (códigos en FORTRAN 95)

    Algunas opciones de compilación importantes son:

    -O<level>

    Especifica el nivel de optimización del código. <level> puede ser 0, 1, 2, 3 ó 4. “-O2” es la opción que se toma por defecto.

    -fast

    Incluye -O2 , -Munroll y otras opciones más agresivas.

    -Minline

    Habilita inlining de funciones.

    -Mvect=prefetch

    Instruye para generar instrucciones prefetch cuando se encuentran bucles vectorizables

    -Mipa=fast, inline

    Realiza análisis y optimizaciones interprocedimentales. También habilita inlining automático de procedimientos.

    -Mpfi

    -Mpfo

    Activa optimizaciones dirigidas por retroalimentación del perfil.

    -Munroll

    Desenrolla bucles, ejecutando múltiples estancias del bucle en cada iteración.

    -mp

    Activa el soporte para OpenMP

    -Mconcur

    El compilador utilizará múltiples procesadores para ejecutar los bucles que determina que son paralelizables.

     

    Información más detallada sobre la utilización de los compiladores de PGI y la optimización de las aplicaciones se puede encontrar en:

    http://www.pgroup.com/doc/pgiug.pdf

     

    Librerías matemáticas ACML (BLAS/LAPACK/FFT):

    Al cargar el módulo de PGI ya está disponible la librería ACML optimizada para este compilador.

    Para linkar un programa que necesite estas librerías es necesario seguir la siguiente fórmula general:

    pgf90 test.F -o test -lacml

    y si se quiere utilizar la versión OpenMP de estas librerías:

    pgf90 -mp test.F -o test -lacml_mp

     

    Compilación y ejecución con OpenMP

    Tanto el compilador de Fortran como de C soportan OpenMP. Para compilar un programa que necesite utilizar OpenMP se ha de utilizar la opción -openmp o -mp. Por ejemplo, para compilar el programa test.F con OpenMP utilizar el comando:

    pgf90 -openmp programa.F -o programa, o bien,

    pgf90 -mp programa.F -o programa

    Por defecto, el número de hilos que se arrancan es igual al número de procesadores. 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 o bash el siguiente comando limitará el número de hilos a 6:

    export OMP_NUM_THREADS=6

    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.

     

    Compilación y ejecución con MPI de PGI

    NOTA: Temporalmente el uso de MPI incluido en la distribución de PGI está deshabilitado debido a la imposibilidad de integración en el sistema de colas. Alternativa: Usar mpich2

    Los compildores de PGI incorporan soporte para MPI-1, pero no para MPI-2.

    Al cargar el módulo de PGI se carga automáticamente el soporte de MPI-1:

    • mpicc, compila código MPI en C, utilizando el compilador de PGI pgcc

    • mpicxx, compila código MPI en C++, utilizando el compilador de PGI pgCC

    • mpif77, compila código MPI en Fortran 77, utilizando el compilador de PGI pgf77

    • mpif90, compila código MPI en Fortran 90, utilizando el compilador de PGI pgf90

    Otra forma alternativa de compilar con MPI es utilizar los compiladores de PGI y añadir el flag -Mmpi. Ejemplo:

    pgcc test_mpi.c -Mmpi -o test_mpi” es equivalente a “mpicc test_mpi.c -o test_mpi

    Para ejecutar la aplicación hay que usar el comando mpirun. A este comando se le debe indicar el número de procesos a utilizar (-np), el fichero de nodos a utilizar (-machinefile) y el ejecutable con sus parámetros. El fichero de nodos es asignado por el sistema de colas y su ubicación es $TMPDIR/machines.

    Ejemplo:
    mpirun -machinefile $TMPDIR/machines -np 4 ./mpi_program

    Para el uso de MPI-2 es necesario usar mpich2 cargando el módulo correspondiente a los compiladores PGI:

    module load mpich2/1.3.2p1-pgi

    Al cargar este módulo se cargan automáticamente los compiladores PGI:

    • mpicc, compila código MPI en C, utilizando el compilador PGI pgcc

    • mpicxx, compila código MPI en C++, utilizando el compilador PGI pgCC

    • mpif90, compila código MPI en Fortran 90, utilizando el compilador PGI pgf90

    Para ejecutar la aplicación se pueden usar estos comandos indistintamente:

    • mpirun

    • mpiexec

    A estos comandos se le debe indicar el número de procesos a utilizar (opción -np) y el ejecutable con sus parámetros. El fichero de nodos es asignado por el sistema de colas y su ubicación es $TMPDIR/machines.

    Ejemplo:
    mpirun -np 4 ./mpi_program


    Librerías matemáticas paralelas ScaLAPACK:

    NOTA: Debido a la imposibilidad de integración del MPI de PGI con el sistema de colas temporalmente se inhabilita el uso de scalapack con estos compiladores. Por favor si es necesario hacer una petición por correo electrónico a aplicaciones@cesga.es 

    Los compildores de PGI también incorporan estas librerías matemáticas.

    La forma más sencilla de linkar un programa que necesite estas librerías es utilizar el flag -Mscalapack:

    pgf90 example.f -o example -Mmpi -Mscalapack, o bien, mpif90 example.f -o example -Mscalapack

    Ejecutar con:

    mpirun -machinefile $TMPDIR/machines -np 4 ./example

    Nota: No hay versión disponible de ScaLAPACK para los compiladores PGI y mpich2

     

    Referencias:

    https://software.intel.com/en-us/intel-software-technical-documentation

    https://software.intel.com/sites/default/files/Compiler_QRG_2013.pdf

    http://developer.amd.com/Assets/CompilerOptQuickRef-61004100.pdf

    http://www.pgroup.com/doc/pgiug.pdf