简单的MPI程序 [英] Simple MPI Program

查看:91
本文介绍了简单的MPI程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试做一些MPI,这是一个使用MPI_Send,MPI_Recv的简单程序(是的,阻止).等级0将消息发送到所有其他进程,其他进程则接收它.但是,我的MPI_Send永不返回.我在这里想念什么吗?谢谢!

I am trying to do some MPI, and here is a simple program using MPI_Send, MPI_Recv (yes, blocking). Rank 0 sends messages to all other processes and the others receive it. However, my MPI_Send never returns. Am I missing something here? Thanks!

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include"mpi.h"

int main(int argc, char **argv)
{

int rank, size, i;
MPI_Status status;
char message[20];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
strcpy(message, "Hello, world");
if (rank==0){
   for(i=1;i<size;i++){

         printf("I am sending %s\n", message);
         MPI_Send(message, 23, MPI_BYTE, 0, 7, MPI_COMM_WORLD);
         printf("Sending node=%d, message=%s\n", rank, message);
 }
}
else{
                     MPI_Recv(message, 23, MPI_BYTE, MPI_ANY_SOURCE, 7, MPI_COMM_WORLD,&status);
                     printf("Receiving node=%d, message=%s\n", rank, message);
 }
MPI_Finalize();
return 0;
}

推荐答案

您正在向自己发送消息:

You are sending the message to yourself:

MPI_Send(message, 23, MPI_BYTE, 0, 7, MPI_COMM_WORLD);

我相信这应该是

MPI_Send(message, 23, MPI_BYTE, i, 7, MPI_COMM_WORLD);

这篇关于简单的MPI程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