Características Acceso Envío de trabajos Sistema de ficheros Compiladores Características: Hardware El sistema SVG instalado en el CESGA está formado por: 40 servidores blade: 36 DELL PE 1955 con doble procesador quad-core Intel Xeon 5310 a 1.6GHz con 4GB de memoria principal y un disco de 72GB SAS a 10,000rpm y 4 servidores blade DELL PE 1955 con doble procesador quad-core Intel Xeon 5355 a 2.66GHz con 8GB de memoria principal y dos discos de 72GB SAS a 10,000rpm. Todos estos nodos están interconectados mediante Gigabit Ethernet a un servidor de datos 2950 con 2 procesadores Xeon 5130 a 2GHz y 4GB de memoria e 1800GB de disco SCSI en configuración RAID 5 Actualización 2011 En Marzo 2011 se ha puesto en produccion la siguiente ampliacion del sistema: 46 HP ProLiant SL165z G7 – Compute node (node configuration) 2 x AMD Opteron™ Processor 6174 Processor 2.2 GHz, 12MB Level 3 Cache, 80W, 12 cores per processor Memory 32 GB (17 nodes) & 64 GB (27 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) 2 x AMD Opteron™ Processor Model 6174 Processor 2.2 GHz, 12MB Level 3 Cache, 80W Memory 64 GB PC3-1333R Storage 1 x 2TB 3G SATA 7.2K NHP 46 HP ProLiant SL165z G7 – Compute node (node configuration) 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 Acceso: Se accede al sistema a través de svgd.cesga.es siguiendo las instrucciones que se detallan a continuación: 1. Conectarse a svgd.cesga.es de la forma habitual 2. Lanzar una sesión interactiva: compute --arch amd 3. Cargar los modulos necesarios de compiladores, aplicaciones, etc. NOTAS: module av muestra los modulos disponibles module help <módulo> muestra una ayuda básica sobre como utilizar el módulo Envío de trabajos al sistema de colas: El envio de trabajos es similar al anterior svg. Trabajos secuenciales: qsub -l arch=amd,num_proc=1,s_rt=10:00:00,s_vmem=2G,h_fsize=20G trabajo.sh Trabajos paralelos: qsub -l arch=amd,num_proc=1,s_rt=010:00:00,s_vmem=2G,h_fsize=20G -pe mpi 6 test.sh Debe tenerse en cuenta que los trabajos paralelos se ejecutan dentro de un único nodo y por tanto están restringidos a 24 slots mpi como máximo. Los limites son los siguientes (por trabajo): Maxima cantidad de memoria: 63GB Maximo numero de cores: 24 Maximo tamaño de scratch: 700GB Sistemas de ficheros: El sistema SFS esta accesible desde la actualizacion del SVG a traves del directorio /sfs/$HOME Para transferir datos entre Finis Terrae y SVG, el home del SVG esta accesible desde el Finis Terrae en el directorio $HOMESVG Compiladores y herramientas de desarrollo: Combinaciones de compiladores, librerías BLAS/LAPACK y MPI disponibles: Compiladores Open64. OPEN64 (RECOMENDADO) Compiladores de PGI. PGI Compiladores de intel. Intel Compiladores GNU. GNU OPEN64 (RECOMENDADO): 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. -fb-create Activa optimizaciones profile-guided (dirigidas por retroalimentación). Requiere compilaciones separadas. -fb-opt -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 doublecomplex. 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 Activa optimizaciones dirigidas por retroalimentación del perfil. -Mpfo -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 Intel Uso habitual en el CESGA GNU Uso habitual en Scientific Linux 6 Referencias: http://developer.amd.com/Assets/CompilerOptQuickRef-61004100.pdf