c++ - 在 MPI 中重载运算符 ()
问题描述
希望你在这些时候做得很好。
我正在尝试用 C/C++ 编写一个并行求解器,并在进程 (p) 上分布一个数组。
试图重载运算符'()';为了从各个进程返回分布式数组的本地值,我有一个函数如下:
**double&** operator()(int r, int c)
{
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
int globalIndex = r * mcols() + c;
if (globalIndex >= lo && globalIndex <= (lo + bloc))
**return localData [ globalIndex % lo];**
}
问题出现在突出显示的部分,我希望只有一个进程(具有值的进程)返回它,但是所有进程都尝试返回一些值。我最终得到一个 mpi 运行时错误,其中进程有一个没有返回值的函数(当条件失败时)。
(1) 有没有一种方法可以让我有选择地选择一个特定的进程来执行一个函数 (2) 或者有没有一种方法可以让我退出一个函数而不返回一个值。(3) 这是一个语义问题,有没有办法处理这种情况
解决方案
您可以返回指针,而不是引用。
double* operator()(int r, int c)
{
int rank = MPI::COMM_WORLD.Get_rank();
int size = MPI::COMM_WORLD.Get_size();
int globalIndex = r * mcols() + c;
if (globalIndex >= lo && globalIndex <= (lo + bloc))
return &localData [ globalIndex % lo];
return nullptr;
}
推荐阅读
- python - 如何使用 python 命令行将多个文件(.nii 格式)作为输入文件传递?
- vb.net - 如何在我的操作系统中创建安装应用程序的格式?
- javascript - Javascript 自动关闭表单
- wordpress - 更改最近查看的插件显示的产品页面上的信息(woocommerce)?
- c# - 如何生成 SCRAM-SHA-256 以创建 Postgres 13 用户
- github - 我想使用 github 操作测试我的工具功能
- python - Dask - 大型合并和 map_partitions/apply - 挂在最后几个任务上
- jwt - 使用 Cognito 的用户池作为 API 网关的授权方时验证了哪些声明
- android - 始终授予位置返回许可
- javascript - 无法更改 this.state 属性:无法读取未定义的属性“setState”