有没有一种方法可以将MPI_Reduce与发送缓冲区的动态大小一起使用?

有没有一种方法可以将MPI_Reduce与发送缓冲区的动态大小一起使用?,c,mpi,reduce,openmpi,C,Mpi,Reduce,Openmpi,我想使用“MPI_Reduce”函数,为每个进程提供数量可变的元素 比如说 我们有4个进程,其中分配了一个动态大小的缓冲区 P (0) size buffer = 21 P (1) size buffer = 24 P (2) size buffer = 21 P (3) size buffer = 12 我想减少数值​​处理器上这些元素的排序为0 在我看来,我想分配一个接收缓冲区,其大小等于一个进程要接收的最大对象数(在本例中为24),并使用该缓冲区来检索值​​从各个过程中 有一条路可

我想使用“MPI_Reduce”函数,为每个进程提供数量可变的元素

比如说

我们有4个进程,其中分配了一个动态大小的缓冲区

P (0) size buffer = 21

P (1) size buffer = 24

P (2) size buffer = 21

P (3) size buffer = 12
我想减少数值​​处理器上这些元素的排序为0

在我看来,我想分配一个接收缓冲区,其大小等于一个进程要接收的最大对象数(在本例中为24),并使用该缓冲区来检索值​​从各个过程中

有一条路可以进去 在不增加太多执行时间的情况下,可以做什么


我使用的是C语言中的OpenMPI 2.1.1,谢谢。

在MPI中,没有一种还原变体可以处理每列不同数量的元素。它不知道在归约操作中缺少操作数时要填写什么。不过,正如您所建议的,写起来非常简单:

  • 确定最大缓冲区大小
  • 在每个列组上分配最大大小的缓冲区,在本地缓冲区中复制,填充还原操作的中性元素
  • 在大小相同的缓冲区上运行缩减

您希望从这样的缩减中得到什么语义?I一个结构数组。我只需要对每个元素进行迭代,以将信息存储在hashmap中。我希望通过逐进程接收结构来迭代数据,以避免分配与所有元素之和一样大的缓冲区。您确定标准
MPI_reduce()
可以满足您对
reduce
的期望吗?我想可以,但我不是这方面的专家。我相信,通过定义我的操作,我可以实现我的目标。否则,你有什么办法可以建议我吗?