我认为这引出了更普遍的问题。 假设我有一个内部动态分配内存的自定义类。 完成了复制和交换以及所有这些操作以避免内存泄漏到一个处理器内部。有没有办法通过MPI发送和接收该课程? (我不确定哪一个应该是标题。有人经验过请帮我标题)
但对我的具体情况而言。 这是我的代码。 这里是对象事件。我需要的数据。函数事件循环处理它并填充直方图e2。我将taskid和numtasks传递给函数,因为它基于它创建了不同数据部分的直方图。我最终想要所有这一切。
int main(){
MPI_Init(NULL,NULL);
int taskid,numtasks;
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
//Irrelevant
.
.
TH1F* e2 = new TH1F("e2","e2 Title",50,0,14);
dataevents::event t;
EventLoop(t,e2,a,taskid,numtasks);
//a is somewhere in the irrelavent code don't mind. e2 gets filled inside the EventLoop function.
if(taskid != MASTER_MPI){
MPI_Send(e2,e2->Sizeof(),MPI_BYTE,MASTER_MPI,0,MPI_COMM_WORLD);
}
if(taskid == MASTER_MPI){
TH1F* e2_main = new TH1F("e2","e2 Title",50,0,14);
TCanvas *c1= new TCanvas("c1","e2",600,400);
e2_main = e2;
for(int k=1;k<numtasks;k++){
TH1F* e2_temp =new TH1F("e2","e2 Title",50,0,14);
我认为这是我的错误所在。我现在确定如何初始化缓冲存储器以进行接收。 我试过了Malloc,我尝试了MPI_Buffer Attach。似乎没什么用。
其余代码:
MPI_Recv(e2_temp,e2_main->Sizeof(),MPI_BYTE,k,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
std::cout<<" This could be the error";
e2_main-> Add (e2_main,e2_temp,1,1);
}
//Master Specific code.. Irrelevant
}
MPI_Finalize();
}