問題タブ [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.

0 投票する
1 に答える
1472 参照

mpi - MPI_RequestはMPIプロセス対象者間でグローバルですか?

MPI_Requestのテーブル(CPUごとに1つのリクエスト)を宣言すると、MPI_Isend / MPI_Irecvを使用するときにグローバルにアクセスできるようになりますか?(MPI環境を初期化した後にどこからでもアクセスできるMPI_commと比較して)

ありがとう。

0 投票する
4 に答える
2098 参照

distributed - MPI に関する最近の本はありません。

Message Passing Interface (MPI) を使用したことはありませんが、最近では Windows HPC Server でその名前が話題になっているのを聞いたことがあります。アマゾンで本があるかどうかをざっと見てみましたが、それらはすべて約7年以上前の日付です. MPI は今でも新しいアプリケーションにとって有効なテクノロジの選択肢ですか? それとも、他の分散プログラミングの代替手段 (DataSynapse GridServer など) に大きく取って代わられていますか?

それは実際には実装ではなく標準であるため、それを学習することで分散プログラミングシステムのより良い設計がもたらされる可能性はどのくらいですか? 代わりに他に見るべきものはありますか?

0 投票する
2 に答える
1452 参照

mpi - mpiexec で strace を使用する

mpiexec (MPICH2、Linux) で開始された MPI 並列ジョブのすべてのプロセスを追跡するにはどうすればよいですか?

-o異なるプロセスからの出力を台無しにします

PS一部の編集者へ:誰がそれを考えるかもしれませんMPICH is the name of the library. MPICH2 is a particular version.. MPICH2 は実際にはMPICH2 is an all-new implementation of MPImpich と mpich2 の両方を使用する必要がありました。したがって、mpich2 を mpich に置き換えることはできません。

0 投票する
2 に答える
2967 参照

.net - .net4.0タスク並列ライブラリとMPI.NET

.net 4.0タスク並列ライブラリは高性能コンピューティング用のMPI.NETに取って代わりますか?

ここにあるMPI.NEThttp ://www.osl.iu.edu/research/mpi.net/svn/は、Microsoftの.NET環境用のMessage Passing Interface(MPI)の高性能で使いやすい実装です。 。MPIは、コンピューティングクラスターなどの分散メモリシステムで実行される並列プログラムを作成するための事実上の標準です。

.NET 4 TPLによると:「タスク並列ライブラリ(TPL)は、.NETFrameworkバージョン4のSystem.ThreadingおよびSystem.Threading.Tasks名前空間のパブリックタイプとAPIのセットです。TPLの目的は開発者は、アプリケーションに並列処理と並行処理を追加するプロセスを簡素化することで生産性を高めます。TPLは、並行性の程度を動的にスケーリングして、使用可能なすべてのプロセッサーを最も効率的に使用します。さらに、TPLは、作業の分割、スレッドのスケジューリングを処理します。 ThreadPool、キャンセルサポート、状態管理、およびその他の低レベルの詳細について。TPLを使用することで、プログラムが実行するように設計された作業に集中しながら、コードのパフォーマンスを最大化できます。」

私の目標は、Windows HPC 2008で実行できるアプリケーションを構築すること です...どちらに進むか?

0 投票する
2 に答える
3476 参照

c - C での MPI_Type_Vector と MPI_Gather の使用

MPIと並行して正方行列を乗算しようとしています。

MPI_Type_vector を使用して正方部分行列 (float の配列) をプロセスに送信し、部分積を計算できるようにします。次に、次の反復で、これらの部分行列は MPI_Type_contiguous として隣接プロセスに送信されます (部分行列全体が送信されます)。この部分は期待どおりに機能しており、ローカルの結果は正しいです。

次に、連続した型で MPI_Gather を使用して、すべてのローカル結果をルート プロセスに送り返します。問題は、最終的なマトリックスが、サブマトリックスごとではなく、行ごとに (明らかに、この方法で) 作成されることです。

最終的な行列を再配置する醜い手順を書きましたが、MPI_Type_vectors を送信する「逆」操作 (つまり、値の配列を送信し、それをサブ配列形式で直接配置する) を実行する直接的な方法があるかどうかを知りたいです。受信配列)。

私の長いテキストを明確にするための例:

A[16] と B[16]

