【问题标题】:reduce() and Reduce() (upper and lowercase)reduce() 和 Reduce()(大写和小写)
【发布时间】:2018-12-30 23:21:30
【问题描述】:

在我的课程作业中,我的讲座特别推荐使用 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函数的大写和小写实例的链接)

【问题讨论】:

  • 您是否尝试在减少资本的情况下运行它? (完全免责声明,我对这里发生的事情一无所知)。但是,嘿,它是你的电脑,所有的工具都在你的手中,玩弄它吧!然而,我怀疑不应该有其他事情需要发生吗? (这里什么都不知道。)不知道,但这似乎太简单了。也许是关键的第一步?
  • 是的,我一直在尝试,但它不喜欢它的所有发送都是一个整数,这对于 MPI 命令非常常见,小写命令通常用于值数组而不是更多,而大写命令处理更复杂的数据传输
  • 更多信息:我得到一个元组错误,因为 Reduce() 命令需要至少 2 个维度(允许发送矩阵等),而 reduce() 只使用一个维度(处理只是一个一维数组)。
  • MPI_Reduce() 是一个集体操作,直接结果是它必须由通信器的所有级别调用。您的程序可能会挂起,因为只有排名 0 正在调用 MPI_Reduce()
  • 谢谢,已经解决了,在我修复了所有其他错误之后 numpy 数组,非常感谢

标签: python mpi


【解决方案1】:

您的问题与大小写无关。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2021-02-08
    • 1970-01-01
    • 2017-05-09
    • 2016-05-14
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多