2013-03-17 119 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