4

私はPythonスクリプトから(そして、テストのためにインタラクティブに、しかしipythonからではなく)、Pythonの2つの異なるバージョンにわたって並列プロセスを起動したいと思っており、mpi4py. 2 つのバージョンは (それぞれ 2 コアと 8 コア用):

Python 2.7.2 |EPD 7.2-2 (64-bit)| (default, Sep  7 2011, 16:31:15) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin

Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2

最初のもの(ロープを学ぶため)では、インタラクティブに次のようになります。

from mpi4py import MPI
import sys
size = MPI.COMM_WORLD.Get_size()
print size

1

rank = MPI.COMM_WORLD.Get_rank()
print rank

0

これは私が望んでいるものではありません(そして、やっているmpirun/mpiexec pythonハングしているようです/何もしないようです)。しかし、もしそうなら:

mpiexec -n 5 python helloworld.py

の上

#!/usr/bin/env python

from mpi4py import MPI
import sys

size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()

sys.stdout.write(
    "Hello, World! I am process %d of %d on %s.\n"
    % (rank, size, name))

私は得る

Hello, World! I am process 0 of 5 on localhost.

Hello, World! I am process 1 of 5 on localhost.

Hello, World! I am process 2 of 5 on localhost.

Hello, World! I am process 3 of 5 on localhost.

Hello, World! I am process 4 of 5 on localhost.

sizePython をインタラクティブに起動するときに > 0を取得するにはどうすればよいですか?

ちなみに、動作しないのではなく実行します./helloworld.pypython helloworld.py

localhost:demo jtlz2$ mpiexec -n 5 ./helloworld.py
--------------------------------------------------------------------------
Failed to find or execute the following executable:

Host:       localhost
Executable: ./helloworld.py

Cannot continue.
--------------------------------------------------------------------------

理由はありますか?ありがとう!

4

1 に答える 1

7

mpirun/から起動されない場合mpiexec、MPI 実行可能ファイルはシングルトンを形成するためMPI_COMM_WORLD、サイズは常に 1 です。

実行可能ファイルがmpiexec見つからない場合、後者には「実行可能」ビットが設定されている必要があります。

$ chmod +x helloworld.py

MPI ジョブを対話的に実行するのは難しいです。ほとんどの MPI 実装はすべてのプロセスに対して出力リダイレクトを実行するため、結合された出力を確認できますが、これは入力リダイレクトには当てはまりません。ランク 0 のみがインタラクティブな入力を受け取ることができます。ただし、できることがいくつかあります。

  • ランク 0 をインタラクティブに実行し、他のランクにスクリプトを実行させます。これにより、他のランクとの通信を探索できます。

    $ mpiexec -np 1 python : -np 4 python script.py

    これにより、インタープリターの 1 つのコピーが対話モードでランク 0 として開始され、次に 4 つのコピーがscript.pyランク 1 から 4 として開始されます。

  • 独自のグラフィカル ターミナル エミュレーターで各ランクと対話的に実行します。たとえば、xterm

    $ mpiexec -np 5 xterm -e python

    のようになります。これにより、5 つの xterm と、それらすべてで Python インタープリターの個別のコピーが開始されます。このアプローチでは、それぞれxtermが X11 ディスプレイ サーバーと通信できる必要があります。つまり、Open MPI やMPICH 派生の実装DISPLAYを使用するなど、環境変数の値を明示的に渡す必要がある場合があります。-x DISPLAY-genv DISPLAY

于 2013-03-30T11:00:43.183 に答える