我最近开发的应用程序使用多个处理器,它们通过消息传递接口标准进行通信,而某些部分涉及多个异步运行的线程(std::async
)。
我正在运行带有 g++-4.6.3 和 openMPI 的 Ubuntu 12.04 x86。
将 添加-p -g -pg
到编译器标志并运行 gprof 不会产生任何有用的输出,它基本上表示一切都很快完成了。
如何分析此类程序?
我最近开发的应用程序使用多个处理器,它们通过消息传递接口标准进行通信,而某些部分涉及多个异步运行的线程(std::async
)。
我正在运行带有 g++-4.6.3 和 openMPI 的 Ubuntu 12.04 x86。
将 添加-p -g -pg
到编译器标志并运行 gprof 不会产生任何有用的输出,它基本上表示一切都很快完成了。
如何分析此类程序?
为此,我建议由我的雇主开发的Allinea MAP 。它分析 MPI 应用程序并显示源代码中的哪些地方占用了应用程序时间。有一些关于内存使用、MPI 通信和计算成本的非常有用的图表 - 它允许您轻松放大问题区域以提高性能。
您不必重新编译您的应用程序即可开始使用它:它会在运行时自动添加分析。
它是商业软件 - 但有 30 天的试用期。
对于多线程程序,没有必要带出大 MPI 配置文件枪。我使用英特尔的 VTune,它在分析多个线程方面做得非常出色。您可以获得 30 天的试用期。