【发布时间】:2021-03-12 21:46:31
【问题描述】:
我正在使用 MPI4PY 将 n/p 列分散到两个输入数据进程。但是,我无法按照我的意愿发送列。为了得到最终评论中报告的结果,我必须对代码进行哪些更改?
矩阵是:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]
[13, 14, 15, 16]
那么,n=4 和 p=2。每个进程将分别有 2 列。
这是我的代码:
# Imports
from mpi4py import MPI
import numpy as np
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
rows = 4
num_columns = rows/size
data=None
if rank == 0:
data = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
recvbuf = np.empty((rows, int(num_columns)), dtype='int')
comm.Scatterv(data, recvbuf, root=0)
print('Rank: ',rank, ', recvbuf received:\n ',recvbuf)
我得到以下输出:
Rank: 0 , recvbuf received:
[[1 2]
[3 4]
[5 6]
[7 8]]
Rank: 1 , recvbuf received:
[[ 9 10]
[11 12]
[13 14]
[15 16]]
我想得到以下输出:
Rank: 0 , recvbuf received:
[[1 2]
[5 6]
[9 10]
[13 14]]
Rank: 1 , recvbuf received:
[[ 3 4]
[7 8]
[11 12]
[15 16]]
【问题讨论】:
-
numpy 数组存储在行中。一种选择是转置矩阵或将其存储主要列。另一种选择是使用 MPI 派生的数据类型来描述列。
-
你能给我一个示例代码吗,我会感兴趣的
-
这是一个(非常)常见的问题,你会在这个网站上找到几个很好的答案。
标签: python matrix parallel-processing mpi mpi4py