当源代码不可用时,使用什么是好的分析工具?

时间:2009-02-11 14:15:42

标签: performance profiling

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

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

但是第二个......第二个黑盒子是我的噩梦......我发现的唯一一件事就是使用分析工具,但我会问一个特定的分析工具。 是否有人知道一个分析工具,可以像输入一样使用简单的c代码,并且像输出那样给出了我的c代码的性能特征(或者调用某些汇编指令的时间)?

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

感谢所有人

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你找不到一个可以做你想做的工具。

您唯一的选择是交叉编译代码并在仿真器上为您正在运行的体系结构对其进行概要分析。分析高级代码的问题是编译器进行了一堆非常重要的优化,您需要知道特定编译器是如何做到的。

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

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

将架构修改为大致合适的东西,大致计算出处理要求(你可以手工划分估算,在查看C代码时总是太高)并购买一个匹配的uP。

答案 2 :(得分:0)

我必须同意亚当,尽管我会对此更加仁慈。编译器优化仅在热点代码中起作用,即a)不调用函数的紧密循环,以及b)占用大部分时间。

从积极的方面来说,这就是我的建议:

  • 在处理器,任何处理器上运行C代码。在该处理器上,找出花费最多时间的内容。

您可以使用分析器。我更喜欢的简单方法是在调试器下运行它并手动暂停它,多次(如10)并且每次都写下调用堆栈。我想代码中有一些东西占用了很大比例的时间,比如50%。如果是这样的话,你会看到它在大约那个百分比的样本上做那件事,所以你不必猜测它是什么。

  • 如果某项特殊处理器有助于该活动,请尝试使用该处理器。

重要的是不要猜测。如果你说“我认为这需要一个DSP芯片”或“我认为它需要一个多核芯片”,那就是猜测。猜测可能是正确的,但可能不是。可能的情况是,花费最多时间的东西是你永远不会猜到的,比如内存管理或I / O格式化。性能问题非常善于向您隐瞒。