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).
これは、使用しているプロセッサの数に関係なく発生するようです。
recv
C での同様の質問の場合、解決策は、呼び出しの引数が解析される方法を微妙に変更しているようです。Python では構文が異なるため、このエラーが表示される理由と修正方法を明確にしていただけると幸いです。