example1

来源:互联网 发布:qq飞车ce数据 编辑:程序博客网 时间:2024/05/15 03:57
//Writed by YaoPu, Oct 10 2016//Connect via yaopu@iccas.ac.cn#include<stdio.h>#include"mpi.h"#include<string.h>int master_io(void);int slave_io(void);int main(int argc, char **argv){int rank,size;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);printf("********************rank=%d*************************\n",rank);if(rank==0)master_io();elseslave_io();MPI_Finalize();return 0;}#define MSG_EXIT 1#define MSG_PRINT_ORDERED 2#define MSG_PRINT_UNORDERED 3int master_io(void){int i,j,size,nslave,firstmsg,rank;char buf[256],buf2[256];MPI_Comm_rank(MPI_COMM_WORLD,&rank);printf("****************io io io rank= %d io io io******\n",rank);MPI_Status status;MPI_Comm_size(MPI_COMM_WORLD,&size);nslave=size-1;while(nslave>0){MPI_Recv(buf,256,MPI_CHAR,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&status);switch(status.MPI_TAG){case MSG_EXIT:nslave--;break;case MSG_PRINT_UNORDERED:fputs(buf,stdout);break;case MSG_PRINT_ORDERED:firstmsg=status.MPI_SOURCE;for (i=1;i<size;i++){if(i==firstmsg)fputs(buf,stdout);else{MPI_Recv(buf2,256,MPI_CHAR,i,MSG_PRINT_ORDERED,MPI_COMM_WORLD,&status);fputs(buf2,stdout);}}break;}}}int slave_io(void){char buf[256];int rank;MPI_Comm_rank(MPI_COMM_WORLD,&rank);sprintf(buf,"Hello from slave %d, ordered print\n",rank);MPI_Send(buf,strlen(buf)+1,MPI_CHAR,0,MSG_PRINT_ORDERED,MPI_COMM_WORLD);sprintf(buf,"Goodbye from slave %d,ordered print \n",rank);MPI_Send(buf,strlen(buf)+1,MPI_CHAR,0,MSG_PRINT_ORDERED,MPI_COMM_WORLD);sprintf(buf,"I am exiting (%d) ,unordered print\n",rank);MPI_Send(buf,strlen(buf)+1,MPI_CHAR,0,MSG_PRINT_UNORDERED,MPI_COMM_WORLD);MPI_Send(buf,0,MPI_CHAR,0,MSG_EXIT,MPI_COMM_WORLD);} 

0 0
原创粉丝点击