c++ MPI_Bcast class
c++ MPI_Bcast class
我有一个问题使用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(){}
};
这是我在main中所做的:
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)在接收处理器上指向的数组必须至少是大小count(其中count在您的情况下是3*3)。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- C++ class template
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- Clearing Class Foo with new(pFoo) Foo()
- C++ class vs a library
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 使用"class"关键字,后跟未声明的标识符
- VSCode - C++对"CLASS::FUNCTION"的未定义引用