5

私は大まかにこれをやりたいpythonスクリプトを持っています:

  1. いくつかの粒子位置を配列に呼び出します

  2. アルゴリズムを 512^3 のすべての位置で実行して、それらを NxNxN 行列に分配します

  3. その行列を python にフィードバックします

  4. Pythonでプロットを使用してマトリックスを視覚化します(つまりmayavi)

最初にシリアルで記述する必要がありますが、理想的にはステップ 2 を並列化して計算を高速化する必要があります。どのようなツールや戦略から始めることができるか。私は Python と Fortran をよく知っていますが、特定の問題のために 2 つを接続する方法についてはあまり知りません。現時点では、Fortran ですべてを実行してから、Python プログラムをロードしています。一度にすべて実行したいと考えています。ありがとう

編集:私が並列にしたいのは「恥ずかしいほど並列」であり、それはN個の粒子の単なるループであり、そのループをできるだけ早く通過したい.

4

3 に答える 3

5

バインドには2つの基本的なオプションがあります。最初にを使用f2pyし、もう1つはFortranでCとの相互運用性を使用し、を使用してバインドしCythonます。のチュートリアルf2pyこちらです。f2pyがFortranコードに配置するためのいくつかのディレクティブがありますが、多くの場合、それらは必要ありません。

並列化の場合、単一のマシンでの並列化で十分であれば、最初に使用するアプローチはおそらくOpenMPです。スレッドを使用し、恥ずかしい並列処理を伴うループに簡単に使用できます。スレッド内のグローバル変数に書き込みを行わないように注意してください。書き込みを行う場合は、同期ディレクティブを使用してください。

于 2012-12-13T08:33:07.523 に答える
2

VladimirFの提案に対する代替アプローチは、2つの部分をクライアントサーバー構造として設定することです。この場合、Python部分はソケットを使用してFortran部分と通信できます。これには、相互作用のためのプロトコルを実装する負担が伴いますが、クリーンな分離が得られ、ネットワークを介した相互作用を使用して別のマシンで実行し続けることができるという利点があります。

実際、このアプローチでは、Fortranアプリケーションのインスタンスを必要な数だけ生成し、それらすべてに異なるデータを供給することで、驚異的並列部分を実行することもできます。

于 2012-12-13T11:01:17.860 に答える