GPU 加速的
SPECFEM3D Globe

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

SPECFEM3D Globe

SPECFEM3D Globe 用于模拟全球和大陆范围区域的地震波传播。通过此应用程序,研究人员可以分析压缩波速度、剪切波速度、密度、旋转和自重的横向变化对 3D 地壳模型的影响。

最新版本 7.0 基于自动的源到源转换库,提供对 OpenCL 和 CUDA 硬件加速器的 GPU 显卡支持。

SPECFEM3D Globe 在单个 NVIDIA® Tesla® P100 GPU 上的运行速度提升超过 25 倍,可以帮助科学家将地震模拟时间从几周缩短为几小时。

SPECFEM3D Globe 在 GPU 上的运行速度提高 25 倍

安装

系统要求

SPECFEM3D_GLOBE 应在支持 MPI 的任何平台上工作。出于达到本指南的目的,我们建议使用以下配置:

  • 操作系统:Centos 7 或更高版本
  • CUDA 8.0(用于 NVIDIA Pascal™ GPU)
  • 最新的 C 和 Fortran 编译器
  • 支持计算能力 3.0 或更高版本的 NVIDIA GPU

下载和安装说明

   1.下载 SPECFEM3D_Globe 7.0.0 源代码

   2.解压缩软件包

tar xf SPECFEM3D_GLOBE_V7.0.0.tar.gz

3.必需的编译器

确保 nvcc、gcc 和 gfortran 在系统上可用并且位于您的路径中。如果不可用,请联系系统管理员。

4.配置软件包

./configure --with-cuda=cuda5

请注意,这里我们所做的配置,可使用 CUDA 5.0 及更高版本中更多最新的 CUDA 汇集。

  5.构建程序

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.

运行作业

运行 SPECFEM3D Globe 的过程分为两个阶段。首先,必须创建用于解决最终问题的网格。然后,可以运行求解器以生成最终解决方案。

请注意,由于某些数组具有静态大小,因此如果对用于设置某些参数的 DATA/Par_file 进行了任何更改,必须对程序进行重新编译。

1.更新 DATA/Par_file 及剩余数据文件。 
要使用 GPU,必须将 DATA/Par_file 中的 GPU_MODE 参数设置为 .true,这一点至关重要

2.重新构建程序。请注意,由于程序使用静态数组大小,因此 Par_file 中发生任何更改都要求重新构建程序。

make clean
make

3.运行网格化(在本例中,我们将在 4 个 GPU 上运行 4 项 MPI 任务)

mpirun -np 4 bin/xmeshfem3D

4. 运行主程序

mpirun -np 4 bin/xspecfem3D

基准

本节介绍了测试系统性能的过程,并展示典型配置的性能。

1.按照安装部分中描述的内容下载并安装程序

2. 下载 包含所需输入文件的 tar 文件

3.切换到根 SPECFEM 目录

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

tar -xf parfiles.tar

此命令会将数据文件解压缩到 SPECFEM 安装的 DATA 目录中,并更新 STATIONS 和 CMTSOLUTION 文件。我们提供用于 1 个 GPU、2 个 GPU 、4 个 GPU 以及 36 个 CPU 的文件。我们要使用的示例是“global_s362ani_shakemovie”示例的修改版本,它随 SPECFEM3D Globe 分发。减小了问题大小,因此更适用于一个节点。还需要注意的是,可以使用的 MPI 任务的数量存在限制。NPROC 变量将发生更改,具体取决于运行使用 1 个 GPU (1x1)、2 个 GPU (2x1)、4 个 GPU (2x2) 还是 36 个 CPU 核心 (6x6)。

对之下的原始 Par_file 所执行的关键更改如下所示:

NCHUNKS=1
NEX_XI=96
NEX_ETA=96
NPROC_XI=2      # 注意 2x2 对应 4 GPU 用例
NPROC_ETA=2
GPU_MODE=.true.      # 注意 .false.适用于仅 CPU 用例

这些更改可减小模拟大小,启用/禁用 GPU 加速并且还可以调整每个测试用例所需的 MPI 进程(每个 GPU 使用 1 个)的数量。可以在 Par_file 中找到更多信息。

5. 切换到 DATA 目录

cd DATA

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

cp Par_file_96x96_100_4GPU Par_file

7. 切换回基本目录

cd ..

8. 重做程序并运行网格化。由于程序使用静态数组大小,因此每次更改 Par_file 时,必须重新编译程序。

make clean
make
mpirun -np 4 bin/xmeshfem3D

9. 运行求解器

mpirun -np 4 bin/xspecfem3D

10. 查看求解器输出的结尾部分,以确定程序花费的运行时间

tail OUTPUT_FILES/output_solver.txt

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

预期性能结果

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

SPECFEM3D Globe 多 GPU 扩展性能
SPECFEM3D Globe 多 GPU 扩展性能
SPECFEM3D Globe 在 GPU 上的运行速度提高 25 倍

推荐的系统配置

硬件配置

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 解决方案。