gpt4 book ai didi

C++ MPI_Bcast 类

转载 作者:行者123 更新时间:2023-11-28 06:48:11 24 4
gpt4 key购买 nike

我在使用 MPI_Bcast 时遇到问题。一个处理器初始化类,然后必须将其发送给其他处理器。这是我的课:

class A{

private:

unsigned rows, cols;
std::vector<int> elem;

public:

//default costructor
A(): rows(1), cols(1), elem(1,0){
}

//costructor
A(unsigned r, unsigned c):
rows(r), cols(c){
elem.resize(rows*cols);
for(unsigned i=0; i<rows*cols; i++)
elem[i]=i+1;
}

//return the address of an element
int* give_address(unsigned i){
return &elem[i];
}

//destructor
~A(){}

};

这就是我主要做的事情:

int main(int argc, char **argv){

MPI_Init(&argc, &argv);

int rank, np;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&np);

A a;

if(np==1){

std::cout<< "Only one!" << std::endl;

}else{

if(rank==0){
a=A(3,3);
}

MPI_Bcast(a.give_address(0),3*3,MPI_INT,0,MPI_COMM_WORLD);

}

MPI_Finalize();

return 0;

}

但是 Bcast 不起作用,并给出了段错误!不知道哪里出了问题...

最佳答案

如果处理器秩不为 0,则矩阵 a 的大小为 1x1。处理器 1、2、3... 的缓冲区无法容纳处理器 0 广播的所有数据。您必须将 a 初始化为在其他处理器上也具有适当的大小。

编辑:为了更清楚,接收处理器上的 a.give_address(0) 指向的数组必须至少具有大小计数(在您的情况下计数为 3*3)。

关于C++ MPI_Bcast 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com