首页 > 解决方案 > reduce() 和 Reduce()(大写和小写)

问题描述

在我的课程作业中,我的讲座特别推荐使用 comm.reduce(lowercase) 来解决一个特定的问题,但是所有对 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函数的大写和小写实例的链接)

标签: pythonmpi

解决方案


您的问题与大写/小写无关。

无论大小写如何,Reduce 都是一项集体操作。通讯器的所有等级都必须参与调用该函数。

关于大写/小写,这是特定于 mpi4py 的。大写变体使用“内存缓冲区”,而小写变体可以通信 python 对象。

另请参阅:https ://mpi4py.readthedocs.io/en/stable/overview.html#communicating-python-objects-and-array-data


推荐阅读