SPECFEM3D Cartesian avec accélération GPU

Exploitez le plein potentiel de SPECFEM3D Cartesian avec notre guide de démarrage pour application GPU.

SPECFEM3D Cartesian

SPECFEM3D Cartesian simule la propagation des ondes sismiques, acoustiques (fluides), élastiques (solides), mixtes ou poroélastiques pour tout type de maillage hexaèdre, qu’il soit structuré ou non. Vous pouvez par exemple modéliser la propagation des ondes sismiques dans les bassins sédimentaires ou tout autre modèle géologique affecté par les séismes. SPECFEM3D Cartesian permet également d’effectuer des tests non-destructifs ou de simuler l’acoustique océanique.

SPECFEM3D Cartesian offre des performances jusqu’à 38 fois plus rapides avec les GPU NVIDIA® Tesla® P100 qu’avec les systèmes uniquement basés sur le traitement CPU*, ce qui permet de réduire la durée des simulations de plusieurs jours à quelques heures seulement.

SPECFEM3D Cartesian offre des performances jusqu’à 38 fois plus rapides grâce aux GPU NVIDIA

Installation

Configuration requise

SPECFEM3D_Cartesian est portable sur toute plateforme parallèle dotée d’un compilateur C ou Fortran moderne et d’une implémentation MPI récente.

Vous pouvez également obtenir son code source via git.

Instructions de téléchargement et d’installation

   1. Téléchargez le code source de SPECFEM3D_Cartesian. Vous pouvez obtenir la version la plus récente avec la commande suivante :

git clone --recursive --branch devel

You can also find instructions to get earlier/release versions and user manual and various user resources from: https://geodynamics.org/cig/software/specfem3d/

2. Assurez-vous que nvcc, gcc et gfortran sont disponibles sur votre système et dans votre chemin d’accès. S’ils ne sont pas disponibles, veuillez contacter votre administrateur système. Outre MPI mpicc, votre chemin d’accès doit comprendre mpif90.

Veuillez également noter que les performances des versions basées sur le traitement GPU et que les délais de génération de la base de données peuvent varier suivant le compilateur que vous avez choisi. Le compilateur PGI est par exemple bien plus rapide que le compilateur gfortran pour la génération de la base de données, et sensiblement plus rapide pour le traitement CPU de la simulation xspecfem3d. Le choix du compilateur n’entraîne aucun écart de performance significatif pour le traitement GPU de la simulation xspecfem3d.

3. Configurez le pack.

./configure --with-cuda=cuda8

Cette commande va créer un fichier exécutable pour les dispositifs compatibles avec les capacités de calcul 6.0 ou plus.

  5. Construisez le programme.

make

Exécution

Running jobs requires modifying the parameter files that define the simulation. There is a specific example described in the benchmarking section based on the “simple model” example found in “specfem3d/EXAMPLES/meshfem3D_examples/simple_model”.

The parameter files are found in the “DATA” folder. Make sure that DATA/Par_file and DATA/meshfem3D_files/Mesh_Par_file are set correctly. Note particularly that the number of MPI tasks (NPROC) must be set in DATA/Par_file and the number of tasks in each direction (NPROC_XI and NPROC_ETA) must be set in DATA/meshfem3D_files/Mesh_Par_file. It is also important that

GPU_MODE = .true.

soit activé dans le fichier Par_data, auquel cas le programme ne pourra pas être exécuté avec des GPU.

L’exécution des tâches implique un processus en trois phases. Pour ce cas d’utilisation, nous allons exécuter un total de quatre tâches. Veuillez noter que les trois phases doivent utiliser le même nombre de tâches MPI. Pour les versions GPU, nous allons utiliser 1 tâche MPI par GPU. Pour les versions exclusivement CPU, il faut utiliser 1 tâche MPI par cœur. Les fichiers Par_file et Mesh_Par_file doivent être modifiés pour chaque cas d’utilisation.

1. Exécutez le mesher interne.

mpirun -np 4 ./bin/xmeshfem3D

2. Générez les bases de données.

mpirun -np 4 ./bin/xgenerate_databases

3. Exécutez la simulation.

mpirun -np 4 ./bin/xspecfem3D

Benchmarks

This section walks through the process of testing the performance on your system and shows performance on a typical configuration. The example described here is based on the “simple model” example found in “specfem3d/EXAMPLES/meshfem3D_examples/simple_model”.

1. Download and install the program as described in the Installation section

2. Download the SPECFEM3D_Cartesian_GPU_READY_FILES_v2.tgz and extract the file. This file includes example scripts that build specfem3d and run this example by running “build_run_specfem3d_cartesian.sh”. It would need small modifications to paths/env modules etc used to run on different system. The remaining steps below describe step by step running the 4 GPU test case specifically. The included scripts will run cases for 1,2,4 GPUs and 32 or 36 CPU cores and can be reviewed for additional details.

tar -xzvf SPECFEM3D_Cartesian_GPU_READY_FILES_v2.tgz

3. Copiez le fichier input_cartesian_v4.tar dans votre répertoire d’installation root specfem3d.

