如何使用comm.Scatterv在python中分散numpy数组 [英] How to scattering a numpy array in python using comm.Scatterv
本文介绍了如何使用comm.Scatterv在python中分散numpy数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正准备编写一个基于MPI的代码,以便使用python和MPI4py进行一些计算.但是,按照该示例,我无法将一个numpy向量散布到核心中.这是代码和错误,有人可以帮助我吗?谢谢.
I am tring to write a MPI-based code to do some calculation using python and MPI4py. However, following the example, I CANNOT scatter a numpy vector into cores. Here is the code and errors, is there anyone can help me? Thanks.
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]
谢谢.
推荐答案
数据类型不正确.我应该指定数组的类型:
The data type is not correct. I should specify the type of the array:
d1 = np.arange(1, n+1, dtype='float64')
这篇关于如何使用comm.Scatterv在python中分散numpy数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文