【问题标题】:MPI C SendRecV matrix multiplicationMPI C SendRecV 矩阵乘法
【发布时间】:2013-03-05 16:51:18
【问题描述】:

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

【问题讨论】:

    标签: c mpi


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2018-09-08
      • 2017-10-30
      • 2013-12-18
      • 2012-11-04
      • 2014-04-21
      • 2015-04-03
      • 2017-10-12
      • 2016-01-23
      相关资源
      最近更新 更多