#分子动力学 # #分子模拟

sys openmm-sys

Rust 绑定 OpenMM 工具包,用于高性能 GPU 代码进行分子模拟

1 个稳定版本

7.4.1 2020 年 8 月 20 日

#102模拟

MIT 许可证

11MB
177K SLoC

C++ 149K SLoC // 0.1% comments CUDA 16K SLoC // 0.1% comments Rust 6K SLoC // 0.0% comments Python 4.5K SLoC // 0.3% comments C 589 SLoC // 0.2% comments Visual Studio Project 557 SLoC Batch 465 SLoC // 0.0% comments Shell 357 SLoC // 0.3% comments FORTRAN Modern 298 SLoC // 0.2% comments Visual Studio Solution 81 SLoC PowerShell 12 SLoC // 0.3% comments

包含(《MSI 安装程序`, 560KB) Lepton 用户手册.doc

OpenMM-sys

这个包提供了 bindgen 生成的 OpenMM C API 包装器的声明,可选地从其源代码构建静态/动态库。构建步骤高度可配置,通过 Cargo 特性和/或环境变量向库消费者公开最重要的 OpenMM CMake 选项。

OpenMM 是一个用于分子模拟的工具包。它可以作为一个独立的应用程序来运行模拟,也可以作为从您的代码中调用的库。它通过自定义力场和积分器提供了极端的灵活性、开放性和高性能(尤其是在最新的 GPU 上),使其在模拟代码中独一无二。

要求

此包需要以下程序安装在您的系统上

  • C / C++ 编译器(平台默认设置最佳:Windows 上的 MSVC,Linux 上的 GCC 和 macOS 上的 Clang)
  • CMake

安装

最简单的安装方法是将以下内容添加到 Cargo.toml

[dependencies]
openmm-sys = "7.4"

这就完成了!安装完全自包含。然而,构建 OpenMM 库可能需要一些时间 - 在作者的中期 2012 MacBook Pro 上需要 3-5 分钟。要查看构建过程中的 CMake 构建步骤,请在使用 Cargo 构建时使用 -vv(非常详细)

cargo build -vv

好消息是您可以将安装文件夹(编译期间打印)复制/移动到其他位置,并将 OPENMM_HOME 环境变量设置为指向其位置。以下是一个示例终端输出

$> cargo build -vv

<Elided CMake output>

warning: [OpenMM-sys] Dynamically linking against the OpenMM library.
warning: [OpenMM-sys] The OpenMM library was built and installed in `/Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out`. You can copy / move that directory somewhere else and set the `OPENMM_HOME` environment variable to point to its path. This way, the OpenMM library will no longer require building.

从显示的路径复制文件并设置 OPENMM_HOME

$> mkdir ~/openmm

$> cp -r /Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out ~/openmm

$> export OPENMM_HOME=/Users/andreinicusan/openmm-rust/openmm-sys/target/debug/build/openmm-sys-0e32f8f9e5febd89/out

未来的 Rust 包将使用 OPENMM_HOME 中的 OpenMM 安装,而不是编译其源代码 - 大大提高编译时间!

OPENMM_HOME 指向的目录树应类似于以下内容

$OPENMM_HOME
├── bin
├── build
├── docs
├── examples
├── include
├── lib
   ├── libOpenMM.dylib
   ├── libOpenMMAmoeba.dylib
   ├── libOpenMMAmoeba_static.a
   ├── libOpenMMDrude.dylib
   ├── libOpenMMDrude_static.a
   ├── libOpenMMRPMD.dylib
   ├── libOpenMMRPMD_static.a
   ├── libOpenMM_static.a
   └── plugins
└── licenses

实际的 OpenMM 库位于 OPENMM_HOME/lib

基于 Conda 的替代安装

OpenMM 还为不同系统提供了预构建的二进制文件,您可以使用 conda(与推荐的 Anaconda Python 发行版一起打包)轻松安装。

$> conda install -c omnia -c conda-forge openmm

这种方法的缺点是,您现在需要找到 OpenMM 库的安装位置,以便设置 OPENMM_HOME。例如,在作者的机器上,运行 which python 产生

$> which python
/usr/local/anaconda3/envs/openmm_env/bin/python

从该路径中删除最后两个组件应该得到一个包含 lib 和所需 OpenMM 库的位置

export OPENMM_HOME=/usr/local/anaconda3/envs/openmm_env/

基本配置

默认情况下,OpenMM 的 CMake 安装程序将检查哪些平台可用,并为这些平台构建所有插件。例如,如果您的系统上可用 CUDA 并且将构建 AMOEBA 插件(在 CMake 中设置为 OPENMM_BUILD_AMOEBA_PLUGIN = "ON"),则默认包含 CUDA 实现(OPENMM_BUILD_AMOEBA_CUDA_LIB = "ON")。下面列出了可以从该软件包中选择的最重要功能。

除了设置 OPENMM_HOME 环境变量之外,还有一些其他设置,在 Cargo.toml 中很容易配置。

[dependencies.openmm-sys]
features = ["static-lib", "cuda"]

在这种情况下,OpenMM 作为 静态库 构建和使用,包括 CUDA 平台。以下是可用功能的完整列表

  • 库类型

    • shared-lib - 构建共享(动态)OpenMM 库。
    • static-lib - 构建静态 OpenMM 库并将它们链接在一起。如果同时选中 shared_libstatic_lib,则将同时构建它们,但您的 crate 将链接到静态库。
  • 配置 "捆绑包"

    • no-default - 关闭所有 OpenMM CMake 选项。您可以使用此选项来选择要编译的特定功能。
    • minimal - 不构建任何插件、示例、API 文档或 Python 包装器。
  • 平台

    • cpu - 构建优化的 CPU 平台。
    • opencl - 构建 OpenMMOpenCL 库。
    • cuda - 为 Nvidia GPU 构建 OpenMMCuda 库。
  • 插件

    • amoeba - 构建 Amoeba 插件。
    • drude - 构建 Drude 插件。
    • pme - 构建 PME 插件。
    • rpmd - 构建 RPMD 插件。
  • 杂项

    • examples - 构建 OpenMM 的示例。
    • generate-api-docs - 生成基于 Doxygen 的文档。
  • 包装器

    • c-and-fortran-wrappers - 构建 C 和 Fortran 包装器。如果您想使用此 crate,则这是必需的,因为它使用 C API。

注意:由于 OpenMM 源代码打包超出了 crates.io 每个 crate 10 MB 的限制,因此我们无法构建此 crate 的 Python 包装器。如果您需要 Python 包装器,请使用其他安装路径(conda、从源代码编译等)。

高级配置

可以使用一些环境变量进一步配置构建步骤。

  • OPENMM_CMAKE_OPTIONS - 这个变量可以包含 空格分隔key=value 对,这些对将会通过 -D 标志传递给 CMake(例如,OPENMM_CMAKE_OPTIONS = OPENMM_BUILD_CUDA_LIB=ON PYTHON_EXECUTABLE=usr/bin/python)。你可以运行 cmake -LA <openmm_source_dir> 来查看所有可用的选项。
  • CXXSTDLIB - 有时需要显式地给出 C++ 标准库共享库的位置给链接器。由于我无法解释的原因,名称在不同的编译器之间有所不同(例如,Clang 中的 "libc++" 和 GCC 中的 "libstdc++")。将此环境变量设置以覆盖默认的平台相关选项。

最后,你可以使用 CMake 自己编译 OpenMM。有关更多信息(以及可能比我更好的解释),请参阅 OpenMM 作者在其 网站上 提供的信息 - 请参阅“从源代码编译 OpenMM”部分。

示例

examples/ 文件夹中查看 OpenMM 的 Rust 的一些底层使用。请注意,它使用 OpenMM 的 C 包装器,因此所有函数调用都必须是 unsafe - 请参阅 openmm-rust crate 以获得安全、高级的 API。

版本控制

此 crate 版本的最后两位数字对应于 OpenMM 的最新 次要版本,而最后一位数字对应于此 crate 的补丁。例如,openmm-sys 版本 7.4.0 对应于 OpenMM 7.4.2(编写时的最新版本)。

如果你对拥有不同版本的 Rust 包装器感兴趣,请随时通过 a.l.nicusan <at> bham.ac.uk 联系我。

bindgen 使用方法

用于生成 OpenMM C 包装器的 Rust 绑定的 shell 脚本包含在 src/bindings 中,包括包装器本身。

许可证

此 crate 是 MIT 许可。有关 OpenMM 的许可证,请参阅 openmm/docs-source/licenses 目录。

致谢

所有荣誉归 Peter Eastman 博士、OpenMM 的作者、斯坦福 Pande 实验室和斯坦福大学。如果你在您的工作中使用了 OpenMM,请引用以下出版物

P. Eastman, J. Swails, J. D. Chodera, R. T. McGibbon, Y. Zhao, K. A. Beauchamp, L.-P. Wang, A. C. Simmonett, M. P. Harrigan, C. D. Stern, R. P. Wiewiora, B. R. Brooks, and V. S. Pande. “OpenMM 7: Rapid development of high performance algorithms for molecular dynamics.” PLOS Comp. Biol. 13(7): e1005659. (2017)

依赖项