1
Я пытаюсь отправить буфер слева направо (0-> 1, 1-> 2 2-> 3 и т. Д.). Я уверен, что процессы отправляются и получаются от правильного партнера, но код зависает или выдает ошибку seg.Почему MPI_Isend висит здесь?
#include "mpi.h"
#include <iostream>
int main(int argc, char *argv[])
{
int comm_rank, num_procs, recieve1, send1;
int buffer[10];
MPI_Request request, request2;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
send1 = (comm_rank + 1) % num_procs;
recieve1 = comm_rank - 1;
if (recieve1 < 0)
recieve1 = num_procs - 1;
//std::cout << "Comm Rank = " << comm_rank << "\trecieve1 = " << recieve1 << "\tsend1 = " << send1 << std::endl;
if (comm_rank == 0)
send1 = 1;
if (comm_rank == num_procs-1)
recieve1 = num_procs-2;
if (comm_rank != 0)
{
MPI_Irecv(buffer, 10, MPI_INT, recieve1, 123, MPI_COMM_WORLD, &request);
std::cout << comm_rank << " <- " << recieve1 << std::endl;
}
if (comm_rank != num_procs-1)
{
MPI_Isend(buffer, 10, MPI_INT, send1, 123, MPI_COMM_WORLD, &request2);
std::cout << comm_rank << " -> " << send1 << std::endl;
}
MPI_Wait(&request, &status);
MPI_Wait(&request2, &status);
MPI_Finalize();
return 0;
}
Ahh спасибо, я вижу! –
@MichaelPortobello: Инициализировать как 'request', так и' request2' 'MPI_REQUEST_NULL'. Таким образом, вы можете безоговорочно называть 'MPI_Wait'. –