GPU 加速的
SPECFEM3D Cartesian

现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。

SPECFEM3D Cartesian

SPECFEM3D Cartesian 用于在任何类型的六面体协调网格(结构化或非结构化)中模拟声学(流体)、弹性(固体)、耦合声学/弹性、多孔弹性或地震波传播。例如,它可以对地震后地震波在沉积盆地或任何其他区域地质模型中的传播进行建模。它也可用于非破坏性实验或海洋声学。

与仅使用 CPU 的系统相比,SPECFEM3D Cartesian 在 NVIDIA® Tesla® P100 节点上可以实现不低于 38 倍的速度提升,使用户能够将模拟运行时间从几周缩短为几小时。

SPECFEM3D Cartesian 在 GPU 上的运行速度可提高 38 倍

安装

系统要求

应将 SPECFEM3D_Cartesian 移植到任何安装有最新 C 和 Fortran 编译器及最新 MPI 实现的并行平台。

(可选)可以使用 git 获取源代码。

下载和安装说明

   1.下载 SPECFEM3D_Cartesian 源代码。可以使用以下命令获取最新版本

git clone --recursive --branch devel

您还可从以下网址找到一些关于获取先前/发行版本、用户手册及各种用户资源的说明:https://geodynamics.org/cig/software/specfem3d/

2. 确保 nvcc、gcc 和 gfortran 在系统上可用并且位于您的路径中。如果不可用,请联系系统管理员。除了使用 MPI mpicc 进行构建外,mpif90 必须存在于您的路径中。

还需要注意仅 CPU 运行的性能,且数据库生成步骤对所选择的编译器很敏感。例如,对于数据库生成步骤,PGI 编译器的速度远快于 gfortran,而对于 xspecfem3d 模拟,运行仅 CPU 用例时前者的速度仅略快于后者。在 GPU 用例中则不会对 xspecfem3d 模拟产生严重影响。

3.配置软件包

./configure --with-cuda=cuda8

请注意,这将为计算能力 6.0 或更高版本的设备构建可执行程序。

  5.构建程序

make

运行作业

运行任务需要修改用于定义模拟的参数文件。基准测试部分介绍了一个基于“specfem3d/EXAMPLES/meshfem3D_examples/simple_model”中找到的“简单模型”示例的具体示例。

可以在“DATA”文件夹中找到参数文件。请确保正确设置了 DATA/Par_file 和 DATA/meshfem3D_files/Mesh_Par_file。尤其需要注意的是,MPI 任务数量 (NPROC) 必须在 DATA/Par_file 中设置,而每个方向的任务数量(NPROC_XI 和 NPROC_ETA)必须在 DATA/meshfem3D_files/Mesh_Par_file 中设置。另外,必须

在 Par_data 中设置 GPU_MODE = .true.,

否则程序将无法在 GPU 上运行。

运行任务的过程分为三个阶段。这里我们以运行 4 项任务为例。请注意,应使用相同的 MPI 任务数运行所有 3 个阶段。对于 GPU 运行,您将对每个 GPU 使用 1 项 MPI 任务。对于仅 CPU 运行,您通常将对每个核心使用 1 项 MPI 任务。需要针对每个不同的用例修改 Par_file 和 Mesh_Par_file。

1.运行内部网格化

mpirun -np 4 ./bin/xmeshfem3D

2.生成数据库

mpirun -np 4 ./bin/xgenerate_databases

3. 运行模拟

mpirun -np 4 ./bin/xspecfem3D

基准

本节将介绍测试系统性能的过程,并展示典型配置的性能。此处描述的示例基于“specfem3d/EXAMPLES/meshfem3D_examples/simple_model”中找到的“简单模型”示例。

1.按照安装部分中所述下载并安装程序

2.下载 SPECFEM3D_Cartesian_GPU_READY_FILES_v2.tgz 并解压该文件。此文件包含用于构建 specfem3d 并通过运行“build_run_specfem3d_cartesian.sh”来运行此示例的示例脚本。需要对所使用的 paths/env 模块等执行小幅修改才能在其他系统上运行。下面的剩余步骤逐步具体描述了运行 4 个 GPU 的测试用例。所包含的脚本将为 1、2、4 个 GPU 和 32 或 36 个 CPU 核心运行用例,并且可供查看以获取其他详细信息。

