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

时间:2009-03-24 19:03:33

标签: arm benchmarking

我最近被要求为我们开发的算法生成MIPS(每秒百万条指令)。该算法由一组C风格的函数公开。我们在Dell Axim上运用代码来对不同输入下的性能进行基准测试。

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

  1. 由于我们的算法不是实时的,我认为我们不需要将其量化为MIPS。是否可以简单地引用汇编指令的总数?

  2. 如果1为真,那么你如何(或者如何测量装配指令的数量)一般或专门用于ARM / XScale?

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

  4. 3可以自动化吗?

  5. 非常感谢你的帮助。 查尔斯


    感谢您的帮助。我认为S.Lott砸了钉子。作为后续行动,我现在有更多问题。

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

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

    7最后,我认为MIPS是一个粗略的估计,并且将是dep。关于编译器,优化设置等?

7 个答案:

答案 0 :(得分:9)

我敢打赌,您的硬件供应商会询问您需要多少MIPS。

如“您需要1,000 MIPS处理器还是2,000 MIPS处理器?”

管理层将其翻译成“MIPS多少?”

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

你有两个自由度。

  • 处理器固有的MIPS产品。

  • 消耗这么多MIPS的秒数。

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

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

我在引号中加上“快”和“慢”,因为你需要有一个性能要求来确定“足够快以满足性能要求”或“太慢以至于无法满足性能要求。”

在2,000 MIPS处理器上,您可能需要2秒钟。但是在1000 MIPS处理器上,这会爆炸到不可接受的4秒钟。


您需要多少MIPS?

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

  2. 对某些数据运行算法。

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

  4. 报告。 750 MIPS处理器上的3秒钟 - 很好 - 750 MIPS时为3秒。 MIPS是一种速率。时间就是时间。距离是速率*时间的乘积。 750 MIPS的3秒是750 * 300万条指令。

  5. 记住评分(每秒说明一次)*时间(以秒为单位)为您提供说明。

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

答案 1 :(得分:3)

一些注意事项:

  1. MIPS通常用作处理器的一般“容量”度量,特别是在软实时/嵌入式字段中,您确实希望确保不会使处理器超负荷工作。请注意,这个IS指令每秒,因为时间非常重要!

  2. 以这种方式使用的MIPS是非常不科学的。

  3. 以这种方式使用的MIPS通常仍然是用于确定系统大小和确定处理器速度的最佳近似值。它可能会减少25%,但不要介意......

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

  5. 您无法以任何方式在PC上对此进行近似处理。你需要带出一些工具才能做到这一点:

    1. 使用指令集模拟器作为目标架构,例如Qemu,ARM自己的工具,Synopsys,CoWare,Virtutech或VaST。这些很快但可以很好地计算指令,并且将支持正确的指令集。除非大量使用像整数除法这样的昂贵指令(请不要浮点数),否则这些数字往往会非常接近。

    2. 为您的目标处理器(或接近的东西)找到​​一个时钟周期精确的模拟器,这将给出非常好的管道效果估计等。再一次,从ARM或Carbon SoCDesigner获取它。

    3. 获取您要定位的处理器系列的开发板,或接近它的ARM设计,并在那里分析应用程序。您不使用ARM9来分析ARM11,但ARM11可能是ARM Cortex-A8 / A9的良好近似值。

答案 2 :(得分: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

答案 3 :(得分:1)

MIPS是衡量CPU速度的指标,而不是算法性能。我只能假设某个地方的某个地方,有人有些困惑。他们想要找出什么?我能想到的唯一可能的情况是,他们正在努力帮助您确定他们需要多快才能让您满意地运行程序。

由于您可以在指令数量上测量算法(这无疑将取决于输入数据,因此这是非常重要的),因此您需要一些时间来获得MIPS - 例如,说“我需要每秒调用1000次”。如果您的算法是针对该特定情况的1000条指令,那么您最终会得到:

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

我仍然认为这是一种尝试做事的奇怪方式,所以你可能想要求澄清。至于你的具体问题,我会把它留给更熟悉Visual Studio的人。

答案 4 :(得分:1)

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

基准测试充其量是有缺陷的。作为一个爱好,我曾经在不同供应商的各种编译器上为相同的硬件编译相同的dhrystone(和磨刀石)代码,并且数量到处都是数量级。相同的源代码相同的处理器,dhrystone并不意味着一件事,没有用作基线。基准测试中最重要的是您的算法运行速度有多快,最好是快速或快速。根据终点线的接近程度,您可以获得充足的污水。在早期,您可能希望以比您需要的速度快5或10或100倍的速度运行,以便在项目结束时您至少比您需要的速度快一点。

我同意我认为S. Lott的说法,这是所有销售和营销及管理层的谈话。作为管理层在摇滚和艰难的地方之间放置的那个,那么你需要做的是让他们购买他们愿意花费的最快的处理器和最好的工具,基于你要去的彩色饼图和图表从空气中产生作为理由。如果在路的尽头它不能很好地满足性能,那么你可以回到stackoverflow,但同时管理层将被迫以几乎任何价格购买不同的工具链或交换处理器并重新安装板。到那时你应该知道你的目标有多接近,我们需要1.0,如果我们购买的处理器速度是我们应该购买的处理器的两倍,我们的价格是1.25。

你是否可以自动化这些东西或模拟它们取决于工具,有时是,有时没有。我不熟悉你所说的工具,所以我不能直接与他们交谈。

答案 5 :(得分:1)

此回复并非旨在直接回答问题,而是提供有关为何提出此问题的其他背景信息。

算法的MIPS仅与需要在所需时间内响应事件的算法相关。

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

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

答案 6 :(得分:0)

对于初步估计,PC上的基准可能很有用。

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

影响当今机器速度的因素很多(缓存,管道,不同的指令集......),因此您在PC上的基准测试可能会偏离w.r.t. ARM。