SPECFEM3D Globe
acelerado por GPU

Empieza hoy mismo con esta Guía para aplicaciones preparadas para GPU.

SPECFEM3D Globe

SPECFEM3D Globe simula la propagación de ondas sísmicas a escala regional y continental. Esta aplicación permite que los investigadores analicen los efectos de las variaciones laterales en la velocidad de ondas compresionales, velocidad de ondas de corte, densidad, rotacional y autogravitación en un modelo 3D de la corteza.

La última versión, 7.0, que ofrece compatibilidad para tarjetas gráficas GPU y aceleradores hardware OpenCL y CUDA, está basada en una biblioteca de transformación fuente a fuente automática.

SPECFEM3D GLOBE se ejecuta 25 veces más rápido en una GPU NVIDIA® Tesla® P100, lo que permite que los científicos ejecuten las simulaciones sísmicas en horas en lugar de semanas.

SPECFEM3D Globe ofrece una aceleración 25 veces mayor con GPU

Instalación

Requisitos del sistema

SPECFEM3D_GLOBE funciona en todas las plataformas con soporte MPI. A efectos de esta guía, sugerimos la configuración a continuación:

  • Sistema operativo: CentOS 7 o posterior
  • CUDA 8.0 para GPU NVIDIA Pascal™
  • Un compilador moderno de C y Fortran
  • Capacidad de computación para GPU NVIDIA 3.0 o superior.

Instrucciones de descarga e instalación

   1. Descarga el código fuente de SPECFEM3D_Globe 7.0.0

   2. Extrae el paquete

tar xf SPECFEM3D_GLOBE_V7.0.0.tar.gz

3. Compiladores necesarios

Asegúrate de que nvcc, gcc y gfortran estén disponibles en el sistema y en la ruta. Si no están disponibles, ponte en contacto con el administrador del sistema.

4. Configura el paquete

./configure --with-cuda=cuda5

Ten en cuenta que lo configuramos para usar las uniones CUDA más modernas en CUDA 5.0 o posterior.

  5. Compila el programa

make

Ten en cuenta que, al probar las GPU TESLA P100 con specfem3d_globe-7.0.0, se ha observado que los pasos de adopción y configuración que se describen en la guía darían lugar a una compilación de un binario que usa los modificadores nvcc de CUDA “-gencode=arch=compute_35,code=\"sm_35,compute_35\"”. Para ejecutarlo en las GPU P100, un usuario normalmente editaría el archivo Make que ha generado la configuración (o bien makefile.in antes de ejecutar la configuración) de forma que esté seleccionado sm_60 en lugar de sm_35. Cuando se hace con specfem3d_globe-7.0.0, el binario sm_60 resultante es en realidad un poco más lento al ejecutarse en P100 en comparación con el binario sm_35 predeterminado. Se trata de una situación inesperada y estamos investigándola.

Ejecución de trabajos

La ejecución de SPECFEM3D Globe consiste en un proceso de dos fases. Primero, hay que crear la malla usada para solucionar el problema final. Después, se puede ejecutar el solucionador para generar la solución final.

Ten en cuenta que algunas matrices están ordenadas estáticamente, si se aplican cambios a DATA/Par_file (que establece algunos parámetros), hay que recompilar el programa.

1. Actualiza DATA/Par_file y los archivos de datos restantes. 
Es vital que, para usar las GPU, el parámetro GPU_MODE en DATA/Par_file se establezca en .true.

2. Vuelve a compilar el programa. Ten en cuenta que, como el programa usa tamaños de matriz estáticos, los cambios a Par_file obligan a que el programa sea recompilado.

make clean
make

3. Ejecuta el reticulador (en este caso, ejecutamos cuatro tareas MPI en cuatro GPU).

mpirun -np 4 bin/xmeshfem3D

4. Ejecuta el programa principal.

mpirun -np 4 bin/xspecfem3D

Pruebas de referencia

En esta sección, se explica el proceso para probar el rendimiento del sistema y se muestra el rendimiento en una configuración típica.

