mpi4py не позволяет мне отправлять и получать массив с dtype = object

У меня есть пустой массив dtype = object, который я пытаюсь отправить и получить с помощью comm.Send() и comm.Recv, но я сталкиваюсь с ошибками и не могу его отладить. Массив, который я пытаюсь отправить, состоит из 2 столбцов: 1 столбца строк и 1 столбца целых чисел.

from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()

data_array = np.empty(100,2), dtype=object)
data_array[:,0] = var_1
data_array[:,1] = var_2

(data_array_0, data_array_1) = np.array_split(data_array, 2)
data_array_0 = np.ascontiguousarray(data_array_0, dtype = object)
data_array_1 = np.ascontiguousarray(data_array_1, dtype = object)


if rank == 0:
    comm.Send(data_array_1, dest=1)

elif rank == 1:
    data_array_1 = np.empty([data_array_row_1, data_array_col], dtype = object)
    comm.Recv(data_array_1, source=0)  # <--- the line that's causing the error

Я получаю следующее сообщение об ошибке:

Traceback (most recent call last):
  File "data_clean_parallel_1.py", line 156, in <module>
    comm.Recv(data_array_1, source=0)
  File "mpi4py/MPI/Comm.pyx", line 283, in mpi4py.MPI.Comm.Recv
  File "mpi4py/MPI/msgbuffer.pxi", line 402, in mpi4py.MPI.message_p2p_recv
  File "mpi4py/MPI/msgbuffer.pxi", line 388, in mpi4py.MPI._p_msg_p2p.for_recv
  File "mpi4py/MPI/msgbuffer.pxi", line 155, in mpi4py.MPI.message_simple
  File "mpi4py/MPI/msgbuffer.pxi", line 101, in mpi4py.MPI.message_basic
KeyError: 'O'

Я действительно не понимаю, что вызывает эту проблему, и есть ли какая-либо возможная альтернатива, где я мог бы отправлять/получать строковые данные с помощью mpi4py.


person Brian Kim    schedule 03.07.2020    source источник
comment
В чем проблема? Вы не понимаете, почему объект dtype нельзя использовать таким образом? или вы не понимаете, почему массив является объектом dtype?   -  person hpaulj    schedule 03.07.2020
comment
Таким образом, объект dtype нельзя использовать с comm.Send и comm.Recv? Если это так, то есть ли способ отправить строковые данные с помощью Send и Recv?   -  person Brian Kim    schedule 03.07.2020


Ответы (1)