本规程旨在详细说明在 Windows Subsystem for Linux (WSL) 的 Ubuntu 环境中,从源码编译并安装大规模原子/分子并行模拟器 (LAMMPS) 的步骤。重点介绍启用 KOKKOS 软件包以支持基于 NVIDIA CUDA 技术的图形处理器 (GPU) 加速功能,同时涵盖其他常用可选软件包的集成。本规程特别强调确保编译器版本与 CUDA 版本兼容的策略。


一、系统环境准备与依赖项配置 🛠️

在启动编译之前,需确保 WSL 环境已更新,并安装所有必需的编译工具及依赖库。

1. 系统更新与基础编译工具安装

在 WSL Ubuntu 终端执行以下命令:

sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential cmake git gfortran
  • build-essential: 提供 C/C++ 编译器 (gcc, g++) 及 make 构建工具。
  • cmake: 用于配置编译流程。
  • git: 用于从 GitHub 代码仓库获取 LAMMPS 源码。
  • gfortran: Fortran 编译器,部分 LAMMPS 软件包所需。

2. MPI (消息传递接口) 库安装

LAMMPS 广泛使用 MPI 实现并行计算,推荐使用 OpenMPI:

sudo apt install -y libopenmpi-dev openmpi-bin

3. FFTW3 (快速傅里叶变换库) 安装

许多 LAMMPS 软件包 (如 KSPACE 中的 PPPM 算法) 依赖 FFTW 库:

sudo apt install -y libfftw3-dev

4. 其他常用依赖库安装

sudo apt install -y libjpeg-dev libpng-dev libgomp1 pkg-config
  • libjpeg-dev, libpng-dev: 用于图像处理功能。
  • libgomp1: GNU OpenMP 运行时库。
  • pkg-config: 辅助 CMake 定位所需库文件。

5. 确保 GCC/G++ 与 CUDA 版本兼容性 (关键步骤)

若计划使用 KOKKOS CUDA 后端,必须确保 GCC/G++ 版本与已安装的 NVIDIA CUDA Toolkit 版本兼容。例如,CUDA Toolkit 12.0 通常最高支持 GCC/G++ 12.x 版本。若系统默认 GCC 版本过高 (如 GCC 13+),需安装并指定使用兼容版本。

  • 检查当前 GCC 版本:
gcc --version
  • 安装 GCC/G++ 12 (若必要):
sudo apt update
sudo apt install -y gcc-12 g++-12

后续 CMake 配置中将指定使用 gcc-12g++-12

6. NVIDIA CUDA Toolkit for WSL 安装 (可选但推荐)

为利用 GPU 加速功能,需在 WSL2 环境中安装 NVIDIA CUDA Toolkit。

  • 确认 Windows 系统已安装最新 NVIDIA 显卡驱动程序。注意不是WSL中的驱动。
  • 按照 NVIDIA 官方文档指引,在 WSL Ubuntu 环境中安装 CUDA Toolkit。以下为典型安装命令序列 (具体指令及版本号请参考 NVIDIA 官方网站最新发布):
# 示例命令,具体以 NVIDIA 官方最新指令为准
# wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
# sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
# wget https://developer.download.nvidia.com/compute/cuda/YOUR_CUDA_VERSION/local_installers/cuda-repo-wsl-ubuntu-YOUR_CUDA_VERSION-local.deb
# sudo dpkg -i cuda-repo-wsl-ubuntu-YOUR_CUDA_VERSION-local.deb
# sudo cp /var/cuda-repo-wsl-ubuntu-YOUR_CUDA_VERSION-local/cuda-*-keyring.gpg /usr/share/keyrings/
# sudo apt-get update
# sudo apt-get -y install cuda-toolkit-YOUR_CUDA_VERSION_SHORT # 例如:cuda-toolkit-12-0
  • 验证 CUDA 安装状态 (重要):
nvcc --version

此命令应成功显示 NVIDIA CUDA 编译器 (nvcc) 的版本信息。


二、LAMMPS 源码获取 📥

推荐从 LAMMPS 官方 GitHub 仓库获取最新稳定版本源码:

cd ~ # 或指定存放源码的目标目录
git clone -b stable https://github.com/lammps/lammps.git lammps_stable
cd lammps_stable

三、LAMMPS 编译配置 (采用 CMake) ⚙️

CMake 是 LAMMPS 编译配置的推荐方案。

1. 创建并进入构建目录

在 LAMMPS 源码根目录下创建独立的构建目录 (推荐实践):

mkdir build
cd build

2. 执行 CMake 配置命令

以下为 CMake 配置命令示例,涵盖 KOKKOS (CUDA 后端) 及其他常用软件包。请将 -DCMAKE_C_COMPILER-DCMAKE_CXX_COMPILER 参数替换为已安装的兼容编译器版本 (如 gcc-12, g++-12)。