これらは実際には 2D 配列、A[4][4] と B[4][4] です。

乗算する 4x4 行列です。C[4][4] には結果が含まれます。4 つのプロセスが使用されます (0 から 3 までの i を持つ Pi) :

Pi は、subAi[4] と subBi[4] の 2 つの 2x2 サブマトリックスを取得します。それらの製品はローカルに subCi[4] に保存されます。

たとえば、P0 は次のようになります。

A[0]、A[1]、A[4]、および A[5] を含む subA0[4] ;
B[0]、B[1]、B[4]、および B[5] を含む subB0[4]。

すべてが計算された後、ルート プロセスはすべての subCi[4] を収集します。

次に、C[4][4] には以下が含まれます。

[
subC 0 [0]、subC 0 [1]、subC 0 [2]、subC 0 [3]、
subC1[0]、subC1[1]、subC1[2]、subC1[3]、
subC2[0]、 subC2[1]、subC2[2]、subC2[3]、
subC3[0]、subC3[1]、subC3[2]、subC3[3]]

そして、私はそれが欲しいです:

[
subC 0 [0]、subC 0 [1]、subC1[0]、subC1[1]、
subC 0 [2]、subC 0 [3]、subC1[2]、subC1[3]、
subC2[0]、 subC2[1]、subC3[0]、subC3[1]、
subC2[2]、subC2[3]、subC3[2]、subC3[3]]

それ以上の操作なし。誰かが方法を知っていますか?

アドバイスありがとうございます。

「高性能マーク」への回答に情報を追加:

1 さて、私の最初の行列は 2D 配列です (A[4][4] の形をしています)。質問を書きながら短くしたかったのですが、今ではそれは悪い考えでした...

例として、MPI_Type_vector を次のように定義しました。

(ちなみに、フラット化された配列の違いはわかりません)。

2 私は MPI の専門家ではないので、おかしなことをするかもしれません。これは、例に適用された私のコードの一部です(Aのみが処理され、Bは非常に似ています):

ルートからスレーブプロセスへの部分行列の送信:

スレーブが受け取る:

次に、プロセス間の交換は、次の subMatrixLocal の MPI_Send および MPI_Recv を介して行われます。

すべてのローカル操作が完了したら、すべての subC 行列を C に集めます。

前述の結果が得られましたが、これを並べ替える必要があります...

提案されたアルゴリズムについて: 次のステップは、正方行列の積が効率的な GPU で行列の乗算を行うことです。MPI は、行列を CPU から CPU に転送するためにのみ使用されます。もちろん、グローバルな効率性がテストされます。

0 「逆演算も同じ型定義でいい」とおっしゃいましたね。ただし、私の MPI_Vector_type は「大きな」行列では正常に機能していますが、サブ行列で直接使用することはできません (2x2 行列で MPI_Vector_type(2, 2, 4) を適用すると、間違った結果が得られます。定義された配列の「外側」にある最後の 2 つの値...)。別の MPI_Vector_type を作成して送受信する必要があるということですか?

0 投票する
3 に答える
2110 参照

c - MPI ハイパーキューブ ブロードキャスト エラー

MPI を使用して記述された、ハイパーキューブの 1 対 1 のブロードキャスト メソッドがあります。

メインから呼び出すと:

8 つのノードでコンパイルして実行すると、データを受信する前にプロセス 1、3、5、7 が停止したことを報告する一連のエラーが表示されます。

どこが間違っていますか?

0 投票する
2 に答える
249 参照

c++ - clock() の呼び出しを MPI_Wtime() に置き換えた後の即時クラッシュ

ローカル コンピューターで開発している MPI プログラムがありますが、リモート コンピューターで実行する必要があります。以前clock()は時間を測定していましたが、(アーキテクチャがまったく異なるため) リモート マシンでは十分に機能しないことがわかった後、 へのいくつかの呼び出しを に置き換えたところclock()MPI_Wtime()必要な結果が得られました。プログラムは、ローカル マシンとリモート マシンの両方で引き続き実行されます。

ただし、他のすべての呼び出しを に置き換えたところ、ローカル マシンでプログラムを起動すると、すぐにプロセスが終了コード -1073741819 で停止しますclock()。の最初の行にMPI_Wtime()a を入れても出力がないので、私の側のプログラミングの誤りではないと確信していますが、何が問題なのかわかりません。coutmain()

