3. 构建 LAMMPS

3.9.在 Windows 上构建 LAMMPS 的注意事项 

3.9.1.一般说明

LAMMPS 主要在 Linux 机器上开发和测试。如今,绝大多数 HPC 集群和超级计算机也运行在 Linux 上。虽然希望可移植到其他平台,但并不总能实现。有时这是由于 LAMMPS 本身的不可移植代码造成的,但更常见的是由于构建特定功能或包所需的外部库和工具的可移植性限制。 LAMMPS 开发人员依赖 LAMMPS 用户提供反馈并在解决可移植性问题方面提供帮助。对于在 Windows 上编译 LAMMPS 来说尤其如此,因为该平台在一些低级功能上存在显着差异。自 LAMMPS 版本 2021 年 12 月 14 日起,LAMMPS 的大部分内容可以使用 Microsoft Visual C++ 编译器进行本机编译。自 LAMMPS 版本 2022 年 5 月 31 日起,英特尔 oneAPI 编译器也可以在 Windows 上本地编译 LAMMPS 的大部分内容。这主要是通过使用 platform 命名空间和 CMake 中的平台抽象函数来实现的。

在尝试自己在 Windows 上构建 LAMMPS 之前,请考虑预编译的 Windows 安装程序包,看看它们是否足以满足您的需求。

3.9.2.在 Windows 上运行 Linux

如果您有必要在Windows机器上编译LAMMPS(例如因为它是您的主桌面),也请考虑使用虚拟机软件并在Linux虚拟机中编译和运行LAMMPS,或者 - 如果您有足够的空间-最新的 Windows 10 或 Windows 11 安装 - 考虑使用适用于 Linux 的 Windows 子系统。这个可选的 Windows 功能允许您从 Windows 中运行 Linux 系统(默认为 Ubuntu)的 bash shell,从那里开始,您几乎可以像在常规 Ubuntu Linux 机器上运行一样使用该 shell(例如,通过安装软件) apt-get 等)。有关更多详细信息,请参阅本教程。

3.9.3.使用移植到 Windows 的 GNU GCC

在 Windows 上本地编译 LAMMPS 的一种选择是安装 Bash shell、Unix shell 实用程序、Perl、Python、GNU make 和移植到 Windows 的 GNU 编译器。 Cygwin 软件包为低级 Windows 函数提供了 unix/linux 接口,因此可以在 Windows 上编译 LAMMPS。包括对 LAMMPS 的必要(较小)修改,但对于最近添加的功能和相应的新代码来说可能并不总是最新的。提供了在旧构建系统中使用 cygwin 的机器 makefile。使用 CMake 进行这种编译模式未经测试,不太可能工作。

针对 Windows 进行编译时,请勿在 LMP_INC makefile 变量中设置 -DLAMMPS_MEMALIGN 定义,并将 -lwsock32 -lpsapi 添加到 LIB makefile 变量中的链接器标志。当生成的 LAMMPS Windows 可执行文件抱怨缺少 .dll 文件时,请尝试将 -static-libgcc 或 -static 或两者添加到链接器标志中。 CMake 配置应该自动设置,但未经测试。

如果出现问题,建议您联系有 Cygwin 使用经验的人员。如果您确实遇到需要更改 LAMMPS 源代码的可移植性问题,或者自行找出修正方法,请在 MatSci 的 LAMMPS 论坛上报告这些问题,或者将它们作为问题或拉取请求提交到 LAMMPS GitHub 项目上。

3.9.4.使用 Microsoft Visual Studio

将平台命名空间集成到 LAMMPS 代码库中后,使用 Visual Studio 在 Windows 上进行本机编译的 LAMMPS 的可移植性得到了显着提高。已使用 Visual Studio 2019(又名版本 16)和 Visual Studio 2022(又名版本 17)对此进行了测试。我们强烈建议使用 Visual Studio 2022 版本 17.1 或更高版本。目前,并非 LAMMPS 中的所有功能和包都支持开箱即用,但提供了一个预设 cmake/presets/windows.cmake ,其中包含迄今为止已成功编译的包。您必须使用基于 CMake 的构建过程,因为不支持 GNU make 或 GNU make 构建过程所需的 Unix shell 实用程序。

