在我的课程中,我的演讲特别推荐使用comm.reduce(小写)来解决特定的问题,但是所有关于MPI reduce语法的引用都是Reduce(大写),就像我在课堂讲稿中找到的所有例子和我自己做的例子一样,所以我不知道参数的精确语法。
在我当前的代码中,我尝试基于gather()命令的语法,该命令给出了:"A = comm.reduce(x_local,MPI.SUM)“,所以我将其放入此代码中,以检查它是否有效:
from mpi4py import MPI
import numpy as np
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
x_local = 5*size
print("on rank:",rank," local value is: ",x_local)
A = np.zeros(size)
if rank == 0:
A = comm.reduce(x_local,MPI.SUM)
print(A)然而,当我尝试在终端中运行这段代码时,它根本就不能工作,我会打印出除rank=0之外的任何等级,但它不会给出任何其他的错误,也不会给出任何反馈,它只是永远在那里,直到我按下crtl+c。我已经把它放在那里大约一个小时了,当我做其他事情的时候,当我回来的时候,它仍然在做同样的事情。我只能假设我的语法是错误的,但是我不知道为什么python会发出一个错误。任何帮助都将不胜感激
(以及一个实际包含reduce和其他mpi函数的大小写实例的链接)
发布于 2018-12-30 23:21:31
您的问题与大写/小写无关。
无论大小写如何,Reduce都是一种集体操作。通信器的所有级别都必须参与调用函数。
关于大写/小写,这是特定于mpi4py的。大写字母的变体使用“内存缓冲区”,而小写字母的变体可以与python对象通信。
另请参阅:https://mpi4py.readthedocs.io/en/stable/overview.html#communicating-python-objects-and-array-data
https://stackoverflow.com/questions/53972088
复制相似问题