Tôi gặp vài vấn đề với chương trình MPI trong C. Tôi muốn gửi hai tin nhắn với MPI_Send từ nô lệ đến chủ (sử dụng MPI_Send, MPI_Irecv và MPI_Test), nhưng chỉ có thông báo đầu tiên hoạt động. Sau đó, tôi đã có một vòng lặp vô hạn và tôi luôn nhận được một tin nhắn từ nô lệ -1 (theo status.MPI_Source).Vòng lặp vô hạn sử dụng MPI_Irecv và MPI_Test
Vì vậy, tôi không hiểu tại sao tôi nhận được tất cả những thông điệp từ một quá trình không rõ (-1) ...
Mã của tôi:
#include <stdio.h>
#include <mpi.h>
#include <sys/time.h>
int main(int argc, char *argv[])
{
int rank, size;
MPI_Status status;
/* Init */
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank != 0) { // Slaves
int buf;
if (rank == 1) {
buf = 1;
MPI_Send(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
if (rank == 2) {
buf = 2;
MPI_Send(&buf, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
}
else { // Master
int sum = 0;
int flag, res;
MPI_Request request;
MPI_Status status;
MPI_Irecv(&res, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &request);
while (1) {
flag = 0;
MPI_Test(&request, &flag, &status);
if (flag != 0) {
printf("recv : %d, slave : %d\n", res, status.MPI_SOURCE);
if (status.MPI_SOURCE != -1)
sum += res;
}
else
printf("fail!\n");
if (sum == 3)
break;
}
printf("sum : %d\n", sum);
}
MPI_Finalize();
return 0;
}
Cảm ơn.
ps: xin lỗi vì tiếng anh của tôi