ソース コードの変更によって、変更されたコード (または任意のコード) が実行される前にプログラムが失敗する可能性はありますか?

0 投票する
1 に答える
2629 参照

parallel-processing - MPI ラージ データの全対全転送

MPI の私のアプリケーションには、大きなデータを生成するプロセスがあります。N+1 プロセス (マスター コントロール用に 1 つ、その他はワーカー) があるとします。各ワーカー プロセスは大きなデータを生成し、ファイル 1、ファイル 2、...、ファイル N という名前の通常のファイルに単純に書き込みます。各ファイルのサイズはかなり異なる場合があります。次のジョブを実行するには、すべての fileM をランク M プロセスに送信する必要があります。これは、すべてのデータ転送と同じです。

私の問題は、MPI API を使用してこれらのファイルを効率的に送信する方法です。以前は Windows 共有フォルダーを使用してこれらを転送していましたが、それは良い考えではないと思います。

MPI_file と MPI_All_to_all について考えてみましたが、これらの関数は私の場合にはあまり適していないようです。単純な MPI_Send と MPI_Recv は、すべてのプロセスが大量のデータを転送する必要があるため、使用するのが難しいと思われます。分散ファイル システムは今のところ使用したくありません。

0 投票する
2 に答える
1206 参照

c++ - LAN クラスター内ではなく、インターネット経由で MPI (C++) プログラムを配布できますか?

大規模なクラスターで問題なく動作する MPI コードをいくつか作成しました。クラスタ内の各ノードは同じ CPU アーキテクチャを持ち、ネットワーク化された (つまり「共通」) ファイル システムにアクセスできます (各ノードが実際のバイナリを実行できるようにするため)。ただし、次のシナリオを検討してください。

  • 私のオフィスには、デュアル コア プロセッサ (インテル) を搭載したマシンがあります。
  • 自宅にデュアル コア プロセッサ (amd) を搭載したマシンがあります。

両方のマシンで Linux が実行され、両方のマシンで MPI コードをローカルで正常にコンパイルおよび実行できます (つまり、2 つのコアを使用)。

さて、異なるアーキテクチャを念頭に置き、共有 (ネットワーク) ファイルシステムがないという事実を念頭に置いて、4 つのコアすべてを利用できるように、MPI を介して 2 台のマシンをリンクすることは可能ですか?

もしそうなら、どのように?

ありがとう、ベン。

0 投票する
3 に答える
1132 参照

distributed - MPI (またはその他) でタスクを配布するためのライブラリ?

単一の CPU に限定されず、水平方向にスケーラブルにしたいので、(Amazon の言うように) クラスターに「ブランチ アンド バウンド」を実装することを検討しています。Judith Hippold と Gudula Runger による論文「Task Pool Teams: A Hybrid Programming Environment for Irregular Algorithms on SMP Clusters」があります。これは基本的に、共有メモリの代わりにアドホック ネットワークを除いて、Intel の TBB のようなボトムアップのタスク スティーリング フレームワークです。このライブラリが利用可能であれば、それを使用します (ローカルのスレッド部分を TBB に置き換えます)。残念ながら、私が見つけたどこからでもダウンロードできるようにはなっていないようです。他の実装や類似のライブラリがあるのだろうか?

Microsoft の Task Parallel Library にも同等のものがあるようには見えません。

(「threadpool」の後に (「thread-pool」の前に) 最もよく使用されるバリアントである「taskpool」というタグを作成しようとしましたが、十分なポイントがありませんでした。追加する価値があると思う人はいますか?)

編集:

私はまだ試していませんが、PEBBL (ここでは: software.sandia.gov/trac/acro/wiki/Packages) は非常に高いスケーリングを主張しています。回答者が Wiley の本「Parallel Branch-and-Bound Algorithms」、Crainic、Le Cun、Roucairol、2006 年、El-Ghazali Talbi が編集した「Parallel Combinatorial Optimization」、2006 年から言及している論文は、私が見つけた場所でした。他のライブラリがリストされています。いくつかはより良いかもしれません、私はこれを更新する権利を留保します:)。Google がこれらのライブラリを見つけられなかったのはおかしいです。私の Google が弱かったか、Google 自体が魔法にならないことがあるからです。