c++代码分析/分析Mac和MPI

C++ Code profiling/analysis for Mac and MPI

本文关键字:Mac MPI 分析 代码 c++      更新时间:2023-10-16

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

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

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

谢谢你的建议

您应该使用Instruments。app包含一个CPU采样器和线程活动查看器…除此之外。(在Xcode中选择"Product> Profile…")

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

https://github.com/nielsbot/Profiler

这将显示一个很好的嵌套打印在仪表例程中花费的时间。

您是否尝试过kcachgrind: http://kcachegrind.sourceforge.net/html/Home.html with valgrind ?

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

不要寻找"慢函数",也不要寻找测量不同部分使用的时间。这些概念是间接的,对于告诉你应该优化什么几乎是无用的。

相反,用频闪x射线,在墙上时钟的时间,观察整个程序正在做什么,并研究每一个,看看为什么程序会花费那个瞬间。这个效果更好的原因是它不需要戴功能性有色眼镜。它是带着特定颜色的眼镜看的,你可以判断程序是否需要做它正在做的事情。它在定位大问题方面非常准确。测量它们是不准确的,也不需要。

当你只是做测量时,会发生这样的事情:你得到了一堆例程上的一堆数字。你看着它们,然后问:"这是什么意思?"如果它没有告诉你应该做什么,你就拍拍自己的背,说这个程序一定是最优的。事实上,可能有些东西是你可以修复的,但你无法从侧写器中发现它。更重要的是,如果你找到它并修复它,它可以暴露你可以修复的其他东西,以获得更大的加速。

这就是随机暂停的作用