可以使用 Visual Studio IDE 的集成 CMake 支持或使用外部 CMake 安装(例如从 cmake.org 下载)来创建构建文件并从命令行编译 LAMMPS。

通过命令行进行编译,并通过 GitHub Actions 自动检查 LAMMPS 开发分支的单元测试。

注:版本 17.1 之前的 Visual Studio 版本可能会扫描整个 LAMMPS 源代码树,并可能会错过正确的主 CMakeLists.txt 并感到困惑,因为不同文件夹中有多个同名文件,但顶级文件夹中没有。

请注意,无论哪种方法,CMake 都会创建一个所谓的“多配置”构建环境,并且用于构建和测试 LAMMPS 的命令行必须进行相应调整。

LAMMPS cmake 文件夹包含一个 CMakeSettings.json 文件,其中包含 MSVC 编译器的构建配置以及 MS 在调试和发布模式下提供的 Clang 编译器包。

为了支持并行运行,您可以使用 OPENMP 包在启用 OpenMP 的情况下进行编译,或者安装 Microsoft MPI(包括 SDK)并在启用 MPI 的情况下编译 LAMMPS。

3.9.5.使用英特尔 oneAPI 编译器和库

2022 年 5 月 31 日版本中的新增内容。

安装英特尔 oneAPI 基础工具套件和 HPC 工具套件后,还可以使用英特尔编译器在 Windows 上本地编译 LAMMPS 的大部分内容。 HPC 工具包提供了两套 C/C++ 和 Fortran 编译器:所谓的“经典”编译器( icl.exe 和 ifort.exe )和较新的基于 LLVM 的编译器( icx.exe )。除了编译器及其依赖模块之外,还需要安装线程构建块(TBB)和数学内核库(MKL)。提供了两个预设( cmake/presets/windows-intel-llvm.cmake 和 cmake/presets/windows-intel-classic.cmake ),分别用于选择基于 LLVM 的编译器或经典编译器。预设 cmake/presets/windows.cmake 启用不依赖于附加功能或库的兼容包。您必须使用基于 CMake 的构建过程并使用 Ninja 作为构建工具。为了从命令提示符进行编译,必须安装 CMake 和 Ninja-build 二进制文件。如果从启用了 Intel oneAPI 编译器的命令提示符启动 ( devenv.exe ),也可以使用 Visual Studio。 cmake 文件夹中的 Visual Studio 设置文件包含调试和发布设置中两种编译器变体的配置。这些将使用与 Visual Studio 捆绑在一起的 CMake 和 Ninja 二进制文件,因此不需要单独安装。

已知限制:

除了多个软件包和外部库的可移植性问题之外,经典的 Intel 编译器目前无法编译 googletest 库,因此启用 -DENABLE_TESTING 选项将导致编译失败。基于 LLVM 的编译器是兼容的。

3.9.6.使用交叉编译器 

如果您需要为 Windows 提供自定义 LAMMPS 二进制文件,但不需要在 Windows 上进行编译,请考虑使用 Linux 到 Windows 交叉编译器。这就是当前 LAMMPS 开发人员创建 Windows 二进制包的方式。因此,这可能是目前为 Windows 构建 LAMMPS 可执行文件的最佳测试和支持的方法。提供了一个 CMake 预设,用于选择与此交叉编译构建兼容的所有包。 GPU 包只能在 OpenCL 支持的情况下进行编译。要使用 MPI 支持进行编译,需要预编译库和相应的头文件。使用 CMake 构建时,将自动下载匹配的包,但必须使用 -DBUILD_MPI=on 显式启用 MPI 支持。

但请记住,这仅适用于编译 LAMMPS。 LAMMPS 开发人员很少测试生成的二进制文件是否正常工作。相反,我们依赖这些针对 Windows 的预编译 LAMMPS 包的用户的反馈。如果我们发现问题,我们将尽力解决问题。然而,这受到时间限制并且重点关注 HPC 平台。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