問題タブ [mpi4py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python から、1 つのプロセスを使用して HDF5 と MPI で大きなファイルを読み書きする
h5py および mpi4py を介して並列 HDF5 を使用して大規模なデータセットをファイルに書き込む場合 (また、C から直接 HDF5 および MPI を使用する場合も可能です)、単一のプロセスで mpio ドライバーを使用すると、次のエラーが発生します。
OSError: データ書き込みの準備ができません (サイズから size_i に変換できません)
少なくともコンテンツが double 配列の場合、許可されるデータセットの制限は 4GB のようです。より多くのプロセスを使用してワークロードを共有する場合、または mpio ドライバーを使用せずに単一の CPU で実行する場合、より大きなデータセットは正常に機能します。
どうしてこれなの?size
とはsize_i
ポインタ型であり、前者は 4GB に対応するものよりも大きなアドレスを保持できませんdouble[]
か? 一般に複数のプロセスを使用するため、このエラーはおそらく最終的には深刻な問題にはなりませんが、単一のプロセスのみを使用してもコードが機能するようにしたいと考えています。
mpi4py - mpi4py グループは、独自のコミュニケーターを非集合的に作成できません
ランクのグループに、mpi4py で独自のコミュニケーターを作成させようとしています。これが可能であるかのようには見えませんが、MPI-3 標準はそのような操作をサポートしています。
ありがとうございました
python - mpi4py は Yosemite では動作しません
PythonでMPIを使用する方法を学ぼうとしています。
Python 2.7.8 :: Anaconda 2.1.0 と共にインストールされた mpi4py を使用して helloworld スクリプトを実行しようとすると、次のエラーが発生します。
conda-packaged mpi4py をアンインストールし、pip を使用してインストールしてみました。インストールに失敗し、次のエラー メッセージが表示されました:
いろいろ調べた結果、ここに示されている手動インストールを試みましたが、ダイスはありませんでした。
助けてください!
解決済み:
Anaconda はまだ Yosemite で動作する mpi4py をパッケージ化していません。こちらのcondaコマンドでインストールできます。
python - MPI: 1 つのプロセスで他のすべてのプロセスを終了させる方法 - python -> fortran
個別のコアへの並列尤度呼び出しを開始する MPI 対応の python MCMC サンプリング コードがいくつかあります。これは (必然的に - 質問しないでください) 拒否サンプリングであるため、次の反復を開始するために成功する np サンプルの 1 つだけが必要です。
これを、可能性が f2py でラップされた fortran サブルーチンを呼び出す新しい問題に適用しました。この場合、反復ごとに、他の np-1 プロセスは、それらの np-1 の 1 つが既に受け入れられている場合でも、最も遅い (場合によっては非常に遅い) 結果が返されるのを待ちます。
したがって、次の反復を開始できるように、(速度の点で) 勝利していないすべてのプロセスにメッセージを渡して終了させる必要があると思われます。
Python コードは次のようになります。サンプラーは PyMultiNEST です。
ブロードキャストはマスター プロセスを経由する必要がありますか?
ここで注意が必要なのは、F90 コードでキル信号を受信する方法です。おそらく、コードが常にリッスンしている場合(whileループ?)、速度が大幅に低下します-しかし、とにかく次のようなものを使用する必要があります:
そして、メッセージが受信されたら、そのプロセスを強制終了する最善の方法は?
最後に、F コードで次の反復を正常に再起動したり、新しいプロセスを生成したりするために何かをする必要がありますか?
ありがとう!
python - Cython を使用して MPI コミュニケーターを返す C++ 関数をラップする
入力を受け取らず、MPI コミュニケーターを返す C++ 関数をラップしようとしています。
フー。
私は次のことを試しました:
ソース.pyx
このコードはコンパイルされ、このクラスを継承する Python コードを書くことができました。しかし、Python レベルで getMPIComm にアクセスしようとすると、セグメンテーション違反が発生し、valgrind によって次のエラーが表示されます。
getMPIComm() を適切にラップしなかったということですか? 誰も私がそれにアプローチする方法を知っていますか?
python - Windows 7 でプロセス間の mpi4py spawn 通信が失敗する
私の目標は、python スクリプトが別のプロセスで他の python スクリプトを開始できるようにすることです。つまり、スクリプトを n 個のプロセスに分散させたいと考えています。それを達成するために、ドキュメントに記載されている mpi4py spawn の例を実行しようとしています ( http://mpi4py.scipy.org/docs/usrman/tutorial.htmlを参照)。ただし、この例は次のメッセージで失敗します。
MPI プロセスの少なくとも 1 つのペアが、MPI 通信のために相互に到達できません。これは次のことを意味します... このエラーは、'self' BTL を指定するのを忘れた結果である場合があります。... MPI ジョブは中止されます。
私のインストールは、openMPI 1.6.1 と最新の mpi4py インストールを備えた Windows 7 マシン上にあります。
私の場合のコードは次のとおりです。 master.py:
worker.py:
エラーを生成する行は次のとおりです。
スクリプトを実行するコマンドは、cmd プロンプトにあります。
python - MPI_Sendrecv で recvbuf を操作しますか?
MPI 関数を使用して、MPI_Sendrecv
プロセス間でデータの配列を通信します。私は mpi4py を使用して Python でこれを行いますが、私の質問は使用する言語とは無関係であると確信しています。
私が本当に望んでいるのは、別のプロセスに存在する配列を既存のローカル配列に追加することです。これはすべてのプロセスで行う必要があるため、MPI_Sendrecv
関数を使用して配列を一度に送受信します。次に、受信した配列をrecvbuf
ローカル配列に追加して完了です。
ただし、別の配列を用意し、既存のデータを上書きせずrecvbuf
にローカル配列に直接データを受け取るだけでなく、何らかの操作を使用して更新する (私の場合は追加)という手順を省くことができればよいでしょう。
私が探しているのは、複合MPI_Sendrecv
/MPI_Reduce
関数だと思います。このような関数は MPI に存在しますか?
python - Python mpi4py で multiprocessing.pool を使用すると、メモリを割り当てられないというエラーが生成されます
私はコンピューターのクラスターで作業しており、最近、Python で並列プログラミングを使い始めました。
私の現在の理解では、mpi4py は異なるノード間の作業を管理するのに役立ち、マルチプロセッシングはノードのコアで作業を管理します。
実行中のプロシージャの数に基づいて、大きな for ループをパーツに分割しました。
次に、ノードのcpu_countによってプロセスのプールを生成しようとし、それらに作業を与えました。コードは次のとおりです。
私の問題は、コードが p = Pool(processes=cpu_count()) に達した瞬間に、「メモリを割り当てられません」というエラーが生成されることです。トレースバックは、Python が multiprocessing.pool を使用してメモリを割り当てることができないのと同じですが、解決策は役に立ちません。
ヒント/ヘルプ/説明をいただければ幸いです