我编写了一个算法来解决MPI中的问题,并且正在使用不同数量的进程进行一些测试。有趣的是,NP 2的表现优于NP 4或NP 1,这可能与我的实施有关。我想做的是以最简单的形式测量通信成本,也许是递增++的计数器?
我的问题是代码中的哪个位置可以放置计数器?每当程序调用MPI_SEND时?
PS:我知道mpiP,但我相信这个小项目会有点过分。答案 0 :(得分:3)
有趣的部分是你的MPI调用的时间,并且衡量这些调用花费的时间的最简单方法是使用MPI_Wtime()
。因此,只需在两次调用MPI_Wtime()
之间包装通信繁重的代码,然后打印差异。
背景信息:
所有MPI调用都是相对昂贵的功能,因为它们必须满足于网络延迟,因此明智的做法是不使用三个MPI调用。但是这些优化应该从你的代码中清楚,不需要为此进行分析。
在大多数真实世界的程序中,性能影响更大来自同步:在通信伙伴进入各自的呼叫之前,大多数MPI呼叫都无法完成。因此,如果一个进程比其他进程花费的时间长一毫秒,则所有进程通常会延迟该毫秒。这些效果只能从单个MPI调用的执行时间中看到。
答案 1 :(得分:0)
最简单的方法是使用工具。使用a proper MPI performance analysis tool并不是一种过度杀伤,但对于小型项目来说,这是正确的,最好的方式。
显然你不能提供一个我们可以看到的最小例子,你也没有对代码的并行执行有直观和正确的理解 - 所以它绝对足够大,可以从使用适当的工具中获益。
了解并行性能很困难,您不能仅根据本地信息执行此操作。因此,无论如何,您都必须创建并行数据结构,并在代码中引入额外的通信以找出性能问题。所有这些都会使您的代码变得不必要地复杂,甚至可能会通过天真地添加手动分析代码来引入其他性能问题。