Compile LAMMPS on Server with Intel oneAPI

使用Intel oneAPI 编译LAMMPS

Documenting the compliation on a SLURM server with Intel oneAPI.

什么是 编译器

GPT-4o : 编译器是一个将人类编写的程序代码(通常是高级语言,如 C++、Java、Python 等)转换成计算机能够理解和执行的机器语言(通常是二进制代码)的工具。

通俗来说,编译器就像一个 “翻译员” 。你写的程序是用一种高级语言编写的,就像是你和别人用一种你们都懂的语言交流(比如中文、英文)。但是计算机只能“听懂”机器语言,所以编译器就把你的“语言”翻译成计算机可以理解的“机器语言”,这样计算机才能执行你的程序。

常见的C/C++编译器:

  • Linux系统下的 gcc/g++
  • Windows下VS系列的 cl.exe,mingw开源的gcc/g++
  • macOS下的 Clang

实际体验而言,厂商针对自家处理器优化的编译器能很好的提升运行速度, Intel的oneAPI和AMD的OCAL都有奇效(也有部分原因是本人的代码水平太烂,全靠编译器优化)

Intel oneAPI

由英特尔公司开发,专为优化基于 Intel 架构的处理器性能而设计。ICC 在生成高效代码方面表现出色,特别是在科学计算、高性能计算领域。包含 C/C++ 编译器 icx/icpx, Fortran编译器 ifx, intel MPI, MKL (Math Kernel Library)等库。

在 SCUT1 集群上使用 Intel oneAPI 编译 LAMMPS feature release 19 November 2024

  • 在Github下载LAMMPS最新版本的源代码
  • 上传服务器,解压源代码压缩包
  • 进入 LAMMPS 文件目录 cd lammps-XXXXX
  • 建立 build 文件夹,存放编译过程中产生的文件
mkdir build
cd build
  • 加载相关编译环境 cmake, Intel oneAPI
module purge                                        # 卸载SCUT1默认加载的包
load module load  cmake/3.24.2  oneapi/2024.1       # 加载编译所需的cmake和Intel oneAPI
source /share/software/oneapi/oneapi/setvars.sh     # 设置好oneAPI的环境变量
  • 使用 LAMMPS 预先配置好的cmake编译条件 oneapi.cmake, 链接相应的编译器和库文件,指定需要编译安装的包
cmake -C ../cmake/presets/oneapi.cmake -C ../cmake/presets/basic.cmake -D PKG_EXTRA-MOLECULE=yes -D LAMMPS_SIZE=bigbig ../cmake
  • 开始编译 -j32指定32核编译
make -j # j表示有多少用多少核编译(登录节点)
  • 编译完成后 ls 即可看到最终生成的可执行文件 lmppwd 记录下当前的路径

编写提交slurm任务的job文件

将任务文件命名为 job.SCUT1-LAMMPS_19NOV2024.txt

vim job.SCUT1-LAMMPS_19NOV2024.txt

设置好任务的分区(partition)、节点数、核心数等相关参数,加载编译时的模块,注意修改最后一行 lmp 的路径

#!/bin/bash

#SBATCH --job-name=LMP19Nov24
#SBATCH --partition=cpuXeon6458
#SBATCH -N 1
#SBATCH -n 64
#SBATCH --mail-type=end
#SBATCH --mail-user=student_id@mail.scut.edu.cn
#SBATCH --output=output.txt
#SBATCH --error=error.txt

module purge
module load  cmake/3.24.2  oneapi/2024.1

mpirun -n 64 /share/home/student_id/software/lammps-patch_19Nov2024/build/lmp -i *.in

复制 job. 文件到指定的目录,sbatch job.* 提交任务