使用mpi4py进行分段故障

时间:2015-11-16 22:42:51

标签: python arrays python-2.7 multiprocessing mpi4py

我正在使用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语法是不同的,所以如果有人能够清楚地说明为什么会出现这个错误以及如何解决它,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

通过执行以下操作,我设法解决了我遇到的问题。

Dateparse('EEE MMM dd hh:mm:ss Z yyyy', [YourString])