【发布时间】:2015-12-30 12:03:57
【问题描述】:
我刚开始学习 C 语言中的 MPI 编程,我正在进行一项任务,要求我让我的进程将它们的消息发送到下一个排名更高的进程,最后一个进程将其消息发送回进程 0。我已经开始进行测试,但即使使用这个更简单的代码,程序仍然挂起。可能是最后一个进程向零进程发送消息的问题。
这是我的代码:
#include <stdio.h>
#include <string.h> /* For strlen */
#include <mpi.h> /* For MPI functions, etc */
const int MAX_STRING = 100;
int main(void) {
char greeting[MAX_STRING];
int my_rank, p;
/* Start up MPI */
MPI_Init(NULL, NULL);
/* Get the number of processes */
MPI_Comm_size(MPI_COMM_WORLD, &p);
/* Get my rank among all the processes */
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
if (my_rank == 0) {
MPI_Recv(greeting, MAX_STRING, MPI_CHAR, 2,
0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%s\n", greeting);
sprintf(greeting, "Greetings from Dank Meme 0");
MPI_Send(greeting, strlen(greeting)+1, MPI_CHAR, my_rank+1, 0,
MPI_COMM_WORLD);
} else if (my_rank == 1){
MPI_Recv(greeting, MAX_STRING, MPI_CHAR, 0,
0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%s\n", greeting);
sprintf(greeting, "Greetings from Dank Meme 1");
MPI_Send(greeting, strlen(greeting)+1, MPI_CHAR, 2, 0,
MPI_COMM_WORLD);
} else if (my_rank == 2) {
MPI_Recv(greeting, MAX_STRING, MPI_CHAR, 1,
0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%s\n", greeting);
sprintf(greeting, "Greetings from Dank Meme 2");
MPI_Send(greeting, strlen(greeting)+1, MPI_CHAR, 0, 0,
MPI_COMM_WORLD);
}
/* Shut down MPI */
MPI_Finalize();
return 0;
} /* main */
感谢您的帮助!
【问题讨论】:
-
当你的程序运行时,每个进程都阻塞在
MPI_Recv,没有人发送任何东西。每个人都在等待其他人先采取行动;)。 -
谢谢!后来我意识到我的问题是我的代码先接收,而不是发送。
标签: c parallel-processing mpi