有没有办法在运行时对MPI应用进行剖析?- 在运行时使用MPI调用所花费的时间。

问题描述 投票:1回答:1

我想知道是否有一种方法可以测量运行时MPI调用所花费的时间,这样我就可以用它来计算新的负载平衡。因此,我可以用它来计算一个新的负载平衡。

我知道如何使用OpenMPI或英特尔的一些工具来剖析和跟踪程序,但这些都是在运行后使用的。此外,我已经尝试过FPMPI,这不是一个成功的,因为最后一个版本是无法建立。

测量 "手工 "没有任何意义,在我的应用程序,因为它是大的方式。

c++ mpi trace openmpi time-measurement
1个回答
0
投票

首先,你真的需要对MPI这样的低级通信进行剖析吗?你不能简单地给你的高级例程计时吗?

无论如何,编写自己的MPI剖析器是非常容易的。实际上,所有的MPI库(包括Open MPI)都会将他们的函数(例如, MPI_Send)作为相同函数符号的弱别名,前缀为 P (如:。PMPI_Send). 你需要做的就是定义你自己的函数,其原型与MPI库中的函数相同。在里面,更新你的调用计数器,启动定时器,然后调用原来的MPI函数,用一个 P 前缀,并在返回时停止定时器。

extern "C"
int MPI_Send(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm) {
   // Update call counters and start the timer
   calls["MPI_Send"]++;
   timers["MPI_Send"].start();

   // Call the original MPI function
   int result = PMPI_Send(buf, count, dtype, dest, tag, comm);

   // Stop the timer
   timers["MPI_Send"].stop();

   return result;
}

计时器: extern "C" 部分是很重要的,否则如果你用C++写,你就不会覆盖正确的弱符号。

这种覆盖MPI库中符号的能力是标准化的--见 #14.2 剖析接口现行标准版.

© www.soinside.com 2019 - 2024. All rights reserved.