2011-08-04 5 views
3

頑丈な分子動力学シミュレータを構築する必要があります。私はpython + numpyが良い選択であるかどうか疑問に思います。これはプロダクションで使用されるので、私は良い言葉で始めたいと思っていました。 eg.scalaのような関数型言語から始めるべきかどうか疑問に思っています。スカラ計算における科学計算のための十分なライブラリサポートがありますか?またはあなたが良いと思う他の言語/パラダイムの組み合わせ - そしてその理由。あなたが過去に何かを実際に構築して経験から話しているのであれば、データポイントを収集するのに役立つと言いましょう。Molecular Dynamics Simulatorに最適な言語をプロダクションで実行します。 (Python + Numpy?)

ありがとう!

+0

この質問が主観的なものであることを避けるために、特定のタイプの計算について詳細を追加できますか?分子の数、タイムステップの回数、精度、パフォーマンス – smci

+0

私は「なぜ自分のMDを書くの?」という質問をしました。ここで内部的に。私はこのプロジェクトを初めて利用しています。しばらくの間作業している他の人は、現時点ではサポートされていない潜在的エネルギー計算を行う必要があると確信しています。 – jason

+0

分子数は10K程度で、分子の中間状態や段階には関与せず、末端構成にのみ関心があります。時間のステップについて - アイデアはまだ(まだ)。範囲と、それが決定にどのように影響すると思いますか。 – jason

答えて

10

高性能のMD実装は、オブジェクト指向設計を酷評するデータの大きな配列で(機能的ではなく)明らかに不可欠である傾向があります。私はLAMMPSで働いていますが、疣贅を持っている間は仕事は終わります。より魅力的な選択肢はHOOMDで、CUDAを搭載したNvidia GPUの最初から最適化されています。 HOOMDはLAMMPSのすべての機能を備えているわけではありませんが、インターフェイスは少し上手く見えます(これはPythonからスクリプト可能です)、それは非常に高いパフォーマンスです。

私は高レベルのオブジェクト指向設計を使用して実際に自分のMDコードを2回(JavaとScala)実装しましたが、C++/CUDAを頻繁に使用している普及したMD実装と比較して、最近では、独自のMD実装を書く科学者はほとんどいないようですが、既存のMD実装を修正することは有益です。

+0

こんにちは、なぜ自分のMDを実装したのですか?あなたの考えを理解しようとするだけです。お返事をありがとうございます。 – jason

+0

自分のMDを実装しました。なぜなら、必要な修正を加える柔軟性が増すからです。 JVM言語には、(1)C++(Pythonよりも優れた命令)、(2)クロスプラットフォーム、(3)ガベージコレクション、(4)メモリエラーからの安全性などのコンパイル言語に近い性能。私はScalaがJavaよりも優れた言語であることをほぼあらゆる面で見つけています。数値計算では、Scalaの特殊化サポートと演算子の構文が役立ちます。このようなことに対するJVMの欠点は、スタックに割り当てられた値の型がないことです。 –

5

私はFortran、C、C++などの母国語で書かれていると思います。現代のGPUプログラミング技術もまた最近好評を博しています。

Pythonのような言語は、そのネイティブコードよりはるかに迅速な開発を可能にします。それは、コンパイルされたネイティブコードよりパフォーマンスが悪いということです。

あなたの質問です。なぜ自分のMDコードを書いているのですか?そこには多くのライブラリがあります。あなたのニーズに合ったものは見つかりませんか?

+4

「接着剤」としてPythonを使用する可能性もあります。言い換えれば、あなたが言及したような言語で書かれた特別に設計されたライブラリを使ってすべての処理を行います。あるいは、Cythonのようなものを使うこともできます。 – JAB

+0

@JAB Cythonはうまくいくはずです。 Pythonは非常に表現力豊かな言語であり、両方の世界のベストを可能にするアプローチが非常に望ましいです。 –

6
  1. なぜこれを行いますか? 多くの自由に利用できる分子動力学のパッケージがあります:LAMMPSGromacsNAMDHALMD(これらはCHARMM、AMBERなどのように自由に利用できないものと共に)あなたの目的に合うものは、あなた自身のものを書くことよりもはるかに簡単になり、何千人ものユーザーと何十人もの貢献者がいるこれらのパッケージは、あなたが書いたものよりも優れています。
  2. Python + numpyはプロトタイプ作成には問題ありませんが、C/C++/Fortranよりもはるかに時間がかかります(高速ライブラリとnumpyをリンクしてもそうです)。 GPUを使用していない限り、C/C++で書かれたカーネルでは大変な作業が行われます。
3

別の方法として、あなたは、Pythonを使用したい場合はOpenMMを見てみることです。

https://simtk.org/home/openmm

それはあなたが(インテグレータ、サーモスタット、barostatsを必要とする基本的な要素の多くを持って分子動力APIですなど)、CUDAとOpenCLを介してOpenCLとGPU経由でCPU上で実行することをサポートしています。これは私が以前使用していた基本的なc-api呼び出しを模倣したPythonラッパーを持っています。あなたは本当に(半)から何かを構築する上で死んでセットしている場合、それを統合する方法の例をいくつか持っているので、それは、Gromacs、およびMDLabに組み込まれています他の人が言っているようしかし

を傷つける、私は非常に見てみるお勧めしますNAMD、Gromacs、HOOMD、LAMMPS、DL_POLYなどであなたのニーズに合っているかどうかを確認してから、ホイールの再発明を開始します。

関連する問題