1

我有一个上三角矩阵和结果向量 b。我的程序需要解决线性系统:

轴 = b

使用管道方法。限制之一是过程的数量小于方程的数量(假设它可以从 2 到 numberOfEquations-1)。

我现在没有代码,我正在考虑伪代码..

我的想法是其中一个过程将创建随机上三角矩阵(A)向量b。假设这是随机矩阵:

1  2  3   4   5   6
0  1  7   8   9   10
0  0  1   12  13  14
0  0  0   1   16  17
0  0  0   0   1   18
0  0  0   0   0   1

并且向量 b 是[10 5 8 9 10 5] 并且我的过程数量少于方程式的数量(假设为 2 个过程)

所以我认为一些进程将从矩阵发送到每个进程行,并从向量 b 发送相关数字。

所以矩阵的最后一行和向量 b 中的最后一个数字将被发送到 process[numProcs-1] (这里我的意思是最后一个进程(进程 1)),然后他计算 X 并将结果发送到进程 0。

现在进程 0 需要计算矩阵的第 5 行,我在这里卡住了。我有由进程 1 计算的 X,但是该进程如何向自己发送矩阵的下一行和相关数字来自需要计算的向量 b?

是否可以?我认为发送给“我自己”是不对的

4

2 回答 2

4

是的,MPI 允许进程向自己发送数据,但是在使用阻塞操作时必须格外小心可能出现的死锁。在这种情况下,通常将非阻塞发送与阻塞接收配对,反之亦然,或者使用诸如MPI_Sendrecv. 向自己发送一条消息通常最终只是将消息从源缓冲区内存复制到目标缓冲区,而不涉及网络或其他重型机器。

不,与自己交流并不是一件坏事。最明显的好处是它使代码更加对称,因为它删除/减少了处理自交互所需的特殊逻辑。在大多数集体通信呼叫中也发生了向自己发送/从自己接收的情况。例如,MPI_Scatter还将部分数据发送到根进程。为了防止一些不必要地复制数据并降低性能的 send-to-self 情况,MPI 允许大多数与通信相关的集合体使用就地模式 ( MPI_IN_PLACE)。

于 2013-11-05T12:14:09.363 回答
1

是否可以?我认为发送给“我自己”是不对的

当然,可以与自己交流。甚至还有一个通讯器:MPI_COMM_SELF。自言自语并不少见。您的设置听起来像是您更愿意使用 MPI 集合。查看 MPI_Scatter 和 MPI_Gather 看看它们是否没有为您提供您正在寻找的功能。

于 2013-11-05T12:12:06.267 回答