您的位置:首页 > 其它

并行计算学习笔记(MPI)

2017-03-29 08:35 375 查看
/*
MPI点到点阻塞式通信C语言版
*/

#include "mpi.h"                                /*MPI头函数,提供了MPI函数和数据类型定义*/
#include <stdio.h>

int main( int argc, char** argv )
{
int rank;                                   /*进程标识*/
int size;                                   /*总进程数目*/
int senddata,recvdata;                      /*数据缓存*/
MPI_Status status;                          /*mpi状态变量(结构体)*/

MPI_Init(&argc, &argv);                     /*MPI的初始化函数*/
MPI_Comm_rank(MPI_COMM_WORLD, &rank);       /*返回调用进程在给定通信域中的进程标识*/
MPI_Comm_size(MPI_COMM_WORLD, &size);       /*返回通信域包含的进程数*/

/*如果是0号进程,进行消息发送动作*/
if (rank==0){
senddata=9999;
/*MPI_Send([发送]数据缓存地址,发送的数据个数,数据类型,目标进程标识,消息标志,通信域)*/
MPI_Send( &senddata, 1, MPI_INT, 2, 0, MPI_COMM_WORLD);     //向2号进程发送消息
printf("send 9999 rank=%d\n",rank);
senddata=1111;
MPI_Send( &senddata, 1, MPI_INT, 1, 1, MPI_COMM_WORLD);     //向1号进程发送消息
printf("send 1111 rank=%d\n",rank);
}

/*如果是1、2 号进程则接收消息*/
if(rank==2 || rank==1) {
/*MPI_Recv([接收]数据缓存地址,接收的数据个数,数据类型,消息发送源,消息标识,通信域,消息发送进程的状态)*/
MPI_Recv(&recvdata, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
printf("process %d receive message from source %d,tag = %d and data = %d\n", rank, status.MPI_SOURCE, status.MPI_TAG, recvdata);
}

MPI_Finalize(); /*MPI的结束函数*/
return (0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息