問題タブ [boost-mpi]
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.
c++ - Boost.MPI/Boost.Interprocess - プロセスが同じマシンで実行されているかどうかを検出する方法は?
したがって、boost.mpi を使用して、クラスター内の 2 台のマシンでアプリを実行します。それぞれに 8 つのコアがあり、16 のプロセスが開始されます。私のプロセスは、どのクラスターで実行されているかをどのように確認できるのでしょうか? どうやってマシンに名前を付けて保存するのですか?
c++ - VisualStudio2010を使用してWindowsでOpenMPIを使用してboost::mpiライブラリを構築する方法
Open MPI 1.5.4(64ビット)をインストールし、bjamを使用してBoostライブラリ(1.48)を再構築しようとしています。
明示的なコンパイラパスを使用してmpi行を使用して追加することにより、user-config.jamファイルを変更しました(ただし、mpic ++はすでにPATH環境変数に含まれています)。
次に、コマンドプロンプトから次のコマンドを実行しようとしました。
残念ながら、ビルドプロセスにはさらに多くのヒントが必要です。エラー報告の一部は次のようになります。
WindowsでOpenMPIを使用してBoostMPIをコンパイルできた人はいますか?私は何かが足りないのですか?
c++ - c ++:グローバル変数としてのMPIコミュニケーター
MPIワールドコミュニケーターが関数/クラスメンバー関数でアクセスできるようにする必要があります。ただし、設計/慣例により、MPI環境とコミュニケータは常にの先頭で定義および初期化されますint main()
。
コミュニケーターへのグローバルポインターを使用することを考えることができる唯一の単純な解決策。
誰かがより良い方法を知っていますか?グローバルポインタソリューションを使用するのは危険ですか?
この問題は、必要最低限のMPIとBoost :: MPI(以下で使用)にも同様に当てはまります。
私が提案した解決策の例(未テスト):
と
c++ - 「サブ」ベクトルと「連結」ベクトルを取得します
だから私は並列プログラム(boost.mpi)を書いていて、ベクトル全体を作成するためにアセンブルできるベクトルの断片(std :: vectorのように)を渡したいと思っています。
これを行うために、私は2つのことを実行できるようにしたいと思います。
ベクトルの一部を取得します。つまり、ベクトルに800個の要素がある場合、要素200〜299(または2つのint変数で定義される任意のインデックス)を含むサブベクトルを作成するための最良の方法は何ですか。
ベクトルを一緒に追加して、新しい、より長いベクトルを作成できる演算子を作成したいと思います。基本的に、std :: plus()(文字列を連結できます)が提供するのと同じ機能が必要ですが、ベクトル用です。この演算子を二項演算子として渡すことができる必要があります(std :: plus()と同じ型である必要があります)。
これで少しでも助けていただければ幸いです。
parallel-processing - MPI_Barrier()を使用してパフォーマンスを向上させ、バッファーの問題を回避しますか?
パフォーマンスを改善し、より高い反復で発生するバッファーの問題を回避するために、このようなことを行うことはできますか?MaxIterations = 6000
c++ - ブール値を使用した all_reduce
all_reduce 関数を使用して各プロセッサからブール値を収集し、ブール値のいずれかが true (つまり、「or」演算子) の場合はそれらを true に削減しようとしています。しかし、これに適した構文を見つけるのに問題があります。私が今持っているのは
これを実行しようとすると、次のコンパイラ エラーが発生します。
or() の代わりに ||() を使用してみましたが、それも機能しません。多分私は何かを逃していますか?それとも、私がこれを行うために行かなければならない別の方法はありますか?
c++ - c++ boost MPI & threading - シリアル化エラー:アドレスがマップされていません
私は困惑しています。 all_gather
プリミティブ (例: int
) では機能しますが、単純な STL コンテナーでも失敗します。valgrind は、コンテナーが割り当てられていない/初期化されていないと主張していますが、それは正しくないようです。
要約すれば:
- 私は、openMP でいくつかのマルチスレッドを実行してから、スレッドを再結合します。
- シリアルでは、`boost::mpi::all_gather
all_gather
.std::map
MPI ランクはスレッドではありません。(2 つの MPI ランクがあり、各 MPI ランクには 4 つのスレッドがあります)。 - 次に、さらに (分離された) マルチスレッドを実行するつもりです。
とても簡単に思えます...ここで何が起こっているのでしょうか?
main.cpp
Conn_Comp.cpp
valgrind は、 of が無効な読み取りになると不平を言いvector
ますmap
。ただし、これvector
は呼び出しの直前に作成されたall_gather
ものであるため、明らかにスコープ内にあり、並列スレッド領域にはありません。選択された valgrind エラー出力:
ブースト ヘルプ ページの推奨事項に基づいて、MPI_Init_thread を使用します。
uint
上で述べたように、マップの代わりにプリミティブ (つまり のみ) を使用すると、正常にall_gather
動作します。マップが失敗する理由 boost serialize
STLコンテナをシリアル化するためのメソッドがすでにあるので、それは問題ではありません...
すべての値を保持するベクトルは、すべてを保持するのに十分な大きさになるように自動的にサイズ変更されることにも注意してくださいall_gather
(実装を確認しました)。all_gather
とにかく、自分で初期化しても失敗します。
最後に、(適切に割り当てられた)単純な古い配列を使用してもstd::map<uint,uint> *
、同じ問題が発生します。
c++ - recvとsendが一致した場合、mpiリクエストは終了しますか
2つの一致する非ブロッキング送信および受信操作から1つの要求オブジェクトのみをチェックするだけで十分ですか。
これは私のプログラムでリクエストオブジェクトを処理する労力を減らすので素晴らしいでしょう。
ブーストmpiの小さな例を次に示します。
c++ - MPI収集/操作の混乱を減らしますか?
ブースト チュートリアルには、収集操作と削減操作の例があります。収集のコードは次のとおりです。
reduce の例は次のとおりです。
これらの例の両方で、次のような if/else 条件があります。
ここで私が理解できないのは、if の集団操作と else の whats の違いです。パラメータの数に違いはあるのですが、ロジックがどのように機能するのかよくわかりません。
ありがとう
libstdc++ - Boost-MPI HelloWorld コンパイルの問題
編集: 解決済み、正しくないブースト設定 /facepalm
古いシステム/クラスターに boost-mpi をインストールしようとしています。
boost をインストールして bjam --with-mpi を使用した後、boost-mpi セットアップ チュートリアルに付属する hello_world の例をコンパイルしようとしました。mpic++ を使用して bjam の mpi-autoconfig を提供し、次を使用してコンパイルする場合:
次のエラーが表示されます。
ということで、bjamでビルドしたときにGLIBCXX3.4.9が見つかったに違いないと推測したのですが、
使った
そして、それぞれに GLIBCXX の最新バージョンとして 3.4.8 しかありませんでした。
私はこの問題についてかなり混乱しています。どんな助けでも大歓迎です!