加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MPI基础知识:MPI_Send()和MPI_Recv()

(2011-07-09 22:08:22)
标签:

mpi

mpi_send

mpi_recv

教育

分类: MPI_OpenMP_CUDA

//以下的例子是进程0向进程1发送b, 而进程1向进程0发送a...大家相互交换数据..主要用于说明MPI_Send()MPI_Recv()

 

//这是点对点的通信,用于一对进程之间的信息交换

//MPI_Send(void *address, int size, MPI_Datatype, int destID  , int tag, MPI_COMM); 

 

//MPI_Recv(void *address, int size, MPI_Datatype, int sourceID, int tag, MPI_COMM, MPI_Status*);

 

 

#include<iostream>

#include<mpi.h>

using namespace std;

 

int main(int argc,char ** argv)

{

         float a = 0 ,b = 0;

 

         int rank,size;

 

         MPI_Status Status;

 

         MPI_Init(&argc,&argv);

 

         MPI_Comm_size(MPI_COMM_WORLD,&size);

 

         MPI_Comm_rank(MPI_COMM_WORLD,&rank);

 

         if(rank == 0)

         {

                   a = 123.0;

                   printf("processID: %d a: %f, b: %f\n",rank,a,b);

 

                   MPI_Send(&a,1,MPI_FLOAT,1,0,MPI_COMM_WORLD);   //向进程1发送a           

 

                   MPI_Recv(&b,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&Status); //接收进程1发送的b 

 

                   printf("processID: %d a: %f, b: %f\n",rank,a,b);

         }

         else

         if(rank == 1)

         {

                   b = 456.0;

                  

                   printf("processID: %d a: %f, b: %f\n",rank,a,b);

 

                   MPI_Send(&b,1,MPI_FLOAT,0,1,MPI_COMM_WORLD);   //向进程0发送b  

 

                   MPI_Recv(&a,1,MPI_FLOAT,0,0,MPI_COMM_WORLD,&Status); //接收进程0发送的a

 

                   printf("processID: %d a: %f, b: %f\n",rank,a,b);

         }

 

         MPI_Finalize();

 

         return 0;

}

 

 

//以下来个更有实用价值的..进程0/1都有同名的变量x,初值不同,然后交换

#include<iostream>

#include<mpi.h>

using namespace std;

 

int main(int argc,char ** argv)

{

         float x;

 

         int rank,size;

 

         MPI_Status Status;

 

         MPI_Init(&argc,&argv);

 

         MPI_Comm_size(MPI_COMM_WORLD,&size);

 

         MPI_Comm_rank(MPI_COMM_WORLD,&rank);

 

         if(rank == 0)

         {

                   x = 123.0;

                   printf("processID: %d x: %f\n",rank,x);

 

                   MPI_Send(&x,1,MPI_FLOAT,1,0,MPI_COMM_WORLD);   //向进程1发送x           

 

                   MPI_Recv(&x,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&Status); //接收进程1发送的x 

 

                   printf("processID: %d x: %f\n",rank,x);

         }

         else

         if(rank == 1)

         {

                   x = 456.0;

                  

                   printf("processID: %d x: %f\n",rank,x);

 

                   MPI_Send(&x,1,MPI_FLOAT,0,1,MPI_COMM_WORLD);   //向进程0发送x  

 

                   MPI_Recv(&x,1,MPI_FLOAT,0,0,MPI_COMM_WORLD,&Status); //接收进程0发送的x

 

                   printf("processID: %d x: %f\n",rank,x);

         }

 

         MPI_Finalize();

 

         return 0;

}

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有