小编典典

如何使用comm.Scatterv在python中分散numpy数组

python

我正准备编写一个基于MPI的代码,以便使用python和MPI4py进行一些计算。但是,按照该示例,我无法将一个numpy向量散布到核心中。这是代码和错误,有人可以帮助我吗?谢谢。

import numpy as np
from mpi4py import MPI

comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
n = 6

if rank == 0:
    d1 = np.arange(1, n+1)
    split = np.array_split(d1, size)
    split_size = [len(split[i]) for i in range(len(split))]
    split_disp = np.insert(np.cumsum(split_size), 0, 0)[0:-1]

else:
#Create variables on other cores
    d1 = None
    split = None
    split_size = None
    split_disp = None

split_size = comm.bcast(split_size, root = 0)
split_disp = comm.bcast(split_disp, root = 0)
d1_local = np.zeros(split_size[rank])
comm.Scatterv([d1, split_size, split_disp, MPI.DOUBLE], d1_local, root=0)
print('rank ', rank, ': ', d1_local)

错误结果是:

rank  2 :  [  2.47032823e-323]
rank  3 :  [  2.96439388e-323]
rank  0 :  [  4.94065646e-324   9.88131292e-324]
rank  1 :  [  1.48219694e-323   1.97626258e-323]

谢谢。


阅读 202

收藏
2021-01-20

共1个答案

小编典典

数据类型不正确。我应该指定数组的类型:

d1 = np.arange(1, n+1, dtype='float64')
2021-01-20