4

我正在寻找适用于 MacOS 上的 C++ 的代码分析/分析工具。我知道有关于这个线程的帖子,但是我需要的应用程序非常具体,所以也许有人可以给我一些更具体的建议。

所以这是我的问题:我正在用 C++ 编写一个科学代码(硕士项目),所以它是一个纯控制台应用程序,没有提供交互性。该代码应该在大规模并行计算机上运行,​​因此我使用 MPI。但是,现在我还没有针对可扩展性进行优化,而只是针对单核性能。由于我不想将整个程序重写为串行程序,因此我只使用带有 1 个线程的 MPI。它工作正常,但优化器显然需要能够处理这个问题。

我要分析什么?好吧,从某种意义上说,代码并不是很复杂,因为它具有非常简单的结构,因此我所需要的只是程序在某些功能上花费多长时间的列表,这样我就知道它在哪里浪费了最多的时间,我可以测量加速我的优化。

感谢所有的想法

4

4 回答 4

3

您应该使用Instruments.app,其中包括 CPU 采样器和线程活动查看器......除此之外。(在 Xcode 中选择“产品 > 配置文件...”)

如果你想要更细粒度的东西,你可以检测你的代码。巧合的是,我为这样的场合写了一组分析宏:)

https://github.com/nielsbot/Profiler

这将显示在检测例程中花费的时间很好的嵌套打印。(该页面上的说明)

于 2013-03-16T21:40:06.437 回答
1

你试过 kcachgrind: http://kcachegrind.sourceforge.net/html/Home.html和 valgrind 吗?

于 2013-03-16T21:04:55.667 回答
1

我可以推荐http://www.scalasca.org/。之后您也可以将其用于并行性能。

于 2013-03-16T21:50:08.693 回答
1

不要寻找“慢功能”,也不要寻找衡量不同部分使用的时间。这些概念是如此间接,以至于几乎无法告诉您要优化什么。

取而代之的是,在挂钟时间拍摄一些频闪 X 光片,了解整个程序在做什么,然后研究每一个,看看为什么程序会花费那一刻的时间。之所以效果更好,是因为它不是用功能性有色眼镜看的。它戴着有色眼镜,你可以判断程序是否需要做它正在做的事情。定位大问题非常准确。测量它们是不准确的,也不需要如此。

当您只是进行测量时会发生这种情况:您会在一堆例程中得到一堆数字。你看着他们说“这是什么意思?”。如果它没有告诉你应该修复什么,你就拍拍自己的后背,说程序必须是最佳的。实际上,您可能可以修复某些问题,但您无法从探查器中弄清楚。更重要的是,如果您确实找到并修复了它,它可以暴露您可以修复的其他内容,从而获得更大的加速。

这就是随机暂停的意义所在。

于 2013-03-16T21:50:17.627 回答