繁体   English   中英

嵌入式软件的Mips计算

[英]Mips calculation for embedded software

我最近(并反复)询问客户关于运行我们软件所需的MIPS 通常我们能够通过向客户解释这实际上取决于cpu / os / hw(我们的软件是高度可移植的)和/或用例(即我们的软件如何使用)来摆脱这些问题。

但我最后一个不仅非常固执,而且还提供了顽固的充分理由。 :)他想要估计,因为他不确定自己是否有足够的能力运行我们的软件,所以在此估算之前购买软件是不合逻辑的。 (我们无法提供演示/评估,因为在此特定平台上运行需要大量工作。)

而现在的问题是:有人在任何软件的任何部分都有经验吗? 任何现实生活中的例子都会非常有用。 我可以选择在许多操作系统和许多硬件上运行我们的软件。 因此,如果您知道在任何硬件上进行此类估算的任何工具,我有可能使用它或者至少可以获得一个想法。 知道我只知道如何测量eCosPro OS上的CPU负载。

编辑:

使用探针实际上是一个好主意,假设我可以创建一个控制环境,其中只有我的软件运行所有可以计数的指令是我的,我猜探针有一个接口来做它。 实际上我有几个不同的硬件调试器,如果有人有经验怎么做将是非常好的,我会明天阅读一些文档,希望能找到这方面的东西。

好吧,你意识到这充满了免责声明和警告 - CPU速度,内存速度,缓存命中率,MMU页表刷新,总线争用等......(如果它是一个重型嵌入式系统)所有因素都在决策中....

说了 ......我要做的就是这个。 获得一个实时操作系统(留在我身边),也许像FreeRTOS(免费,令人惊讶)或u / C-OS-II(不是商业用途,可能是$ 3K)。 这些内核允许您检测代码以计算空闲CPU周期(空闲任务旋转循环)。

因此,将您的整个应用程序(或客户的应用程序)作为您同意的板上唯一(非空闲)任务运行(例如MPC860板,ARM7板等......)。 通过RTOS测量电路板上的%CPU。 (例如“在以60 MHz运行的Flibber板上,我们的应用程序使用了12%的CPU。”)

没有他们给你更多,反之亦然,这听起来像是一个非常合理的长度去他们。

好的一面是,一旦你完成了这项工作,就可以将工作重新用于其他目标和/或电路板,也许这些数字可以帮助你增加销售和/或调整/优化你的软件。

祝好运!

你有一个模拟器或调试器探针可以给你一个指令数吗? 您甚至不需要为正确的目标平台执行此操作,只需粗略的指令计数即可。

如果其他一切都失败了,请在您有权访问的任何平台上运行它,使用-MHz /客户-MHz的商来扩展运行时。 这应该给你什么样的运行时将客户将经历一个非常粗略的估计。

RapiTime声称可以对目标的最坏情况执行时间进行概率估计。 我没有亲自使用它,但已经看过他们的演示......

如果您的目标与您的客户足够相似,您可以对其进行扩展以估算其平台上的WCET。 然后,他们可以将其与当前系统的“备用”时间进行比较。

在我使用的两个处理器架构(MSP430F5X和AVR32)上,处理器内置了一个硬件循环计数寄存器。 我通常有一个方案,当处理器不忙时,它处于低功耗空闲状态,处理器内核暂停。 然后有两个选项来计算实际的处理器负载。 我可以在周期性定时器功能中设置断点并读取执行的处理器周期数,或者我可以通过在操作开始和结束时读取该寄存器来检测特定进程。 处理器空闲时间不会出现在循环计数中,因为此时CPU暂停。

您没有指定处理器体系结构,但可能存在此功能。

I / S是具有操作系统的系统的“弱”度量。

在细节中,你要做的是

  1. 弄清楚最坏情况的指令路径并计算执行所需的循环次数(这意味着读取该CPU的程序集并查看告诉您循环次数的CPU手册)。
  2. 现在找出你的实时约束。
  3. 然后使用#1进行最坏情况周期。 向上/向下调整CPU,直到它符合实时约束。
  4. 添加一个软糖因子。

您需要做的第一件事就是为正确的操作提出某种标准。 这很大程度上取决于应用程序的性质 - 您的标准可能包括“必须在3ms内执行代码x”或“必须具有低于100ms的延迟”。 任何与定量测量无关的标准都将是困难的,因为它将是主观的。

找到正确操作的标准将允许您找到代码的关键部分。 请记住,这些可以在角落情况下找到而不是正常操作。

如果代码的这些关键部分很小,那么计算目标平台的指令将会相对简单。 如果你有一个可能更容易的模拟器。 (取决于您可能需要进行模拟以确保它被执行的代码,但如果您有大量代码需要分析,这可能仍然比计算指令更容易)

如果您的关键代码很大,那么您可能需要执行与JesperE建议类似的操作。 除非您的应用程序针对价格极其敏感的行业,否则客户可能愿意接受计算中的一点松动 - 因此估算得比估计您的CPU需求更好。

我与JesperE建议的不同之处在于建议不要专注于MHz,而应关注目标的实际MIPS。 例如,在测试平台上编译和执行代码 - 如果你有一个可能更好的分析器。 然后编译客户目标的代码,并对生成的可执行文件中的指令数进行粗略比较。 然后,您可以将此比率以及测试和目标处理器的相对MIPS结合到计算执行时间中。

你说你的软件是高度可移植的,所以我的建议是在最接近处理器架构,处理器指令集和内存/外设总线类型的平台上运行软件。 测量必须实时运行的最长例程,然后估计它将在其架构上运行多长时间。

大多数现代调试器使您能够查看所消耗的指令,例如; RVDS。 此外,您可以使用处理器仿真器来获得一个体面的指令,而无需在平台上实际运行(如果您的代码是独立的,例如编解码器或加密模块,并且不依赖于板) - 请注意,这将为您提供说明,不是周期。 您的电路板详细信息将影响周期(例如;等待状态,存储器访问等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM