我有一个高度并行化的程序,我用C ++编写,我正试图加快它。在进行了看似显而易见的修改之后,我想分析一下代码,看看花时间在哪里以及我应该集中精力进行优化。但是,我遇到了一个问题,因为我似乎无法找到一个分析代码的好方法。
最初,我想使用OProfile,但似乎内核源代码没有安装在这台机器上,并且内核太旧而且没有使用分析支持构建。然后我研究了使用gprof,但了解到它不能很好地处理多线程代码。我最终确定了gperftools,它运行良好,但由于它采样堆栈帧,似乎只给我功能级有关我的代码的时间使用情况的信息。我可以看到超过50%的时间(或采样时间)都花在了一个功能上。但是,我想进一步深入了解该函数/指令的哪个区域占用大部分时间。但是,我似乎无法弄清楚如何让gperftools提供这些信息,而且我不知道其他的分析工具(我可以使用/安装没有root权限)。任何建议都将不胜感激。
答案 0 :(得分:2)
Allinea MAP会得到你的答案,它会对C ++多线程代码进行行级和功能级别分析,并且可以作为非特权用户安装和使用。
答案 1 :(得分:0)
在我看来,在多线程中没有什么可以与Intel Parallel Studio进行比较。它在Linux上令人惊讶地免费。唯一不好的“功能” - 它非常大。