如何为ARM处理器的算法计算MIPS

13

最近有人要求我们提供开发的算法的 MIPS(每秒百万条指令)。这个算法是由一组C风格的函数公开的。我们在 Dell Axim 上对代码进行了测试,以在不同输入下评估性能。

这个问题来自我们的硬件供应商,但我主要是 HL 软件开发人员,所以我不确定如何回答这个请求。或许有类似 HW/SW 背景的人可以帮助...

  1. 由于我们的算法不需要实时处理,我认为不必将其量化为MIPS。是否可能仅引用程序总指令数?

  2. 如果第1点正确,如何在一般情况下或特定于 ARM/XScale 的情况下测量汇编指令数量?

  3. 可以在 WM 设备上或通过 VS2005 提供的设备仿真器执行第2点吗?

  4. 可以自动完成第3点吗?

非常感谢您的帮忙。 Charles


感谢您的所有帮助。我想 S.Lott 命中了要害。作为后续,我现在有更多问题。

5 如何测量MIPS?您有任何建议吗?我听说有人建议运行我们的算法并针对 Dhrystone/Whetstone 基准进行比较以计算 MIS。

6 由于该算法不需要实时处理,MIPS 真的是一个有用的度量吗?(例如,阶乘(N))还有哪些方法可以量化处理需求?(我已经测量了运行时性能,但这并不是一个令人满意的答案。)

7 最后,我假设MIPS是一个粗略的估计,并且会依赖于编译器、优化设置等等?


