【LAMMPS学习】三、构建LAMMPS(9)在 Windows 上构建 LAMMPS 的注意事项

本文详细介绍了如何在Windows上构建LAMMPS,包括使用VisualStudio、移植到Windows的GNUGCC、Cygwin、英特尔oneAPI编译器,以及注意事项和推荐的工具。建议在尝试自定义编译前考虑预编译包和使用Linux子系统或虚拟机。
摘要由CSDN通过智能技术生成

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 平台。

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值