Python:mpi4py中的comm.Scatterv(),为什么值在分散后发生变化

时间:2018-11-19 14:36:00

标签: python numpy mpi4py

我希望将不同长度的np.array散布到不同的等级,但是我发现值已更改,我不知道为什么。 我尝试了很多次,并简化了代码,如下所示。

import numpy as np
import random
from random import seed
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()

num = 4
N = num // size + (num % size > rank)

position_x = np.zeros(num,dtype=float)

seed(10059)
for i in range(num):

    position_x[i] = round(random.uniform(-5,5),3)


print(position_x)

if rank == 0:
    share1 = position_x

else:
    share1  = None


count = []
for i in range(size):
    if i <= num%size-1:
        count += [num//size + 1]
    else:
        count += [num//size]

pos1 = np.zeros(N, dtype='f')

comm.Scatterv([share1, count, MPI.FLOAT], pos1, root=0)

print(pos1,'from ',rank)

3个处理的结果如下所示。

[-2.275  4.238 -1.637  0.981]
[5177.344] from 1
[-2.275  4.238 -1.637  0.981]
[ 4.172325e-08 -2.034375e+00] from 0
[-2.275  4.238 -1.637  0.981]
[2.264875] from 2

我不知道这些奇怪的数字是从哪里来的。如果正确,结果应为[-2.275 4.238] from 0[-1.637] from 1[0.981] from 2。 有人有主意吗?非常感谢。

———————————————————————————————————————————— >

更新:

我发现np.array中的数字是否为浮点数,将出现此问题。我尝试将DATATYPE更改为MPI.INTMPI.F_FLOAT,但仍然无法使用。

这似乎是由random引起的,但我需要随机生成该位置。 我真的不知道如何纠正它。

0 个答案:

没有答案