cmake ../cmake \
      -DCMAKE_C_COMPILER=gcc-12 \
      -DCMAKE_CXX_COMPILER=g++-12 \
      -D PKG_MOLECULE=yes \
      -D PKG_KSPACE=yes \
      -D PKG_RIGID=yes \
      -D PKG_MANYBODY=yes \
      -D PKG_REPLICA=yes \
      -D PKG_CLASS2=yes \
      -D PKG_MC=yes \
      -D PKG_REAXFF=yes \
      -D PKG_EXTRA-MOLECULE=yes \
      -D PKG_EXTRA-COMPUTE=yes \
      -D PKG_EXTRA-DUMP=yes \
      -D PKG_EXTRA-FIX=yes \
      -D PKG_EXTRA-PAIR=yes \
      -D BUILD_MPI=yes \
      -D BUILD_OMP=no \
      -D PKG_KOKKOS=yes \
      -D Kokkos_ENABLE_CUDA=yes \
      -D Kokkos_ARCH_AUTO=ON \
      -D FFTW3_INCLUDE_DIR=/usr/include \
      -D FFTW3_LIBRARY=/usr/lib/x86_64-linux-gnu/libfftw3.so

关键 CMake 选项释义

  • -DCMAKE_C_COMPILER=gcc-12, -DCMAKE_CXX_COMPILER=g++-12: 指定兼容编译器。
  • PKG_<PackageName>=yes: 启用 LAMMPS 的标准或用户贡献软件包。
  • BUILD_MPI=yes: 编译支持 MPI 的并行版本。
  • PKG_KOKKOS=yes: 启用 KOKKOS 软件包。
  • Kokkos_ENABLE_CUDA=yes: 为 KOKKOS 启用 CUDA 后端,支持 GPU 加速。
  • Kokkos_ARCH_AUTO=ON: 指示 KOKKOS 自动检测 GPU 架构。
  • FFTW3_...: 指定 FFTW3 库路径 (CMake 通常可自动定位,显式指定更稳妥)。

注意:若确知 GPU 架构 (如 Ada Lovelace SM_89 对应 -DKokkos_ARCH_ADA89=ON),可替换 -DKokkos_ARCH_AUTO=ON,但 AUTO 选项通常正常工作。BUILD_OMP=no 的设定是因为 KOKKOS 自身提供线程并行能力 (通过 OpenMP 或 CUDA 后端)。若不使用 KOKKOS 而倾向传统 OpenMP,可设为 yes 并禁用 PKG_KOKKOS

若 CMake 配置过程中出现关于 KOKKOS_ARCHKokkos_ENABLE_CUDA 选项大小写的错误提示,请严格遵循提示信息修正。


四、LAMMPS 编译执行 🔨

CMake 配置完成且无错误提示后,在 build 目录内执行 make 命令:

make -j$(nproc)
  • -j$(nproc): 利用与 CPU 核心数量相等的线程进行并行编译,提升编译效率。
  • 编译过程可能需要一定时间。

五、编译后配置与设定

1. 可执行文件确认

编译成功后,可执行文件 lmp 将生成于 build 目录内:

ls -l /home/your_username/lammps_stable/build/lmp # 替换 your_username 为实际用户名

2. 将 lmp 添加至 ~/.bashrc (便捷调用)

为实现在任意目录下直接调用 lmp,可将其所在目录添加至 PATH 环境变量:

  • 打开 ~/.bashrc 文件:
nano ~/.bashrc
  • 在文件末尾添加如下行 (确保路径与实际配置相符,替换 your_username):
export PATH="/home/your_username/lammps_stable/build:$PATH"
  • 保存文件并退出 (Ctrl+X, 然后按 Y, 再按 Enter)。
  • 使更改在当前终端会话中生效:
source ~/.bashrc
  • 验证配置:
which lmp
# 预期输出: /home/your_username/lammps_stable/build/lmp (替换 your_username)
lmp -h
# 预期显示 LAMMPS 帮助信息

六、LAMMPS 程序运行 🚀

1. 基础执行方式

  • 串行执行:
lmp < /path/to/your/input_script.in
  • MPI 并行执行 (例如,使用 4 个核心):
mpirun -np 4 lmp < /path/to/your/input_script.in

2. 采用 KOKKOS (CUDA GPU 加速) 执行

命令行参数说明:

  • -k on: 启用 KOKKOS。
  • -sf kk: 为支持 KOKKOS 的命令自动附加 kk 后缀。
  • -pk kokkos ...: 向 KOKKOS 软件包传递参数。

示例 (单 GPU,单 MPI 进程):

mpirun -np 1 lmp -k on -sf kk -pk kokkos cuda on < /path/to/your/input_script.in

或者,在 LAMMPS 输入脚本 (input_script.in) 的起始部分 (如 units 命令之后) 添加:

package kokkos cuda on neigh half newton on # 根据具体需求调整选项

随后执行:

mpirun -np 1 lmp -sf kk < /path/to/your/input_script.in

注意:关于 KOKKOS 具体的运行时参数及 package kokkos 命令选项,请参阅所用 LAMMPS 版本的官方文档。


七、关键考量因素及故障排除 🤔

  • GCC 与 CUDA 版本兼容性:启用 KOKKOS CUDA 功能时最常见问题。务必使用 CUDA 支持的 GCC 版本编译。
  • CMake 缓存:若修改 CMake 选项后遇到问题,务必彻底清除 build 目录 (rm -rf build) 后重新配置。
  • KOKKOS CMake 选项大小写规范:KOKKOS 对其 CMake 选项大小写要求严格,请留意相关错误提示。
  • 依赖库路径指定:若 CMake 无法定位 FFTW3 或其他库,需通过 -D<LIBNAME>_LIBRARY=-D<LIBNAME>_INCLUDE_DIR= 参数手动指定路径。

LAMMPS 的编译过程较为精细,遵循上述步骤可显著提升成功概率。预祝您的模拟工作顺利!