首页 > 学院 > 开发设计 > 正文

使用MPI传递类的对象

2019-11-08 03:26:12
字体:
来源:转载
供稿:网友
/* 主要功能: 用于解决MPI无法传递类的对象的问题。*/#include <stdio.h>#include <mpi.h>class Student{ public: int id; char *name; char *addr; Student(){} Student(int id,char *name,char *addr){ this->id = id; this->name = name; this->addr = addr; } void showInfo(int rank){ PRintf("rank = %d, id=%d,name=%s,addr=%s/n",rank,id,name,addr); } };/*主要流程: 在根节点内,生成一个类的对象,然后改变其内容, 最后将改变后的类对象广播到通信组的所有节点。实现步骤: 在每个类中声明与类的属性相对应的临时变量,用于接收根进程分发的数据, 收到数据后,使用临时变量重新构造类的对象。*/ int main(int argc,char *argv[]){ int rank,nproc; char *node_name,*node_addr; //声明每个节点的临时变量 int node_id; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&nproc); int len; char proc_name[MPI_MAX_PROCESSOR_NAME]; //获取处理器名字 MPI_Get_processor_name(proc_name,&len); Student *stu; stu = new Student(10,proc_name,"www.g00gle.com"); stu->showInfo(rank); //为每个节点的临时变量分配空间 node_name = (char *)malloc(sizeof(char)*20); node_addr = (char *)malloc(sizeof(char)*20); if(rank == 0){ stu->name = "zhangsan"; stu->addr = "nowYao"; node_id = stu->id + 1; strcpy(node_name,stu->name); strcpy(node_addr,stu->addr); } //将更新后的数据广播到所有节点 MPI_Bcast(&node_id,1,MPI_INT,0,MPI_COMM_WORLD); MPI_Bcast(node_name,20,MPI_CHAR,0,MPI_COMM_WORLD); MPI_Bcast(node_addr,20,MPI_CHAR,0,MPI_COMM_WORLD); MPI_Barrier(MPI_COMM_WORLD); //重新构造新的对象 Student *stu2 = new Student(node_id,node_name,node_addr); stu2->showInfo(rank); MPI_Finalize(); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表