在没有 root 权限的情况下使用 C++ 分析多线程代码

Posted

技术标签:

【中文标题】在没有 root 权限的情况下使用 C++ 分析多线程代码【英文标题】:Profiling multithreaded code in C++ without root privleges 【发布时间】:2013-06-16 14:38:47 【问题描述】:

我有一个用 C++ 编写的高度并行化的程序,我正在努力加快它的速度。在进行了看起来很明显的修改之后,我想分析代码以查看时间花在了哪里以及我应该专注于优化的地方。但是,我遇到了一些问题,我似乎无法找到分析代码的好方法。

本来我想使用OProfile,但是这台机器上似乎没有安装内核源代码,而且内核太旧并且没有构建配置文件支持。然后我研究了使用 gprof,但了解到它不能很好地处理多线程代码。我最终选择了 gperftools,它运行良好,但由于它对堆栈帧进行采样,因此似乎只能为我提供有关我的代码时间使用情况的函数级信息。我可以看到我超过 50% 的时间(或采样时间)都花在了一个函数上。但是,我想进一步深入了解该函数/指令的哪个区域占用了大部分时间。但是,我似乎无法弄清楚如何让 gperftools 提供此信息,而且我不知道其他分析工具会(我可以在没有 root 权限的情况下使用/安装)。任何建议将不胜感激。

【问题讨论】:

嗯,dirty-but-effective way,使用 GDB。如果你多次打断它,一半或多或少,你就会清楚地看到发生了什么。 【参考方案1】:

Allinea MAP 会在这里得到你的答案,它对 C++ 多线程代码进行行级和函数级分析,并且可以作为非特权用户安装和使用。

【讨论】:

【参考方案2】:

在我看来,在多线程方面没有什么可以与Intel Parallel Studio 相比的。它在 Linux 上是惊人的免费。唯一不好的“功能” - 它非常大。

【讨论】:

以上是关于在没有 root 权限的情况下使用 C++ 分析多线程代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 root 权限的情况下安装 Perl 模块?

在没有root访问权限的情况下安装zsh? [关闭]

如何在没有 root 权限的情况下在图像文件上安装 grub?

如何在没有 root 访问权限的情况下获取已安装应用程序的 APK?

在没有root权限的情况下实现共享内存

linux下 利用C或C++ 语言调用需要root权限的命令时候,怎么处理。