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

Performance 当源代码不可用时,什么是好的分析工具?,performance,profiling,Performance,Profiling,我有个大问题。我的老板对我说他想要两个魔法黑匣子: 1-接收类似微处理机的输入和返回的东西,如输出、MIPS和/或MFLOPS。 2-接收c代码的东西,如输入和返回,如输出,可以从性能方面描述代码的东西,如uP必须在一段时间内执行代码的必要MIPS 所以我认为第一个黑盒可能是EEMBC或SPEC的基准…不同的uP,相同的基准返回每个uP的MIPS/MFLOPS。我希望第一个问题没问题 但第二个…第二个黑匣子是我的噩梦…我发现的唯一一件事是使用分析工具,但我要求一个特定的分析工具。 是否有人知道一

我有个大问题。我的老板对我说他想要两个魔法黑匣子: 1-接收类似微处理机的输入和返回的东西,如输出、MIPS和/或MFLOPS。 2-接收c代码的东西,如输入和返回,如输出,可以从性能方面描述代码的东西,如uP必须在一段时间内执行代码的必要MIPS

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

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

真正的问题是,我们必须为特定的c代码选择正确的uP…但我们需要为我们的c代码量身定制的uP…因此,如果我们知道uP的MIPS和体系结构,内存结构。。。我们的代码需要什么


感谢大家

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


在为特定的目标体系结构编译源代码之前,您将无法确定其总体性能。例如,一个以n个处理器为目标的并行化编译器可能可以将On^2算法更改为On中的一个。

您将找不到一个工具来做您想做的事情

您唯一的选择是交叉编译代码,并在模拟器上为您正在运行的体系结构分析它。分析高级代码的问题是编译器会进行一系列非常重要的优化,您需要知道特定的编译器是如何做到这一点的

这听起来很愚蠢,但为什么要将代码与uP和uP匹配?如果您正在编写信号处理,请购买DSP。如果你在建一个监控与数据采集系统的盒子,那就看看Atmel或ARM之类的东西。您是否正在构建具有用户界面的通用设备?看看PPC或X86兼容的东西

简单地说,选择一个合适的体系结构,并提供您需要的功能。用Knuth的话粗略地解释一下,在选择处理器之前的优化被延迟了


将架构大致调整到合适的位置,大致计算出处理需求,你可以手工估算出一个在查看C代码时总是过高的估计值,然后买一个匹配的。

我必须同意Adam的意见,尽管我会更客气一点。编译器优化只在热点代码中起作用,即a不调用函数的紧密循环,b占用大量时间

从积极的方面来说,我建议如下:

在任何处理器上运行C代码。在该处理器上,找出最耗时的部分。 您可以使用探查器来完成此操作。我更喜欢的简单方法是在调试器下运行它并手动停止它,比如10次,每次写下调用堆栈。我想代码中有些东西占用了很好的时间,比如50%。如果是这样的话,你会看到它在大约那个百分比的样本上做这件事,所以你不必猜测它是什么

如果该活动需要某个特殊处理器的帮助,请尝试该处理器。
重要的是不要猜测。如果你说我认为这需要一个DSP芯片,或者我认为它需要一个多核芯片,那就是猜测。猜测可能是对的,但可能不是。可能情况是,花费时间最多的是你永远猜不到的事情,比如内存管理或I/O格式化。性能问题很容易瞒着你。

亲爱的米奇·麦特,非常感谢,但我想提出一个新问题。。。当我寻找分析工具的时候,我见过simics…你知道吗?我认为,这个工具可以很好地获得一些关于不同应用程序性能的信息……你认为samwe与否?提前谢谢你,马可