我正在开发一款生成C++代码的编译器。在以下情况下:
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0){
auto i = function();
// do something
MPI_Bcast(&i, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
else{
auto i;
MPI_Bcast(&i, 1, MPI_INT, 0, MPI_COMM_WORLD);
cout << i;
}
变量“i”的类型在编译时确定,MPI是否有一种通用类型可以广播此类变量?如果没有,我该如何广播这些变量?而且,由于简单地声明auto i;
是不允许的,所以我应该如何接收这些变量。
i
的 类型 在 编译时 就已知。 - Bathshebaauto i
没有被初始化为任何值(这就是为什么类型在编译时已知) - eduffyi
的类型是function()
的返回类型。 - eduffydecltype(function()) i;
。例如,auto mdt = boost::mpi::get_mpi_datatype(i);
与MPI_Bcast((void*)(&i),..., mdt, ...);
结合使用(详见我的答案)。 - Daniel Langr