如何在MPI_Reduce例程中将根进程rank从0改为其他值(如15)?
修改MPI_Reduce的根进程Rank值
MPI_Reduce的第6个参数就是根进程的rank值,直接将该参数替换为你需要的数值(比如15)即可完成修改,你给出的示例代码已经是正确的写法,具体解释如下:
示例代码参数拆解
MPI_Reduce(myvalue, sum, 1, MPI_REAL, MPI_SUM, 15, new_communicator);
myvalue:每个进程参与归约的输入变量sum:仅根进程用来存储归约结果的输出变量(非根进程可将此参数设为NULL,无需分配空间)1:单次归约的元素数量(此处为单个实数)MPI_REAL:参与归约的数据类型MPI_SUM:归约操作类型(此处为求和)15:你指定的根进程rank,替换默认的0即可new_communicator:所有参与归约的进程所属的通信子
关键注意事项
- 必须保证指定的rank(如15)在当前通信子的有效范围内,即满足
0 ≤ rank < 通信子内进程总数,否则会触发MPI运行错误 - 只有根进程(rank=15)的
sum变量会被赋值为最终归约结果,其他进程的该变量不会被修改 - 所有参与归约的进程必须调用参数一致的MPI_Reduce(非根进程的输出变量除外),否则会导致未定义行为
内容的提问来源于stack exchange,提问作者quantax
相关产品推荐
相关产品推荐

