2017-08-27 2 views
-1

私はMPI Fortranプログラムをコーディングしていて、3つのランクで異なる長さの3つのベクトルを持っています。あなたは、私はそれを行うことができる方法を教えてもらえMPIすべてのプロセッサからのベクトルを結合する

Rank 0: a = [1 2 3 4 5 3 5 7 9 2 4 6 8 10 12] 

:それらを組み合わせる

Rank 0: a0 = [1 2 3 4 5] 
Rank 1: a1 = [3 5 7 9] 
Rank 2: a2 = [2 4 6 8 10 12] 

:私のような「連結」の方法でそれらを一緒に結合したいと思いますか?

+0

MPI_GatherまたはMPI_Gatherv http://mpitutorial.com/tutorials/mpi-scatter-gather-and-allgatherを達成するために、MPI_Gatherv()を使用することができます/ http://www.mcs.anl.gov/research/projects/mpi/mpi-standard/mpi-report-1.1/node70.htm – alfC

+0

お返事ありがとうございました。私もmpi_gathervを見つけて、sendリンクで与えられた例を読んだ。私はまだ私の場合にそれを正しく行う方法が本当にわからない。あとでmpi_gathervを使うことができるように、私はベクトルの長さをあらかじめ送っておくべきです。それが正しいか ? – ctnguyen

+0

実際に試しましたか?あなたは何と闘いましたか?コード全体をあなたのために書くつもりはありません。さらに、リンクされたページには詳細な例が含まれています。 – Ross

答えて

1

ベクトルはランクに基づいて、異なるサイズを持っているので、あなたが期待される結果

+0

あなたの答えは@Gillesです。私もmpi_gathervを見つけて、sendリンクで与えられた例を読んだ。私はまだ私の場合にそれを正しく行う方法が本当にわからない。あとでmpi_gathervを使うことができるように、私はベクトルの長さをあらかじめ送っておくべきです。それが正しいか ? – ctnguyen

+0

ルートタスク(あなたの例ではランク '0')がすべてのベクトルの長さを知っていない場合は、まずこの情報を収集する必要があります(' MPI_Gather() 'が適切です)。データを 'MPI_Gatherv()'することができます。明確化のために –

+0

ありがとうございます。私はあなたが示唆したようにしました。 Btw、このリンクは私の質問のための優れた例を含んでいます。 https://stackoverflow.com/questions/31890523/how-to-use-mpi-gatherv-for-collecting-strings-of-diiferent-length-from-different – ctnguyen

関連する問題