有没有一种方法可以将MPI_Reduce与发送缓冲区的动态大小一起使用?
我想使用“MPI_Reduce”函数,为每个进程提供数量可变的元素 比如说 我们有4个进程,其中分配了一个动态大小的缓冲区有没有一种方法可以将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),并使用该缓冲区来检索值从各个过程中 有一条路可
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中,没有一种还原变体可以处理每列不同数量的元素。它不知道在归约操作中缺少操作数时要填写什么。不过,正如您所建议的,写起来非常简单:
- 确定最大缓冲区大小
- 在每个列组上分配最大大小的缓冲区,在本地缓冲区中复制,填充还原操作的中性元素
- 在大小相同的缓冲区上运行缩减
MPI_reduce()
可以满足您对reduce
的期望吗?我想可以,但我不是这方面的专家。我相信,通过定义我的操作,我可以实现我的目标。否则,你有什么办法可以建议我吗?