12

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

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

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

  2. 如果 1 为真,那么一般或专门针对 ARM/XScale,您如何执行此操作(即如何测量汇编指令的数量)?

  3. 2 可以在 WM 设备上执行还是通过 VS2005 中提供的 Device Emulator 执行?

  4. 3可以自动化吗?

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


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

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

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

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

4

7 回答 7

11

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

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

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

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

你有两个自由度。

  • 处理器固有的 MIPS 产品。

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

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

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

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

在 2,000 MIPS 处理器上,您可能需要可接受的 2 秒。但在 1,000 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*3 百万条指令。

记住速率(每秒指令数)* 时间(以秒为单位)为您提供指令。

别说是3*750 MIPS。不是;它是 22.5 亿条指令。

于 2009-03-24T19:26:07.007 回答
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 的一个很好的近似值。

于 2009-06-02T05:56:49.993 回答
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
于 2009-03-24T19:21:50.463 回答
1

MIPS 是衡量 CPU 速度的指标,而不是算法性能。我只能假设沿线的某个地方,有人有点困惑。他们想知道什么?我能想到的唯一可能的情况是他们试图帮助您确定他们需要多快的处理器才能让您满意地运行您的程序。

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

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

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

于 2009-03-24T19:14:30.060 回答
1

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

基准测试充其量是有缺陷的。作为一种爱好,我曾经在来自不同供应商的不同编译器上为相同的硬件编译相同的 dhrystone(和 whitstone)代码,并且数字到处都是,数量级。相同的源代码相同的处理器,dhrystone 没有任何意义,作为基线没有用。基准测试中重要的是您的算法运行速度有多快,它最好比它需要的速度快或快。根据距离终点线的距离,您可以允许大量的坡度。早期可能希望比您需要的运行速度快 5 或 10 或 100 倍,以便在项目结束时您至少比您需要的速度快一点。

我同意我认为 S. Lott 所说的,这都是销售、营销和管理方面的谈话。作为管理层介于两者之间的人,那么您需要做的是让他们根据您将要购买的彩色饼图和图表,让他们购买他们愿意花费的最快的处理器和最好的工具凭空产生为正当理由。如果在接近尾声时它不能完全满足性能,那么您可以返回到 stackoverflow,但同时管理层将被迫以几乎任何价格购买不同的工具链或更换处理器并重新旋转电路板。到那时您应该知道您离目标有多近,我们需要 1.0,如果我们购买的处理器速度是我们购买的处理器的两倍,我们应该达到 1.25。

您是否可以自动化这些事情或模拟它们取决于工具,有时是,有时不是。我不熟悉您所说的工具,因此无法直接与他们交谈。

于 2009-04-29T06:05:23.653 回答
1

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

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

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

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

于 2012-06-14T21:20:08.670 回答
0

对于第一个估计,PC 上的基准可能是有用的。

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

影响当今机器速度的因素有很多(缓存、管道、不同的指令集……),因此您在 PC 上的基准测试可能与 ARM 相差甚远。

于 2009-03-25T07:13:44.963 回答