C Program MPI - 测量通信成本的简单方法?

时间:2016-11-19 19:57:19

标签: c parallel-processing mpi

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

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

PS:我知道mpiP,但我相信这个小项目会有点过分。

2 个答案:

答案 0 :(得分:3)

有趣的部分是你的MPI调用的时间,并且衡量这些调用花费的时间的最简单方法是使用MPI_Wtime()。因此,只需在两次调用MPI_Wtime()之间包装通信繁重的代码,然后打印差异。

背景信息:

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

在大多数真实世界的程序中,性能影响更大来自同步:在通信伙伴进入各自的呼叫之前,大多数MPI呼叫都无法完成。因此,如果一个进程比其他进程花费的时间长一毫秒,则所有进程通常会延迟该毫秒。这些效果只能从单个MPI调用的执行时间中看到。

答案 1 :(得分:0)

最简单的方法是使用工具。使用a proper MPI performance analysis tool并不是一种过度杀伤,但对于小型项目来说,这是正确的,最好的方式。

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

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