tar -xzvf SPECFEM3D_Cartesian_GPU_READY_FILES_v2.tgz

3. 将 input_cartesian_v4.tar 复制您的根 specfem3d 安装文件夹

cp input_cartesian_v4.tar specfem3d

4. 切换到根 SPECFEM 目录

cd specfem3d

5. 从 tar 文件中解压缩各个 Par_file。

tar -xvf input_cartesian_v4.tar

此命令会将数据文件的各个变体解压到 SPECFEM3D Cartesian 安装的 DATA 和 DATA/Meshfem3D_files 目录中,并更新 STATIONS、FORCE SOLUTION 和 CMTSOLUTION 文件。我们提供用于 1 个 GPU、2 个 GPU 、4 个 GPU 以及 36 个 CPU 的文件。问题大小已略微增加,以增加运行时间。还需要注意的是,可以使用的 MPI 任务的数量存在限制。可以在 DATA/Par_file 中找到更多信息。NPROC 变量将发生更改,具体取决于运行使用 1 个 GPU (1x1)、2 个 GPU (2x1)、4 个 GPU (2x2) 还是 36 个 CPU 核心 (9x4)。另外,还需要注意的是,对于 36 核 CPU,以下所述示例对应的网格大小为 288x256。input_cartesian.tar 文件中包含的示例文件还包含 256x256 的 Mesh_Par_file 示例,可用于 32 核 CPU 用例。可以为不同的核心计数创建其他变体。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. 切换到 DATA 目录

cd DATA

7. 将与您要运行的 GPU 的数量对应的文件(例如,用于 4 GPU 版本的文件)复制到 Par_data

cp Par_file_4_proc Par_file

8. 切换到 meshfem3D_files 目录

cd meshfem3D_files

9. 将与您要运行的 GPU 的数量对应的文件(例如,用于 4 GPU 版本的文件)复制到 Mesh_par_file

cp Mesh_Par_file_4_proc_288x256 Mesh_Par_file

10. 切换回基本目录

cd ../..

11. 删除旧的 OUTPUT_FILES 和 DATABASES_MPI 文件。请注意,您可能希望保存到新位置,但后续运行将覆盖 OUTPUT_FILES 文件夹中的文件。

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

12. 运行内部网格化

mpirun -np 4 ./bin/xmeshfem3D

13. 生成数据库

mpirun -np 4 ./bin/xgenerate_databases

14. 运行模拟

mpirun -np 4 ./bin/xspecfem3D

15. 查看可在 OUTPUT_FILES 文件夹中找到的 output_solver.txt 文件。性能指标是在此文件中找到的“总耗用时间”。

grep "Total elapsed time" OUTPUT_FILES/output_solver.txt

请注意,网格化和生成数据库步骤不支持 GPU 加速,且实际上这些步骤完成一次后,系统可能会将输出用于很多(求解器步骤)模拟。这正是仅将求解器步骤的定时用于基准测试的原因。

预期性能结果

本节提供了不同的单节点和多节点系统的预期性能基准测试。

SPECFEM3D Cartesian 多 GPU 扩展性能
SPECFEM3D Cartesian 在 GPU 上的运行速度可提高 38 倍
SPECFEM3D Cartesian 运行速度可提高 10 到 40 倍

推荐的系统配置

硬件配置

PC

参数
规格

CPU 架构

x86

系统内存

16-32 GB

CPU 数

2(10 核以上,2 GHz)

GPU 型号

GeForce® GTX TITAN X

GPU 数

1-4

服务器

参数
规格

CPU 架构

x86

系统内存

64 GB

CPU 数/节点数

2(10 核以上,2 GHz 以上)

总节点数

1

GPU 型号

NVIDIA®Tesla® P100、
Tesla® K80

GPU 数/节点数

1-4

软件配置

软件堆栈

参数
版本

操作系统

CentOS 7.3

GPU 驱动程序

375.20 或更高版本

CUDA 工具包

8.0 或更高版本

PGI 编译器

16.9

立即构建理想的 GPU 解决方案。