【发布时间】: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 数组,非常感谢