【问题标题】:Best language for Molecular Dynamics Simulator, to be run in production. (Python+Numpy?) [closed]分子动力学模拟器的最佳语言,可在生产中运行。 (Python + Numpy?)[关闭]
【发布时间】:2011-10-20 09:07:51
【问题描述】:

我需要构建一个重型分子动力学模拟器。我想知道 python+numpy 是否是一个不错的选择。这将在生产中使用,所以我想从一门好的语言开始。我想知道我是否应该从像 eg.scala 这样的函数式语言开始。我们对 scala 中的科学计算有足够的库支持吗?或您认为好的任何其他语言/范式组合 - 以及为什么。如果您过去确实构建过一些东西并且是根据经验进行讨论的,请提及它,因为它有助于我收集数据点。

非常感谢!

【问题讨论】:

  • 为避免将此问题标记为主观问题,您能否添加有关特定计算类型的详细信息?多少分子,多少时间步长,什么精度,什么性能?
  • 我已经问过“为什么要写自己的MD?”这个问题。内部在这里。我是这个项目的新手,其他从事该项目已有一段时间的人确信他们需要进行势能计算,而目前不支持现成的。
  • 分子数量为10K量级,对分子的中间状态或阶段不感兴趣,只对最终构型感兴趣。关于时间步骤 - 不知道(还)。给我范围以及您认为它将如何影响决策。

标签: python scala numpy simulation scientific-computing


【解决方案1】:

我相信大多数高性能 MD 代码都是用 Fortran、C 或 C++ 等本地语言编写的。现代 GPU 编程技术最近也受到青睐。

像 Python 这样的语言可以实现比原生代码更快速的开发。不利的一面是,性能通常比编译的本机代码差。

问你一个问题。为什么要编写自己的 MD 代码?那里有很多很多图书馆。您找不到适合您需要的吗?

【讨论】:

  • 也有可能使用 Python 作为“胶水”,可以这么说,但是使用您提到的这种语言编写的专门设计的库来完成所有处理。或者,可以使用 Cython 之类的东西。
  • @JAB Cython 可以很好地工作。 Python 是一种非常有表现力的语言,并且可以让你两全其美的方法是非常可取的。
【解决方案2】:
  1. 您为什么要这样做?有许多很好的、免费提供的分子动力学软件包可供您使用:LAMMPSGromacsNAMDHALMD 都会立即浮现在脑海中(以及更少的免费提供像 CHARMM、AMBER 等)修改其中的任何一个以适应您的目的将比编写您自己的要容易得多,并且任何这些包含数千名用户和数十名贡献者的包都将比任何其他包都好你自己写。
  2. Python+numpy 可以很好地用于原型设计,但它会比 C/C++/Fortran 慢得多(是的,即使 numpy 链接到快速库),这是所有其他人都使用的。除非您使用的是 GPU,否则所有繁重的工作都是在用 C/C++ 编写的内核中完成的。

【讨论】:

    【解决方案3】:

    高性能的 MD 实现往往是绝对必要的(而不是功能性的),因为大量数据胜过面向对象的设计。我与LAMMPS 合作过,虽然它有缺点,但它确实完成了工作。一个可能更吸引人的选项是HOOMD,它从一开始就针对带有 CUDA 的 Nvidia GPU 进行了优化。 HOOMD 没有 LAMMPS 的所有功能,但界面看起来更好一些(可以从 Python 编写脚本),而且性能非常高。

    我实际上已经使用高级面向对象设计实现了几次我自己的 MD 代码(Java 和 Scala),与经过大量调整和使用 C++/CUDA 的流行 MD 实现相比,我发现性能令人失望。如今,似乎很少有科学家编写自己的 MD 实现,但能够修改现有的实现是很有用的。

    【讨论】:

    • 您好,您为什么要实现自己的 MD 以及为什么使用 java 和 scala 而不是其他语言?只是想了解你的想法。感谢您的回复。
    • 实现了我自己的 MD,因为我认为它会给我更大的灵活性来进行我需要的某些修改。 JVM 语言具有以下优点:(1) 性能接近 C++ 等编译语言(比 Python 等好几个数量级),(2) 跨平台,(3) 垃圾收集,(4) 内存错误安全。我发现 Scala 在几乎所有方面都比 Java 更好。对于数值计算,Scala 的专业化支持和运算符语法很有帮助。 JVM 的一个缺点是缺少堆栈分配的值类型。
    【解决方案4】:

    如果您想使用 Python,另一种选择是查看 OpenMM:

    https://simtk.org/home/openmm

    它是一个分子动力学 API,包含您需要的许多基本元素(积分器、恒温器、恒压器等),并支持通过 OpenCL 在 CPU 上运行,通过 CUDA 和 OpenCL 在 GPU 上运行。它有一个我以前使用过的 python 包装器,基本上模仿了底层的 c-api 调用。它已被合并到 GromacsMDLab 中,因此如果您真的不打算从(半)头开始构建一些东西,那么您有一些如何集成它的示例

    但是正如其他人所说,我强烈建议您在重新发明轮子之前先看看 NAMD、Gromacs、HOOMD、LAMMPS、DL_POLY 等,看看它是否符合您的需求。

    【讨论】:

      猜你喜欢
      • 2011-01-23
      • 1970-01-01
      • 2015-08-30
      • 2013-05-17
      • 2016-07-03
      • 1970-01-01
      • 2012-08-08
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多