SPECFEM3D Cartesian
con accelerazione tramite GPU

Inizia subito con questa guida per applicazioni basate su GPU.

SPECFEM3D Cartesian

SPECFEM3D Cartesian simula la propagazione di onde acustiche (fluido), elastiche (fluido), acustiche ed elastiche accoppiate, poroelastiche o sismiche in qualunque tipo di mesh uniformi di esaedri (strutturate o meno). È in grado, ad esempio, di modellare la propagazione di onde sismiche in bacini sedimentari o creare qualunque altro modello geologico locale a seguito di un terremoto. Può essere utilizzato, ad esempio, per l'esecuzione di prove non distruttive o per l'acustica negli oceani.

SPECFEM3D Cartesian è almeno 38 volte più veloce su un nodo NVIDIA® Tesla® P100 rispetto a un sistema solo con CPU, per cui le simulazioni richiedono ore e non giorni.

SPECFEM3D Cartesian è 38 volte più veloce con le GPU

Installazione

Requisiti di sistema

SPECFEM3D_Cartesian dovrebbe essere trasferibile su qualunque piattaforma con un moderno compilatore C e Fortran con una recente implementazione MPI.

Per ottenere il codice sorgente può essere utilizzato anche git.

Istruzioni di download e di installazione

   1. Scaricare il  codice sorgente di SPECFEM3D_Cartesian. La versione più recente è reperibile utilizzando

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. Accertarsi che nvcc, gcc e gfortran siano disponibili sul sistema e nel proprio path. Se non sono disponibili, rivolgersi all'amministratore del sistema. Oltre alla build con MPI mpicc, il percorso deve contenere mpif90.

Tenere presente, inoltre, che le prestazioni delle esecuzioni solo con CPU e la procedura di generazione del database dipendono dal compilatore scelto. Ad esempio, il compilatore PGI è molto più veloce del compilatore gfortran per la procedura di generazione del database ed è lievemente più veloce se si utilizza solo la CPU per la simulazione xspecfem3d. Se si utilizza la GPU, gli effetti sulle prestazioni della simulazione xspecfem3d non sono significativi.

3. Configurare il pacchetto

./configure --with-cuda=cuda8

Tenere presente che verrà eseguita la build di un file eseguibile per dispositivi Compute Capability 6.0 o superiore.

  5. Eseguire la build del programma

make

Esecuzione di processi

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.

è impostato in Par_data, altrimenti il programma non verrà eseguito sulle GPU.

L'esecuzione dei processi, quindi, è un processo costituito da tre stadi. Di seguito è riportato l'esempio di esecuzione in 4 attività. Tenere presente che tutte e tre le fasi devono essere eseguite con lo stesso numero di attività MPI. Per esecuzioni con GPU, verrà utilizzata 1 attività MPI per ogni GPU. Per esecuzioni solo con CPU, generalmente si utilizzerà 1 attività MPI per ogni core. Per ogni caso particolare è necessario modificare Par_file e Mesh_Par_file.

1. Eseguire il mesher interno

mpirun -np 4 ./bin/xmeshfem3D

2. Generare i database

mpirun -np 4 ./bin/xgenerate_databases

3. Eseguire la simulazione

mpirun -np 4 ./bin/xspecfem3D

Benchmark

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. Copiare il file input_cartesian_v4.tar nella cartella di installazione radice specfem3d

cp input_cartesian_v4.tar specfem3d

4. Accedere alla directory radice SPECFEM

cd specfem3d

5. Estrarre i vari Par_files dal file 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. Accedere alla directory DATA

cd DATA

7. Copiare il file corrispondente al numero di GPU da utilizzare per l'esecuzione in Par_data, ad esempio per la versione con 4 GPU

cp Par_file_4_proc Par_file

8. Accedere alla directory meshfem3D_files

cd meshfem3D_files

9. Copiare il file corrispondente al numero di GPU da utilizzare per l'esecuzione in Mesh_par_file, ad esempio per la versione con 4 GPU

cp Mesh_Par_file_4_proc_288x256 Mesh_Par_file

10. Tornare alla directory base

cd ../..

11. Rimuovere i vecchi file OUTPUT_FILES e DATABASES_MPI. Tenere presente che potrebbe essere necessario salvarli in una nuova posizione, in quanto le esecuzioni successive sovrascrivono i file nella cartella OUTPUT_FILES.

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

12. Eseguire il mesher interno

mpirun -np 4 ./bin/xmeshfem3D

13. Generare i database

mpirun -np 4 ./bin/xgenerate_databases

14. Eseguire la simulazione

mpirun -np 4 ./bin/xspecfem3D

15. Esaminare il file output_solver.txt contenuto nella cartella OUTPUT_FILES. La metrica delle prestazioni è il tempo totale trascorso ("Total elapsed time") indicato in questo file.

grep "Total elapsed time" OUTPUT_FILES/output_solver.txt

Tenere presente che il mesher e le procedure di generazione dei database non sono accelerate tramite GPU; l'operazione, in pratica, viene eseguita una sola volta, dopo di che l'output può essere utilizzato per numerose simulazioni (fase solutore), in quanto per il benchmark viene utilizzato il timing della sola fase solutore.

Risultati previsti

Questa sezione fornisce i benchmark delle prestazioni previste per vari sistemi a nodo singolo e a nodi multipli.

Ottimizzazione delle prestazioni di SPECFEM3D Cartesian con più GPU
SPECFEM3D Cartesian è 38 volte più veloce con le GPU
SPECFEM3D Cartesian è da 10 a 40 volte più veloce

Configurazioni del sistema consigliate

Configurazione hardware

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

Configurazione software

Software stack

Parameter
Version

OS

CentOS 7.3

GPU Driver

375.20 or newer

CUDA Toolkit

8.0 or newer

PGI Compliers

16.9

Crea la tua soluzione GPU ideale oggi stesso.