Я использую mpi4py для распределения задачи обработки по кластеру ядер. Мой код выглядит так:
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
'''Perform processing operations with each processor returning
two arrays of equal size, array1 and array2'''
all_data1 = comm.gather(array1, root = 0)
all_data2 = comm.gather(array2, root = 0)
Это возвращает следующую ошибку:
SystemError: Negative size passed to PyString_FromStringAndSize
Я считаю, что эта ошибка означает, что массив данных, хранящихся в all_data1
, превышает максимальный размер массива в Python, что вполне возможно.
Я попытался сделать это небольшими частями, как показано ниже:
comm.isend(array1, dest = 0, tag = rank+1)
comm.isend(array2, dest = 0, tag = rank+2)
if rank == 0:
for proc in xrange(size):
partial_array1 = comm.irecv(source = proc, tag = proc+1)
partial_array2 = comm.irecv(source = proc, tag = proc+2)
но это возвращает следующую ошибку.
[node10:20210] *** Process received signal ***
[node10:20210] Signal: Segmentation fault (11)
[node10:20210] Signal code: Address not mapped (1)
[node10:20210] Failing at address: 0x2319982b
за которым следует целая куча неразборчивой информации о пути и финальное сообщение:
mpirun noticed that process rank 0 with PID 0 on node node10 exited on signal 11 (Segmentation fault).
Кажется, это происходит независимо от того, сколько процессоров я использую.
Для подобных вопросов в C решение, похоже, слегка меняет способ анализа аргументов в вызове recv
. В Python синтаксис отличается, поэтому я был бы признателен, если бы кто-нибудь мог прояснить, почему появляется эта ошибка и как ее исправить.
<mpi4py.MPI.Request object at 0x7f7b125690e0>
Как мне распаковать этот объект? Это может быть причиной проблемы. - person berkelem   schedule 17.11.2015comm.Isend([array1, MPI.FLOAT], dest = 0, tag = rank + 1)
иcomm.Irecv([partial_array1, MPI.FLOAT], source = proc, tag = proc + 1)
после инициализации пустого приемного буфера. Я до сих пор не понимаю, как и почемуcomm.Isend()
иcomm.isend()
отличаются, поэтому любое понимание будет оценено. Любопытно, что я все еще получаю ту же ошибку ошибки сегментации, даже после того, как все процессоры успешно завершили код. Что может быть причиной этого? - person berkelem   schedule 17.11.2015