现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。
SPECFEM3D Globe 用于模拟全球和大陆范围区域的地震波传播。通过此应用程序,研究人员可以分析压缩波速度、剪切波速度、密度、旋转和自重的横向变化对 3D 地壳模型的影响。
最新版本 7.0 基于自动的源到源转换库,提供对 OpenCL 和 CUDA 硬件加速器的 GPU 显卡支持。
SPECFEM3D Globe 在单个 NVIDIA® Tesla® P100 GPU 上的运行速度提升超过 25 倍,可以帮助科学家将地震模拟时间从几周缩短为几小时。
SPECFEM3D_GLOBE 应在支持 MPI 的任何平台上工作。出于达到本指南的目的,我们建议使用以下配置:
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 cleanmake
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=1NEX_XI=96NEX_ETA=96NPROC_XI=2 # 注意 2x2 对应 4 GPU 用例NPROC_ETA=2GPU_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. 运行求解器
10. 查看求解器输出的结尾部分,以确定程序花费的运行时间
tail OUTPUT_FILES/output_solver.txt
请注意,网格化步骤不支持 GPU 加速,且实际上此步骤完成一次后,系统可能会将输出用于很多(求解器步骤)模拟。这正是仅将求解器步骤的定时用于基准测试的原因。
本节提供了不同的单节点和多节点系统的预期性能基准测试。