【发布时间】:2012-08-23 12:18:03
【问题描述】:
假设我有 n 个进程,每个进程都拥有一个本地数据,比如一个 int。
现在我想重新实现 MPI_Allreduce() 函数,即计算所有这些 ints 的全局总和,然后将结果总和广播回进程。
我尝试在下面的代码中这样做:
int temp;
int my_sum = temp = my_data;
for (int i = 1; i < size; ++i) {
int partner = (my_rank + 1) % size;
MPI_Sendrecv_replace(&temp, 1, MPI_INT,
partner, 0,
my_rank, 0,
MPI_COMM_WORLD, MPI_STATUS_IGNORE);
my_sum += temp;
}
以便进程以环形方式进行通信,但它是阻塞的。为什么?如何更改代码以使其正常工作?
注意:请不要建议问题的替代(更好)解决方案(显然,其中之一是使用 MPI_Allreduce() 函数)。我的目标是了解为什么这段代码 sn-p 不能按我认为的那样工作。
【问题讨论】:
标签: c parallel-processing mpi