我需要将矩阵的各个部分从根进程发送到所有其他进程,以便它们可以对其进行计算。然后我需要接收计算并在根进程中聚合它们。我会使用 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 功能?