1. Descarga e instala el programa tal y como se describe en la sección Instalación.

2. Descarga el archivo tar con los archivos de entrada necesarios.

3. Cambia al directorio raíz SPECFEM.

4. Extrae los diferentes archivos Par_files del archivo tar.

tar -xf parfiles.tar

Este comando extraerá los archivos de datos en el directorio DATA de la instalación de SPECFEM y actualizará los archivos STATIONS y CMTSOLUTION. Incluimos archivos para una, dos y cuatro GPU y para 36 CPU. El ejemplo que utilizamos es una versión modificada del ejemplo “global_s362ani_shakemovie” distribuido con SPECFEM3D Globe. El tamaño del problema ha sido reducido para que funcione mejor en un nodo. Ten en cuenta que también hay restricciones en el número de tareas MPI que se pueden usar. Las variables de NPROC cambiarán en función de si la ejecución usa una GPU (1 × 1), dos GPU (2 × 1), cuatro GPU (2 × 2) o 36 núcleos de CPU (6 × 6).

Los cambios más importantes realizados en el archivo Par_file original son los siguientes:

NCHUNKS=1
NEX_XI=96
NEX_ETA=96
NPROC_XI=2      # ten en cuenta que 2 × 2 se corresponde con el caso de cuatro GPU
NPROC_ETA=2
GPU_MODE=.true.      # ten en cuenta que .false. se usa para ejecuciones de una sola CPU

Estos cambios se aplican para reducir el tamaño de la simulación, activar o desactivar la aceleración por GPU y para ajustar la cantidad de procesos MPI (uno por GPU) necesarios para caso de prueba. Encontrarás más información en Par_file.

5. Cambia al directorio DATA.

cd DATA

6. Copia el archivo correspondiente a la cantidad de GPU que quieres ejecutar en Par_file. Por ejemplo, para la versión de cuatro GPU.

cp Par_file_96x96_100_4GPU Par_file

7. Vuelve al directorio base.

cd ..

8. Recompila el programa y ejecuta el mallado. Como el programa usa tamaños de matriz estáticos, cada vez que se cambia Par_file, hay que recompilar el programa.

make clean
make
mpirun -np 4 bin/xmeshfem3D

9. Ejecuta el solucionador.

mpirun -np 4 bin/xspecfem3D

10. Revisa el final de la salida del solucionador para comprobar cuánto ha tardado el programa en ejecutarse.

tail OUTPUT_FILES/output_solver.txt

Ten en cuenta que el intervalo del reticulador no está acelerado por GPU y, en la práctica, se realiza una vez y, después, el resultado puede usarse para muchas simulaciones (paso del solucionador). Por este motivo, solo el tiempo del paso de solucionador se usa para la prueba de referencia.

Resultados del rendimiento esperado

En esta sección se incluyen pruebas de referencia del rendimiento esperado en distintos sistemas de uno o varios nodos.

Rendimiento escalar de varias GPU de SPECFEM3D Globe
Rendimiento escalar de varias GPU de SPECFEM3D Globe
SPECFEM3D Globe ofrece una aceleración 25 veces mayor con GPU

Configuraciones recomendadas del sistema

Configuración de hardware

PC

Parámetro
Especificaciones

Arquitectura de CPU

x86

Memoria del sistema

16-32 GB

CPU

2 (más de 10 núcleos, 2 GHz)

Modelo de GPU

GeForce® GTX TITAN X

GPU

1-4

Servidores

Parámetro
Especificaciones

Arquitectura de CPU

x86

Memoria del sistema

64 GB

CPUs/Nodo

2 (más de 10 núcleos, más de 2 GHz)

Número total de nodos

1

Modelo de GPU

NVIDIA®Tesla® P100,
Tesla® K80

GPU/nodo

1-4

Configuración de software

Pila de software

Parámetro
Versión

SO

CentOS 7.3

Controlador de GPU

375.20 o posterior

Kit de herramientas de CUDA

8.0 o posteriores

Compiladores de PGI

16.9

Crea tu solución ideal de GPU hoy mismo.