У меня проблема с моим кодом. Я хочу, чтобы этот код отправлял элементы массива определенным работникам. Рабочие 0-7 должны получить 12, 18, 30, 36, 48, 54, 66, 72. Поэтому я использовал отправку и получение, чтобы сделать это, но когда я выполняю свой код, я просто получаю часть 66, а не 72. Так вот одного не хватает и он не запускается с 0. Может вы мне поможете.
Вот мой код:
import numpy as np
import pandas as pd
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
a=np.random.rand(336,1) #array
sizedarray=[]
starting_point=0
ending_point=12
sizes=[]
q=[]
if rank == 0:#masterrrank
for i in range(0,size-1):
take_out=0
sizedarray.append(a[starting_point:ending_point])
starting_point=ending_point
if i % 2 == 0:
ending_point= ending_point + len(sizedarray[i]) + 6
sizes.append(len(sizedarray[i]))
elif i % 2 !=0:
ending_point=len(sizedarray[i]) +12+ ending_point
sizes.append(len(sizedarray[i]))
comm.send(a[take_out:sizes[i]+take_out],dest=i+1)
take_out=take_out+sizes[i]
else:
p=comm.recv(source=0)
print(len(p)," ", rank)
и мой результат:
48 5
36 4
54 6
30 3
12 1
18 2
66 7
p=a[take_out:sizes[i]+take_out]
. если вы хотите отправить его, остерегайтесь взаимоблокировки; вы можете использоватьsendrecv()
или неблокирующиеisend()
и/илиirecv()
(иwait()
для выполнения запроса). - person Gilles Gouaillardet   schedule 14.05.2020scatterv()
- person Gilles Gouaillardet   schedule 14.05.2020