【问题标题】:A sequential-parallel MPI algorithm: how to achieve this behavior using MPI?顺序并行 MPI 算法:如何使用 MPI 实现这种行为?
【发布时间】:2020-11-24 10:04:10
【问题描述】:

我有以下问题,想知道如何在 MPI-Fortran 中实现。

假设我的集群中有 N0 个节点,给定一个区间 (1,N),我将其划分为 N0 个段,记为 (i1,i2) 并假设每个 (i1,i2) 的计算时间为 T ,并行完成。现在,如果我将每个子间隔 (i1,i2) 分成 N0 个较小的子间隔,让我们称为 (a1,a2),在给定时间,我想按顺序处理每个 (i1,i2),但每个(a1,a2) 并行,(i1,i2) 的计算时间是否为 T/N0,即相对于第一个分区显着减少?如果是这样,我怎样才能在 MPI 中实现这个想法?

感谢您的建议和帮助。

为了更新帖子,我提出了以下示意图。我希望它足够容易理解,在哪里

  • i : 子区间的索引 (i1,i2)
  • rank:这是当前节点的rank
  • sub_sub_interval(rank, i):包含区间 (i1,i2) 的所有子区间 (a1,a2) 的变量。

.

do i = 0, number_machine-1

   call MPI_BARRIER(MPI_COMM_WORLD, ierr)

   start = MPI_Wtime()

   call compute_my_quantity(A, sub_interval(i),
        sub_sub_interval(rank,i))

   end = MPI_Wtime()

   if (rank /= 0) then 
      call SEND_my_quantity(rank, A)
   else 
      do i_prime = 1, number_machine-1
         call RECEV_my_quantity(i_prime, A_sub(i_prime))
      end do
   end if
end do

我得到的是:每个 (a1,a2) 测量的时间仍然与

   start = MPI_Wtime()

   call compute_my_quantity(A, sub_interval(rank))

   end = MPI_Wtime()

   if (rank /= 0) then 
      call SEND_my_quantity(rank, A)
   else 
      do i_prime = 1, number_machine-1
         call RECEV_my_quantity(i_prime, A_sub(i_prime))
      end do
   end if

也许你能告诉我这个算法在概念上有什么问题,使得 (a1,a2) 所需的时间与 (i1,i2) 相同?

【问题讨论】:

  • 如果我理解正确(我可能没有正确理解),您的问题可以改写为:将问题分解为许多小块以便分发到进程是比解决方案更快的途径将其分解为更少的大包裹?现成的答复将是:否。尽量减少您的程序所进行的通信量。
  • 请记住,阿姆达尔定律为 any 并行程序设置了限制。对于涉及 MPI 的特定情况,您还需要考虑等级之间通信所需的时间。
  • 是的,你是对的。我也注意到与我上面最初的帖子不同的算法。无论如何,与我的顺序代码相比,我确实使用 12 个节点及时获得了 10 倍。所以这是令人鼓舞的。最初,我确实天真地假设与您的问题相反。这导致上述组织效率低下。

标签: fortran mpi


【解决方案1】:

据我了解,

你有一些任务(比如 N)被分成 N0 个段,每个段执行一些 N/N0 个任务。

在策略 1 中,您将其分配给 N0 个(或更多)等级并并行工作。 在策略 2 中,您从 N 个任务中选择一个任务并将该任务分配给 MPI 等级。同样,每个任务都是按顺序执行的。

从理论上讲,策略 1 总是比策略 2 更快,因为通信会带来潜在的开销。在策略 2 中,会有很多(比策略 1 多 N0 倍)的通信。所以你的应用性能会下降。

理想的方法是使用混合编程模型,您可以在其中使用 MPI 在节点之间分配任务,并在每个节点中使用一些共享内存范例 (openMP) 来加快执行速度。基本上,它是您的策略 1 和策略 2 的组合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多