SPECFEM3D Cartesian
mit Grafikprozessorbeschleunigung

Anleitung für grafikprozessorfähige Anwendungen lesen und direkt beginnen

SPECFEM3D Cartesian

SPECFEM3D Cartesian wird zur Simulation der Verbreitung von akustischen (in Flüssigkeiten), elastischen (in Feststoffen), poroelastischen, seismischen, oder akustisch-elastisch gekoppelten Wellen auf Hexaedergittern (strukturiert und unstrukturiert) verwendet. Mit der Software lassen sich beispielsweise seismische Wellen nach einem Erdbeben simulieren, die sich in Sedimentbecken, oder in anderern geologischen Modellen ausbreiten. Es kann auch für zerstörungsfreie Tests oder die akustische Simulation der Ozeane benutzt werden

SPECFEM3D Cartesian läuft auf einem Knoten mit dem NVIDIA® Tesla® P100 bis zu 38-mal schneller als auf einem rein CPU-basierten System. Dadurch lassen sich Simulationen innerhalb weniger Stunden anstatt mehrerer Wochen durchführen.

SPECFEM3D Cartesian: 38-fache Beschleunigung mit Grafikprozessoren

Installation

Systemanforderungen

SPECFEM3D_Cartesian kann auf jede parallele Plattform mit modernem Compiler für C und Fortran und einer aktuellen MPI-Implementierung portiert werden.

Optional ist der Quellcode über git verfügbar.

Download‑ und Installationsanleitung

   1. Laden Sie den Quellcode für SPECFEM3D_Cartesian herunter. Die aktuelle Version des Codes erhalten Sie mithilfe von

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. nvcc, gcc und gfortran müssen in Ihrem System und unter Ihrem Pfad verfügbar sein. Wenn sie nicht verfügbar sind, wenden Sie sich an Ihren Systemadministrator. Zum Erstellen benötigen Sie MPI mpicc und unter dem Pfad mpif90.

Die Leistung bei einer Ausführung auf rein CPU-basierten Systemen sowie bei der Generierung der Datenbank hängt stark vom gewählten Compiler ab. Der PGI-Compiler ist bei der Generierung der Datenbank viel schneller als beispielsweise gfortran. Bei der xspecfem3d-Simulation ist er geringfügig schneller, wenn ein reines CPU-System verwendet wird. Auf die Leistung der xspecfem3d-Simulation bei Verwendung von Grafikprozessoren hat dieser Compiler hingegen keine nennenswerten Auswirkungen.

3. Konfigurieren Sie das Paket.

./configure --with-cuda=cuda8

Auf Geräten mit Compute Capability 6.0 oder höher wird dadurch eine ausführbare Datei erstellt.

  5. Erstellen Sie das Programm.

make

Befehlsausführung

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.

muss in „Par_data“ festgelegt werden. Andernfalls lässt sich das Programm nicht auf Grafikprozessoren ausführen.

Die Befehlsausführung erfolgt dann in drei Schritten. In unserem Beispiel werden vier Aufgaben ausgeführt. In allen drei Schritten ist die gleiche Anzahl an MPI-Prozessen auszuführen. Bei der Ausführung auf Grafikprozessoren wird pro Grafikprozessor ein MPI-Prozess ausgeführt. Auf reinen CPU-Systemen wird typischerweise eine MPI-Prozess pro Kern ausgeführt. „Par_file“ und „Mesh_Par_file“ müssen an die jeweiligen Bedingungen angepasst werden.

1. Führen Sie die In-House Gebietszerlegung aus.

mpirun -np 4 ./bin/xmeshfem3D

2. Generieren Sie die Datenbanken.

mpirun -np 4 ./bin/xgenerate_databases

3. Führen Sie die Simulation durch.

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. Kopieren Sie „input_cartesian_v4.tar“ in den Stammordner für die specfem3d-Installation.

cp input_cartesian_v4.tar specfem3d

4. Wechseln Sie in das SPECFEM-Stammverzeichnis.

cd specfem3d

5. Extrahieren Sie die verschiedenen PAR-Dateien (Par_files) aus der tar-Datei.

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. Wechseln Sie in das DATA-Verzeichnis.

cd DATA

7. Kopieren Sie die Datei, die der Anzahl der zu verwendenden Grafikprozessoren entspricht, in „Par_data“, z. B. für die Version mit vier Grafikprozessoren.

cp Par_file_4_proc Par_file

8. Wechseln Sie in das Verzeichnis „meshfem3D_files“.

cd meshfem3D_files

9. Kopieren Sie die Datei, die der Anzahl der zu verwendenden Grafikprozessoren entspricht, in „Mesh_par_file“, z. B. für die Version mit vier Grafikprozessoren.

cp Mesh_Par_file_4_proc_288x256 Mesh_Par_file

10. Wechseln Sie zurück zum Basisverzeichnis.

cd ../..

11. Entfernen Sie die alte Version von OUTPUT_FILES sowie die DATABASES_MPI-Dateien. Sie können zum Speichern einen anderen Pfad festlegen. In den folgenden Durchläufen werden die Dateien im Ordner OUTPUT_FILES jedoch überschrieben.

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

12. Führen Sie die In-House Gebietszerlegung aus.

mpirun -np 4 ./bin/xmeshfem3D

13. Generieren Sie die Datenbanken.

mpirun -np 4 ./bin/xgenerate_databases

14. Führen Sie die Simulation durch.

mpirun -np 4 ./bin/xspecfem3D

15. Überprüfen Sie die Datei „output_solver.txt“, die Sie im Ordner OUTPUT_FILES finden. Die Leistungskennzahl steht in dieser Datei unter „Total elapsed time“ (Insgesamt verstrichene Zeit).

grep "Total elapsed time" OUTPUT_FILES/output_solver.txt

Der Mesher-Schritt und der Schritt zur Generierung der Datenbank sind nicht grafikprozessorbeschleunigt. Sie werden in der Regel einmal ausgeführt und die Ausgabe kann dann für viele Simulationen (Solver-Schritte) verwendet werden. Daher basiert der Benchmark ausschließlich auf der Zeit für den Solver-Schritt.

Erwartete Leistungsergebnisse

In diesem Abschnitt finden Sie die Benchmarks für die erwartete Leistung auf verschiedenen Systemen mit einem oder mehreren Knoten.

SPECFEM3D Cartesian – Leistung bei einer Skalierung mit mehreren Grafikprozessoren
SPECFEM3D Cartesian: 38-fache Beschleunigung mit Grafikprozessoren
SPECFEM3D Cartesian: 10- bis 40-fache Beschleunigung

Empfohlene Systemkonfigurationen

Hardwarekonfiguration

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

Softwarekonfiguration

Software stack

Parameter
Version

OS

CentOS 7.3

GPU Driver

375.20 or newer

CUDA Toolkit

8.0 or newer

PGI Compliers

16.9

Ihre ideale Grafikprozessorlösung