这可能是一个冒险的想法,但他们也许希望您将算法转换为MIPS指令集?http://en.wikipedia.org/wiki/MIPS_architecture - e.James
这是MIPs而不是MIPS。请查阅工程出版物。 - Jonathan Cline IEEE
[tag:mips] 标签是用于 MIPS 架构的,请在添加标签之前阅读描述。如果您指的是每秒百万次操作(https://en.wikipedia.org/wiki/Instructions_per_second),请将其删除并添加正确的标签。 - phuclv
7个回答

12

我敢打赌你的硬件供应商正在问你需要多少MIPS。

就像“你需要一个1000 MIPS的处理器还是2000 MIPS的处理器?”

这被管理层翻译成“需要多少MIPS?”

硬件提供MIPS,软件消耗MIPS。

您有两个自由度。

  • 处理器固有的MIPS提供量。

  • 您在其中消耗那么多MIPS的秒数。

如果处理器没有足够的MIPS,您的算法将会“慢”。

如果处理器具有足够的MIPS,则您的算法将会“快”。

我将“快”和“慢”放在引号中,因为您需要有性能要求来确定“满足性能要求的速度足够快”或“速度过慢以无法满足性能要求”。

在一个2000 MIPS的处理器上,您可能需要2秒钟才能接受。 但是在一个1000 MIPS的处理器上,这个时间会爆炸到4秒钟,无法接受。


你需要多少MIPS?

  1. 获取您的处理器的官方MIPS。请参见http://en.wikipedia.org/wiki/Instructions_per_second

  2. 在一些数据上运行您的算法。

  3. 测量确切的运行时间。平均一堆样本以减少不确定性。

  4. 报告。750 MIPS处理器上的3秒钟就是3秒钟在750 MIPS下。MIPS是速率。时间是时间。距离是速率*时间的乘积。750 MIPS下的3秒钟是750 * 3000000条指令。

记住,速率(每秒指令数)*时间(秒)给出指令。

不要说它是3 * 750 MIPS。 它不是;它是2250百万条指令。


谢谢S.Lott我认为你是对的。有关如何测量MIPS的任何建议吗?由于算法不需要实时运行,因此MIPS真的有用吗?(例如,阶乘(N))最后,我假设MIPS是一个粗略的估计,并且会受到编译器,优化设置等的影响? - Charles

3

一些注释:

  1. MIPS通常被用作处理器的一般“容量”度量,特别是在软实时/嵌入式领域中,您确实希望确保不会过载处理器。请注意,这是每秒指令数,因为时间非常重要!

  2. 以这种方式使用MIPS相当不科学。

  3. 以这种方式使用MIPS仍然经常是确定系统大小和确定处理器速度的最佳近似值。它可能偏差25%,但没关系...

  4. 计算MIPS需要一个与您使用的处理器接近的处理器。正确的指令集显然至关重要,以捕获实际编译器使用的实际指令流。

您无法以任何方式在PC上近似此操作。您需要使用以下几种工具之一才能正确执行此操作:

  1. 使用目标架构的指令集模拟器(例如Qemu、ARM自己的工具、Synopsys、CoWare、Virtutech或VaST)。这些工具速度快,但可以相当好地计算指令,并支持正确的指令集。除了广泛使用昂贵的整数除法等指令(请勿使用浮点数)外,这些数字往往是有用的。

  2. 找到一个时钟周期精确的模拟器,适用于您的目标处理器(或类似处理器),这将给出对流水线效果等的相当好的估计。再次,从ARM或Carbon SoCDesigner获取它。

  3. 获取针对您正在定位的处理器系列或与其接近的ARM设计的开发板,并在那里对应用程序进行分析。您不会使用ARM9来为ARM11进行分析,但是ARM11可能是ARM Cortex-A8 / A9的一个很好的近似值。


2
MIPS通常用于衡量处理器的能力。
算法通常需要以下两种方式之一:
  1. 一定时间(在某个处理器上运行时)
  2. 一定数量的指令(取决于架构)
以每秒指令数来描述算法似乎是一种奇怪的衡量标准,但我不知道你的算法是做什么的。
为了得出有意义的衡量结果,建议您设置一个测试,以便测量算法完成的平均时间。指令数量是一个合理的衡量标准,但很难计算!您最好使用类似以下伪代码的东西:”
const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials

谢谢James,我已经按照你的建议(在Dell Axim上)完成了,但是average_time并不是一个令人满意的答案。因此请求MIPS。 - Charles

1
MIPS 是 CPU 速度的一种度量,而不是算法性能。我只能假设在某个地方,有人有点困惑。他们想要找出什么?我唯一能想到的可能情况是,他们试图帮助您确定需要给您多快的处理器才能满足您的程序运行需求。
由于您可以通过指令数量来衡量算法(这无疑会取决于输入数据,因此这是非平凡的),因此您需要一些时间度量来获得 MIPS -- 例如,说“我需要每秒调用它1000次”。如果您的算法对于该特定情况需要1000条指令,那么您最终将得到:
1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

我仍然认为这是一种非常奇怪的尝试方式,因此您可能需要请求澄清。至于您的具体问题,我会留给更熟悉Visual Studio的人来回答。


1

这个回答并不是直接回答问题,而是提供额外的背景信息,解释为什么会有这样的问题。

对于需要在规定时间内响应事件的算法来说,MIPS是唯一相关的。

例如,考虑一个控制器,设计用于检测风速,并在风速超过25英里/小时时在一秒钟内移动执行器。假设需要1000条指令来计算和比较风速与阈值。这个算法的MIPS要求是1千条每秒(KIPs)。如果控制器基于1 MIPS处理器,我们可以自信地说,控制器中还有更多的空间添加其他功能。

控制器还可以添加什么其他功能?这取决于要添加的功能/算法的MIPS。如果还有另一个需要在一秒钟内执行100,000条指令(即100 KIPs)的功能,我们仍然可以容纳这个新功能,并且还有些余地添加其他功能。


1

还要记住,不同的编译器和编译选项会产生巨大的差异。相同的源代码可以以许多不同的速度运行。因此,您可以使用编译器选项而不是购买2mips处理器,您可能可以使用1/2mips处理器。或者花钱购买更好的编译器并使用更便宜的处理器。

基准测试在最好的情况下也存在缺陷。作为一项业余爱好,我曾经在各种供应商的各种编译器上为同一硬件编译相同的dhrystone(和whetstone)代码,结果数字千差万别,数量级不同。相同的源代码,相同的处理器,dhrystone毫无意义,不能作为基线。基准测试中重要的是您的算法运行速度有多快,它最好比所需速度快或至少与所需速度相同。根据您距离完成线的距离,允许有足够的余地。在早期阶段,您可能希望运行比所需速度快5倍、10倍或100倍,以便到项目结束时,您至少比所需速度稍快。

我同意S. Lott的观点,这都是销售、市场和管理方面的话题。作为被管理层置于困境中的人,你需要做的就是让他们购买最快的处理器和最好的工具,基于你将从空气中生成的彩色饼图和图表来进行辩解。如果在路的尽头它不能完全满足性能要求,那么你可以回到StackOverflow,但同时管理层将被迫以几乎任何价格购买不同的工具链或交换处理器并重新设计电路板。到那时,你应该知道离目标有多近了,我们需要1.0,而我们现在是1.25,如果我们购买比我们购买的处理器快两倍的处理器,我们应该能够达成目标。

无论你是否能够自动化这些事情或模拟它们,都取决于工具,有时是可以的,有时不行。我不熟悉你所说的工具,所以我不能直接评论它们。


0

首先在 PC 上进行基准测试可能有助于初步评估。

但是,在选择特定设备和时钟频率之前,您应该获取 ARM 目标架构的开发板(或某个 PDA?)并在那里进行基准测试。

当今机器速度受许多因素影响(缓存、流水线、不同的指令集等),因此您在 PC 上的基准测试可能与 ARM 有很大偏差。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接