2013-03-17 161 views
0

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

我知道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

MPI_Sendrecv并不表示您来回发送内容。 MPI_Sendrecv而执行send command在处理器A和receive command在处理器B.(如果你想从一个送东西B)

需要1 Sendrecv为:

Process 0 sends to Process 1 

然后你做的计算和另一种为Sendrecv为:

Process 0 receives from 1