SPECFEM3D-Globe
con accelerazione tramite GPU

Inizia subito con questa guida per applicazioni basate su GPU.

SPECFEM3D Globe

SPECFEM3D Globe simula la propagazione di onde sismiche locali su scala continentale e globale. Con questa applicazione i ricercatori possono analizzare gli effetti delle variazioni laterali nella velocità di un'onda di compressione, la velocità di un'onda tangenziale, la densità, la rotazione e l'autogravitazione in un modello crostale tridimensionale.

L'ultima versione 7.0 include il supporto per schede grafiche GPU per acceleratori hardware OpenCL e CUDA, sulla base di una libreria di trasformazioni source-to-source automatiche.

L'esecuzione di SPECFEM3D GLOBE è oltre 25 volte più veloce si una singola GPU NVIDIA® Tesla® P100, per cui è utile agli scienziati per l'esecuzione di simulazioni che durano ore e non settimane.

SPECFEM3D Globe è 25 volte più veloce con le GPU

Installazione

Requisiti di sistema

SPECFEM3D_GLOBE dovrebbe funzionare su qualunque piattaforma con supporto MPI. Per gli scopi di questa guida, è preferibile la seguente configurazione:

  • Sistema operativo: Centos 7 o più recente
  • CUDA 8.0 per GPU NVIDIA Pascal™
  • Moderno compilatore C e Fortran
  • GPU NVIDIA con supporto Compute Capability 3.0 o superiore

Istruzioni di download e di installazione

   1. Scaricare il  codice sorgente di SPECFEM3D_Globe 7.0.0

   2. Estrarre il pacchetto

tar xf SPECFEM3D_GLOBE_V7.0.0.tar.gz

3. Compilatori necessari

Accertarsi che nvcc, gcc e gfortran siano disponibili sul sistema e nel proprio path. Se non sono disponibili, rivolgersi all'amministratore del sistema.

4. Configurare il pacchetto

./configure --with-cuda=cuda5

Tenere presente che in questo caso la configurazione è adatta all'uso di binding CUDA più recenti in CUDA 5.0 e versioni successive.

  5. Eseguire la build del programma

make

Note in testing TESLA P100 GPUs with specfem3d_globe-7.0.0 it has been observed that the default configure and make steps described in the guide will lead to building a binary that uses CUDA nvcc flags “-gencode=arch=compute_35,code=\"sm_35,compute_35\" “. For running on P100 GPUs a user might normally edit the makefile generated by configure (or makefile.in prior to running configure) to the sm_60 is selected instead of sm_35. When this is done with specfem3d_globe-7.0.0 the resulting sm_60 binary actually slightly slower when running on P100 vs the default sm_35 binary. This is unexpected and under investigation.

Esecuzione di processi

L'esecuzione di SPECFEM3D Globe è un processo costituito da due stadi. È necessario innanzitutto creare la mesh utilizzata per risolvere il problema finale. A questo punto, può essere eseguito il solutore per generare la soluzione finale.

Tenere presente che siccome alcuni array sono dimensionati in maniera statica, eventuali modifiche in DATA/Par_file (con l'impostazione di alcuni parametri) richiedono la ricompilazione del programma.

1. Aggiornare DATA/Par_file e i file di dati rimanenti. 
Per utilizzare le GPU, è fondamentale impostare il parametro GPU_MODE in DATA/Par_file su .true

2. Eseguire nuovamente la build del programma. Tenere presente che siccome il programma utilizza array di dimensioni statiche, eventuali modifiche in Par_file richiedono una nuova build del programma.

make clean
make

3. Eseguire il mesher (in questo caso l'esecuzione avviene con 4 attività MPI su 4 GPU)

mpirun -np 4 bin/xmeshfem3D

4. Eseguire il programma principale

mpirun -np 4 bin/xspecfem3D

Benchmark

Questa sezione analizza il processo di test delle prestazioni nel sistema e descrive le prestazioni in una configurazione tipica.

1. Scaricare e installare il programma come descritto nella sezione Installazione

2. Scaricare il file tar con i file di input necessari

3. Accedere alla directory radice SPECFEM

4. Estrarre i vari Par_files dal file tar.

tar -xf parfiles.tar

In tal modo, verranno estratti i file di dati nella directory DATA nell'installazione SPECFEM e verranno aggiornati i file STATIONS e CMTSOLUTION. Sono inclusi file per 1, 2 e 4 GPU e per 36 CPU. L'esempio utilizzato è una versione modificata dell'esempio "global_s362ani_shakemovie" distribuito con SPECFEM3D Globe. La dimensione del problema è stata ridotta per adattarlo a un singolo nodo. Tenere presente, inoltre, che esistono limitazioni nel numero di task MPI utilizzabili. Le variabili NPROC cambieranno a seconda che l'esecuzione utilizzi 1 GPU (1×1), 2 GPU (2×1), 4 GPU (2×2) o 36 core di CPU (6×6).

Principali modifiche apportate a Par_file originario:

NCHUNKS=1
NEX_XI=96
NEX_ETA=96
NPROC_XI=2      # tenere presente che 2×2 corrisponde al caso con 4 GPU
NPROC_ETA=2
GPU_MODE=.true.      # .false. Per il caso solo CPU

Queste modifiche sono finalizzate a ridurre la dimensione della simulazione, abilitare/disabilitare l'accelerazione tramite GPU e regolare il numero di processi MPI (1 per ogni GPU) necessari per ogni caso di test. Ulteriori informazioni sono reperibili in Par_file.

5. Accedere alla directory DATA

cd DATA

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

cp Par_file_96x96_100_4GPU Par_file

7. Tornare alla directory base

cd ..

8. Riutilizzare make per creare il programma ed eseguire il mesher. Siccome il programma utilizza array di dimensioni statiche, eventuali modifiche di Par_file richiedono la ricompilazione del programma.

make clean
make
mpirun -np 4 bin/xmeshfem3D

9. Eseguire il risolutore

mpirun -np 4 bin/xspecfem3D

10. Esaminare la fine dell'output del solutore per controllare il tempo impiegato dall'esecuzione del programma

tail OUTPUT_FILES/output_solver.txt

Tenere presente che la fase mesher non è accelerata 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 Globe con più GPU
Ottimizzazione delle prestazioni di SPECFEM3D Global con più GPU
SPECFEM3D Globe è 25 volte più veloce con le GPU

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.