MPI C SendRecV矩阵乘法

时间:2013-03-17 07:08:58

标签: c mpi

我需要将一个矩阵的部分从根进程发送到所有其他进程,以便它们可以对其进行计算。然后我需要接收计算并在根进程中聚合它们。我会使用Scatter,但矩阵只能存在于根进程(作业规定)中。

我知道MPI_Sendrecv_replace或MPI_Sendrecv将是有用的功能。但是,我需要将矩阵的一部分发送到其他进程,让它们进行计算,然后返回。如果我需要在发送和接收之间进行计算,我如何使用Sendrecv函数。我无法将其概念化。

例如:

Process 0 sends to Process 1,2,3
Process 1,2,3 compute sections of matrix
Process 0 receives all of the computations

如果sendrecv函数是一个整体,怎么会发生这种情况?

此外,我认为使用单独的发送和接收操作肯定会导致死锁(除非我辛苦地管理调用),因为我将在nxn矩阵上执行此操作并且它可能很大。

如何使用Sendrecv功能?提前谢谢!

1 个答案:

答案 0 :(得分:1)

MPI_Sendrecv并不意味着你来回发送一些东西。 MPI_Sendrecv而是在处理器A处执行send command,在处理器B处执行receive command。(如果您想从A向B发送内容)

您需要1 Sendrecv

Process 0 sends to Process 1

然后你进行计算,另一个Sendrecv用于:

Process 0 receives from 1