当源代码不可用时,有啥好的分析工具可以使用?

Posted

技术标签:

【中文标题】当源代码不可用时,有啥好的分析工具可以使用?【英文标题】:What's a good profiling tool to use when source code isn't available?当源代码不可用时,有什么好的分析工具可以使用? 【发布时间】:2009-02-11 14:15:42 【问题描述】:

我有一个大问题。我的老板对我说他想要两个“神奇的黑匣子”: 1-接收微处理器的东西,例如输入和返回,例如输出,MIPS和/或MFLOPS。 2- 接收 c 代码的东西,比如输入和返回,比如输出,可以在性能方面表征代码的东西(比如 uP 在一段时间内执行代码必须具有的必要 MIPS)。

所以我认为第一个“黑匣子”可能是 EEMBC 或 SPEC 的基准……不同的 uP,返回每个 uP 的 MIPS/MFLOPS 的基准相同。第一个问题没问题(我希望)

但是第二个……第二个黑匣子是我的噩梦……我发现唯一的事情是使用分析工具,但我问了一个特定的分析工具。 有没有人知道一个分析工具,它可以像输入一样具有简单的 c 代码,并像输出一样向我提供我的 c 代码的性能特征(或调用某些汇编指令的时间)?

真正的问题是我们必须为特定 c 代码选择正确的 uP...但是我们想要为我们的 c 代码量身定制的 uP...所以如果我们知道 MIPS(以及 uP 的架构结构,内存结构...) 以及我们的代码需要什么

谢谢大家

【问题讨论】:

【参考方案1】:

我必须同意亚当的观点,尽管我会更客气一点。编译器优化仅在热点代码中很重要,即 a) 不调用函数和 b) 占用大量时间的紧密循环。

在积极的方面,这是我的建议:

在处理器上运行 C 代码,任何处理器。在该处理器上,找出最耗时的。

您可以为此使用分析器。我更喜欢的简单方法是在调试器下运行它并手动停止它,多次(如 10 次),每次都记下调用堆栈。我想代码中有些东西占用了很大一部分时间,比如 50%。如果是这样,您将看到它在大约该百分比的样本上执行该操作,因此您不必猜测它是什么。

如果某些特殊处理器可以帮助该活动,请尝试使用该处理器。

重要的是不要猜测。如果你说“我认为这需要一个 DSP 芯片”,或者“我认为它需要一个多核芯片”,那都是猜测。猜测可能是正确的,但可能不是。可能是您永远猜不到的最耗时的事情,例如内存管理或 I/O 格式化。性能问题很擅长瞒着你。

【讨论】:

【参考方案2】:

没有。如果有人制作了一个可以分析(非平凡的)源代码并告诉您其性能特征的工具,那将是常见的地方。即每个人都会使用它。

在针对特定目标架构编译源代码之前,您将无法确定其整体性能。例如,一个针对 n 个处理器的并行编译器可能能够将 O(n^2) 算法更改为 O(n) 之一。

【讨论】:

亲爱的 Mitch Wheat,非常感谢,但我会提出一个新问题...当我寻找分析工具时,我已经看到了 simics...是吗?我认为这个工具可以很好地获取有关不同 uP 性能的一些信息......你认为 samwe 与否?在此先感谢马尔科【参考方案3】:

你找不到工具来做你想做的事。

您唯一的选择是交叉编译代码并在模拟器上针对您正在运行的体系结构对其进行分析。分析高级代码的问题是编译器进行了一系列非平凡的优化,您需要知道特定的编译器是如何做到的。

这听起来很愚蠢,但为什么要让你的代码适合一个 uP 和一个 uP 适合你的代码呢?如果您正在编写信号处理,请购买 DSP。如果你正在构建一个 SCADA 盒子,那么看看 Atmel 或 ARM 的东西。您是否正在构建具有用户界面的通用设备?查看 PPC 或 X86 兼容的东西。

简单地说,选择一个适合并提供您需要的功能的血腥架构。选择处理器之前的优化是迟缓的(非常粗略地解释 Knuth)。

将架构修复为大致合适的东西,大致计算出处理要求(您可以手动草拟一个估计值,这在查看 C 代码时总是太高),然后购买一个匹配的 uP。

【讨论】:

以上是关于当源代码不可用时,有啥好的分析工具可以使用?的主要内容,如果未能解决你的问题,请参考以下文章

针对c语言的程序,有啥好的测试工具

无线调试有啥好的工具,可以看到各种数据包?空口抓包怎么弄?

有啥好的工具可以重构 Perl Web 代码吗? [关闭]

监控tomcat运行情况,有啥好的工具

有啥好的 C++ 项目构建工具可以替代 make 吗? [关闭]

ruby 1.9 和 RSpec2 有啥好的突变测试工具吗?