LAMMPS 软件是分子动力学领域应用广泛的科学计算软件,该软件支持 GPU 加速,包含 GPU 模块和 USER-CUDA 模块。
1. USER-GPU 包
USER-CUDA 附加模块包是由 Christian Trott(Sandia) 在德国的 U Technology IImenau 开发的,它支持英伟达 GPU 版本的众多 pair 类型、fix 类型、少量 compute 类型以及长程库仑力计算的 PPPM 命令,包含特点如下:
- 该包被设计为允许完全的 LAMMPS 计算,如多时步迭代时,完全在 GPU 上运行(除非进程间的 MPI 通信),以致基于粒子的数据(如坐标,力)并不需要在 CPU 和 GPU 间来回传递。
- 当每个 GPU 核上的粒子数大的时候,该方法的加速优势会得到充分体现。
- 数据将会保留在 GPU 上,直到触发到有 non-USER-CUDA fix 或 compute 的时步。当 non-GPU 操作出现时(fix,compute,output)出现时,数据会自动传回 CPU。这种行为会引发性能损失,但显然可以正常运行。
- 邻居列表在 GPU 上构造。
- 该包仅支持单进程 MPI 任务,在一个 CPU 核上运行,然后分配到每个 GPU 核上。
如何使用 USER-CUDA 包:
- 在 lib/cuda 文件夹中编译支持你 GPU 硬件特定精度的 cude 库文件
- 包含 USER-CUDA 包(make yes-USER-CUDA),编译 LAMMPS
- 使用 mpirun 命令指定每个 GPU 一个进程任务(每个结点)
- 通过”-c on“命令开关确保 USER-CUDA 包可以正常使用
- 指定每个结点的 GPU 数
- 在输入脚本中使用 USER-CUDA 类型的关键字
最后两步可以单独通过”-p cuda“和”-sf cuda“命令开关,或者”-pk“或”-sf“开关的效果和在输入文件(input)天剑 package cuda 或 suffix cuda 的命令时一样的。
2. GPU 包
GPU 包是由 ORNL 的 Mike Brown 以及他们合作者 Trung Nguyen(PRNL) 开发的。它支持 GPU 版本的众多 pair 类型(包括 3 - 体 Stillinger-Weber 势类型),以及支持长程库伦力的 Kspace_style pppm。包含特点如下:
- 被设计为利用通用 GPU 硬件(有一块或多块 GPU 卡连接一块或多块多核 CPU),如在一个结点上的并行机器;
- 基于粒子的数据(如坐标,力)在 CPU 和 GPU 之间每一时步会来回传递数据;
- 邻居列表可以在 CPU 端或 GPU 端构建
- PPPM 的电荷分配和力的插值部分可以在 GPU 端运行,进程间需要 MPI 通信的 FFT 部分在 CPU 端计算
- 异步力计算可以同时在 CPU 端和 GPU 端进行
- 允许 GPU 端进行单 / 双 / 混合精度,对势力以单精度计算,但累加为双精度力向量;
- GPU 特定的代码在 GPU 包中,它在 lib/GPU 文件夹中引发 GPU 库,这一库支持 NVIDIA 以及 OepnCL,因此同样的功能在不同的 GPU 硬件上可以得到支持。
GPU 包的使用方法: