【问题标题】:C Program MPI -- simple way of measuring communication cost?C Program MPI——测量通信成本的简单方法?
【发布时间】:2017-04-03 11:57:08
【问题描述】:

我编写了一个算法来解决 MPI 中的一个问题,并且一直在对不同数量的进程进行一些测试。有趣的是,NP 2 的性能优于 NP 4 或 NP 1,这可能与我的实现有关。我想做的是以最简单的形式测量通信成本,也许是一个递增的计数器++?

我的问题是我应该在代码中的哪个位置放置计数器?每当程序调用MPI_SEND?

PS:我知道 mpiP,但我认为这对于这个小项目来说有点过头了。

【问题讨论】:

    标签: c parallel-processing mpi


    【解决方案1】:

    有趣的部分是 MPI 调用的时间,衡量这些调用所用时间的最简单方法是使用 MPI_Wtime()。因此,只需在两次调用 MPI_Wtime() 之间封装您的通信量很大的代码,然后打印差异。


    背景信息:

    所有 MPI 调用都是相对昂贵的函数,因为它们必须满足网络延迟,因此明智的做法是不要使用三个 MPI 调用,只要一个就足够了。但是这些优化应该从您的代码中清楚,无需为此进行分析。

    在大多数实际程序中,更大的性能影响来自同步:大多数 MPI 调用根本无法完成,直到通信伙伴输入各自的调用。因此,如果一个进程比其他进程花费一毫秒的时间,所有进程通常会延迟该毫秒。而且这些效果仅在各个 MPI 调用的执行时间中可见。

    【讨论】:

    • 我的问题是我不知道哪个部分的通信量很大。我有 7 个发送,在某些情况下将解决问题的工作分配给 2-6 个节点。
    • 然后只包装每个电话。作为第一个措施,您可以累积到单个全局变量中并在程序结束时打印它(在每次调用之前使用commTime -= MPI_Wtime();,之后使用commTime += MPI_Wtime();)。然后将得到的时间(你得到多少进程)与总运行时间进行比较以确定影响。如果影响很大(很可能是这种情况),您可以酌情拆分柜台以到达您实际浪费时间的地方。 (顺便说一句:MPI_Receive() 调用和发送的时间。)
    【解决方案2】:

    最简单的方法是使用工具。使用a proper MPI performance analysis tool 并不过分,但即使对于小型项目也是正确且最佳的方法。

    显然,您无法提供一个最小的示例供我们查看,您对代码的并行执行也没有直观和正确的理解 - 所以它绝对足够大,可以从使用适当的工具中受益。

    理解并行性能很困难,您不能仅根据本地信息来做到这一点。因此,无论如何,您都必须创建并行数据结构并在代码中引入额外的通信来找出您的性能问题。所有这一切都使您的代码变得不必要地复杂,您甚至可能会因为天真地添加手动分析代码而引入额外的性能问题。

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2015-07-09
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多