一个过程可以发送给自己的数据吗?使用MPICH2

时间:2013-11-05 08:27:49

标签: c++ mpi pipeline mpich

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

Ax = 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中的最后一个数字将被发送到 进程[numProcs-1](这里我的意思是最后一个进程(进程1)) 而不是他计算X并将结果发送到过程0。

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

有可能吗?我不认为发送给“我自己”

是正确的

2 个答案:

答案 0 :(得分:4)

是的,MPI允许进程向自己发送数据,但是当使用阻塞操作时,必须特别注意可能的死锁。在这种情况下,通常将非阻塞发送与阻塞接收配对,反之亦然,或者使用MPI_Sendrecv之类的呼叫。向自己发送消息通常最终会将消息简单地从源缓冲区内存复制到目标缓冲区,而不涉及网络或其他繁重的机器。

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

答案 1 :(得分:1)

  

有可能吗?我不认为发送给“我自己”

是正确的

当然,可以与自己沟通。甚至还有一个沟通者:MPI_COMM_SELF。和自己说话并不常见。 你的设置听起来像你宁愿使用MPI集体。看一下MPI_Scatter和MPI_Gather,看看它们是否没有为您提供您正在寻找的功能。