2

我有一个维度为 (N,M) 的 C 有序矩阵

mat = np.random.randn(N, M)

其中我想通过持久 MPI 请求将一发送到另一个节点。但是,使用mpi4py,

sreq = MPI.COMM_WORLD.Send_Init((mat[:,idx], MPI.DOUBLE), send_id, tag)

由于切片不连续而失败。有人可以建议一种解决方法吗?我相信 CMPI_Type_vector允许stride在创建类型时指定 a 。我怎样才能做到这一点mpi4py

4

1 回答 1

0

创建一个发送缓冲区!看这个例子:

  1 #!/usr/bin/python2
  2 # -*- coding: utf-8 -*-
  3
  4 from mpi4py import MPI
  5 import numpy as np
  6
  7 comm = MPI.COMM_WORLD
  8 rank = comm.Get_rank()
  9
 10 matrix = np.empty((5, 10), dtype='f')
 11 for y in xrange(len(matrix)):
 12     for x in xrange(len(matrix[0])):
 13         matrix[y,x] = rank * 10 + x * y
 14
 15 sendbuf = np.empty(5, dtype='f')
 16
 17 #column 1
 18 sendbuf[:] = matrix[:,1]
 19
 20 result = comm.gather(sendbuf, root=0)
 21
 22 if rank == 0:
 23     for res in result:
 24         print res

这会给你:

$ mpirun -np 4 column.py
[ 0.  1.  2.  3.  4.]
[ 10.  11.  12.  13.  14.]
[ 20.  21.  22.  23.  24.]
[ 30.  31.  32.  33.  34.]
于 2013-09-20T11:41:48.227 回答