私は、マスタプロセスからスレーブへの配列に配置されたランダムな値を送る小さなプログラムを書きました。奴隷は少しの数式を数えており、その結果をマスターに返すべきです。今度は、マスターは結果を新しい結果配列に正しい順序で配置する必要があります。私はメッセージタグを使用しています。ここで はメソッドです:メッセージタグを使って正しい順序で値を入れたMPI
スレーブスレーブによってマスタから
void Ccalculation::slaceRecv()
{
MPI_Status status;
MPI_Recv(&slaveTask, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
//here I am creating variable whith tag which I ll be returning
msgTag = status.MPI_TAG;
cout << "msg tag: " << status.MPI_TAG << " number " << slaveTask << endl;
}
をタスクを受け
void Ccalculation::masterSend(int * tasklist)
{
for (int i = 1; i < this->world_size; i++) {
MPI_Send(&tasklist[current], 1, MPI_INT, i, current, MPI_COMM_WORLD);
current++;
}
}
に自分のタスクリストの一つの要素を送信するここでの問題は、解決策を送信
を開始しますマスターwhith特定タグ
void Ccalculation::slaveSend(double solution)
{
MPI_Send(&solution, 1, MPI_DOUBLE, 0, msgTag, MPI_COMM_WORLD);
}
マスターによって溶液を受信し、それが
void Ccalculation::masterRecv(double *solutionTab)
{
double buffer = 0;
MPI_Status status;
for (size_t i = 0; i < this->world_size; i++)
{
MPI_Recv(&buffer, 1, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
solutionTab[status.MPI_TAG] = buffer;
}
}
コードを実行したときの正確な問題は何ですか? 'masterSend'で' current = 0'を初期化していますか? – kraffenetti