适合生产用的分子动力学模拟器最佳语言。(Python+Numpy?)
我需要建立一个高性能的分子动力学模拟器。我在想用python加numpy是否合适。这个项目会用于实际生产,所以我想从一个好的语言开始。我在考虑是否应该选择像scala这样的函数式编程语言。scala在科学计算方面的库支持够吗?或者你觉得还有其他什么语言或编程方式比较好,为什么?如果你过去真的做过类似的项目,能分享一下你的经验吗?这会对我收集信息很有帮助。
非常感谢!
4 个回答
6
- 为什么要这么做呢?其实有很多很不错的、免费的分子动力学软件包可以使用,比如:LAMMPS、Gromacs、NAMD、HALMD,这些都是很好的选择(还有一些不那么免费的,比如CHARMM、AMBER等等)。要修改这些软件包来满足你的需求,肯定比自己从头写一个要简单得多。而且这些软件包都有成千上万的用户和很多贡献者,肯定比你自己写的要好得多。
- 用Python加上numpy来做原型开发是可以的,但速度会慢很多(是的,即使numpy链接了快速的库),比起C/C++/Fortran来说,速度差得很,因为其他软件包都是用这些语言写的。除非你在用GPU,那样的话,所有的复杂计算都是用C/C++写的内核来完成的。
6
我认为大多数高性能的分子动力学(MD)代码都是用原生语言写的,比如Fortran、C或C++。最近,现代的GPU编程技术也越来越受欢迎。
像Python这样的语言可以让开发速度更快,比起原生代码要快很多。不过,问题是,Python的性能通常比编译后的原生代码要差。
我有个问题想问你。你为什么要自己写MD代码呢?市面上有很多现成的库,你找不到一个适合你需求的吗?
13
高性能的分子动力学(MD)实现通常是以命令式编程为主,而不是函数式编程,使用大数组来处理数据,而不是采用面向对象的设计。我曾经使用过LAMMPS,虽然它有一些缺点,但确实能完成任务。另一个可能更吸引人的选择是HOOMD,它从一开始就针对Nvidia的CUDA显卡进行了优化。HOOMD虽然没有LAMMPS的所有功能,但界面看起来更友好(可以用Python脚本编写),而且性能非常高。
我实际上曾经用Java和Scala实现过自己的MD代码,采用了高级的面向对象设计,但与那些经过精心调优、使用C++/CUDA的流行MD实现相比,性能令人失望。现在看来,很少有科学家会自己编写MD实现,但能够修改现有的实现还是很有用的。