一个进程可以向自己发送数据吗?使用 MPICH2

Is a process can send to himself data? Using MPICH2

本文关键字:数据 MPICH2 使用 自己 一个 可以向 进程      更新时间:2023-10-16

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

斧头 = b

使用管道方法。其中一个约束是进程的数量小于进程的数量方程(假设它可以是从 2 到数字方程-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 中的最后一个数字将被发送到进程[numProcs-1](这里我的意思是最后一个进程(进程1))比他计算 X 并将结果发送到进程 0。

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

可能吗?我认为发送给"我自己"是不对的

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

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

可能吗?我认为发送给"我自己"是不对的

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