2017-12-09 13 views
1

私は大きな行列のドット積を決定するためにMPIを利用するプログラムを作成しています。 MPI_Send & MPI_Recvを使用してデータを送受信する方法を決定する際に問題があります。CでのMPI INT配列

私はマスター3つのスレーブからベクトルを受信して​​いる4 = NRCのテストを実行している

MPI_Send(vector,nrc,MPI_INT,MASTER,123,MPI_COMM_WORLD); 
MPI_Recv(vector, nrc, MPI_INT, i, 123, MPI_COMM_WORLD, MPI_STATUS_IGNORE); 

を送受信したいサイズnrcのアレイint* vectorを有します。しかし、結果はゴミです。

vector [ 255992420 255992420 255992420 255992420 ] 
vector [ -260683762 -260683762 -260683762 -260683762 ] 
vector [ 2018561464 2018561464 2018561464 2018561464 ] 
+1

これまで明らかに間違ったことはありませんでしたが、あなたの投稿を編集して[最小限の完全で検証可能な例](https://stackoverflow.com/help/mcve)を追加できますか? –

答えて

0

私は問題を発見しました。これはsend recv関数ではなく、意図したとおりに動作します。

行列の初期化関数に問題がありました。

は、もともと私はidがもはや0私は、マスタースレーブブロックの外にそれらを移動するとき0,1,2など

にIDを設定しif id==masterif id==slaveブロックの内部にこれらのinit関数、でしたいませんでした1,2、それはごみでした。したがって、idを使って行列を初期化すると、それらもガーベッジになりました。