cp input_cartesian_v4.tar specfem3d

4. Accédez au répertoire root SPECFEM.

cd specfem3d

5. Extrayez les divers fichiers Par_files à partir de l’archive tar.

tar -xvf input_cartesian_v4.tar

This will extract variations of the data files into the DATA and DATA/Meshfem3D_files directory in your SPECFEM3D Cartesian installation, and update the STATIONS, FORCE SOLUTION and CMTSOLUTION files. We include files for 1 GPU, 2 GPUs and 4 GPUs and for 36 CPUs. The problem size has been increased slightly to increase the run time. Note also that there are restrictions in the number of MPI tasks that can be used. More information can be found in the DATA/Par_file. The NPROC variables will change depending on whether the run uses 1 GPU (1x1), 2 GPUs (2x1), 4 GPUs (2x2) or 36 CPU cores (9x4). Also note that the example described below corresponds to mesh size 288x256 for the 36 core CPU. Example files included in the input_cartesian.tar file also include Mesh_Par_file examples for 256x256 which can be used for a 32 core CPU case. Other variations could be created for different core counts. The rules for valid sizes as described in the Mesh_Par_file.

Par_file:

NPROC              = 4     # changes depending on num GPUs or cpu cores used
NSTEP              = 10000
DT                 = 0.01
GPU_MODE           = .true.     # change to .false. For cpu only run

DATA/meshfem3D_files/Mesh_Par_file:
NEX_XI             = 288
NEX_ETA            = 256
# number of MPI processors along xi and eta (can be different)
NPROC_XI           = 2     # 2x2 for 4 GPU example
NPROC_ETA          = 2
NREGIONS           = 4
# define the different regions of the model as :
#NEX_XI_BEGIN #NEX_XI_END #NEX_ETA_BEGIN #NEX_ETA_END #NZ_BEGIN #NZ_END #material_id
1      288      1     256      1      4      1
1      288      1     256      5      5      2
1      288      1     256      6      15     3
14     25       7     19       7      10     4

6. Accédez au répertoire DATA.

cd DATA

7. Copiez le fichier correspondant au nombre de GPU que vous voulez utiliser avec Par_data (l’exemple ci-après est donné pour la configuration à 4 GPU).

cp Par_file_4_proc Par_file

8. Accédez au répertoire meshfem3D_files.

cd meshfem3D_files

9. Copiez le fichier correspondant au nombre de GPU que vous voulez utiliser avec Mesh_par_file (l’exemple ci-après est donné pour la configuration à 4 GPU).

cp Mesh_Par_file_4_proc_288x256 Mesh_Par_file

10. Revenez au répertoire de base.

cd ../..

11. Retirez les anciens fichiers OUTPUT_FILES et DATABASES_MPI. Vous pouvez procéder à la sauvegarde dans un nouvel emplacement ; les versions ultérieures vont écraser les fichiers qui se trouvent dans le dossier OUTPUT_FILES.

rm OUTPUT_FILES -r
mkdir OUTPUT_FILES
rm DATABASES_MPI -r
mkdir DATABASES_MPI

12. Exécutez le mesher interne.

mpirun -np 4 ./bin/xmeshfem3D

13. Générez les bases de données.

mpirun -np 4 ./bin/xgenerate_databases

14. Exécutez la simulation.

mpirun -np 4 ./bin/xspecfem3D

15. Consultez le fichier de sortie output_solver.txt qui se trouve dans le dossier OUTPUT_FILES. La métrique de performance correspond à la ligne "Total elapsed time".

grep "Total elapsed time" OUTPUT_FILES/output_solver.txt

Veuillez noter que les étapes relatives au mesher et à la génération des bases de données n’exploitent pas l’accélération GPU et que, en pratique, elles doivent être réalisées une seule fois avant de réutiliser le fichier de sortie pour les simulations suivantes. Cela explique pourquoi seule la durée relative au mesher est utilisée à des fins de benchmark.

Résultats attendus

Cette section vous fournit les performances prévisionnelles de différents benchmarks avec des systèmes à nœud unique ou à nœuds multiples.

SPECFEM3D Cartesian - Performances multi-GPU
SPECFEM3D Cartesian offre des performances jusqu’à 38 fois plus rapides grâce aux GPU NVIDIA
SPECFEM3D Cartesian – Performances 10 à 40 fois plus rapides

Configuration système recommandée

Configuration matérielle

PC

Parameter
Specs

CPU Architecture

x86

System Memory

16-32GB

CPUs

2 (10+ cores, 2 GHz)

GPU Model

GeForce® GTX TITAN X

GPUs

1-4

Servers

Parameter
Specs

CPU Architecture

x86

System Memory

64GB

CPUs/Node

2 (10+ cores, , 2+ GHz)

Total # of Nodes

1

GPU Model

NVIDIA®Tesla® P100,
Tesla® K80

GPUs/Node

1-4

Configuration logicielle

Software stack

Parameter
Version

OS

CentOS 7.3

GPU Driver

375.20 or newer

CUDA Toolkit

8.0 or newer

PGI Compliers

16.9

Déployez votre solution GPU personnalisée.