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

如何计算ARM处理器算法的MIPS,arm,benchmarking,Arm,Benchmarking,我最近被要求为我们开发的一种算法生成MIPS(每秒百万条指令)。该算法由一组C风格函数公开。我们在Dell Axim上练习了该代码,以在不同输入下对性能进行基准测试 这个问题来自我们的硬件供应商,但我主要是HL软件开发人员,因此我不确定如何响应该请求。也许有类似硬件/软件背景的人可以帮助 由于我们的算法不是实时的,我认为我们不需要将其量化为MIPS。是否可以简单地引用组装说明的总数 如果1为真,您一般或专门针对ARM/XScale如何做到这一点(即如何测量汇编指令的数量) 2可以在WM设备上执行

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

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

  • 由于我们的算法不是实时的,我认为我们不需要将其量化为MIPS。是否可以简单地引用组装说明的总数

  • 如果1为真,您一般或专门针对ARM/XScale如何做到这一点(即如何测量汇编指令的数量)

  • 2可以在WM设备上执行,还是通过VS2005中提供的设备仿真器执行

  • 3可以自动化吗

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


    谢谢你的帮助。我认为S.洛特说得对。作为跟进,我现在有更多的问题

    5.对如何进行MIPS测量有何建议?我听到有人建议运行我们的算法,并将其与Dhrystone/Whetstone基准进行比较,以计算MIS

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


    7最后,我假设MIPS是一个粗略的估计值,将是编译器、优化设置等方面的dep

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

    因为你可以用指令的数量来度量一个算法(毫无疑问,这取决于输入数据,所以这是非常重要的),所以你需要一些时间度量来获得MIPS——例如,说“我需要每秒调用它1000次”。如果您的算法是针对该特定情况的1000条指令,那么您将得到:

    1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.
    
    我仍然认为这是一种非常奇怪的做事方式,所以你可能想要求澄清。至于您的具体问题,我将把它留给更熟悉Visual Studio的人。

    通常用于衡量处理器的性能

    算法通常采用以下两种方式之一:

  • 特定时间(在特定处理器上运行时)
  • 一定数量的指令(取决于体系结构) 用每秒指令数来描述一个算法似乎是一个奇怪的度量,但我当然不知道你的算法是做什么的

    为了提出一个有意义的度量,我建议您设置一个测试,该测试允许您度量完成算法所需的平均时间。装配说明的数量是一个合理的衡量标准,但很难计算它们!您的最佳选择如下(伪代码):


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

    如“您需要1000 MIPS处理器还是2000 MIPS处理器?”

    管理层将其转化为“多少MIP?”

    硬件提供MIPS。软件消耗MIPS

    你有两个自由度

    • 处理器固有的MIPS产品

    • 您使用那么多MIP的秒数

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

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

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

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


    您需要多少MIP

  • 获取处理器的官方MIPS。看

  • 在一些数据上运行您的算法

  • 测量准确的运行时间。平均一组样本以减少不确定性

  • 报告。750 MIPS处理器上的3秒是750 MIPS时的3秒。MIPS是一种利率。时间就是时间。距离是速率*时间的乘积。750 MIPS时的3秒等于750*300万条指令

  • 记住速率(以每秒指令数为单位)*时间(以秒为单位)给出指令


    不要说是3*750英里。事实并非如此;这是22.5亿条指令。

    对于第一次估计,PC上的基准可能很有用

    然而,在您承诺使用特定的设备和时钟频率之前,您应该为ARM目标体系结构准备一个开发板(或一些PDA?),并在那里对其进行基准测试


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

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

    基准测试充其量也有缺陷。作为一种业余爱好,我曾经在不同厂商的不同编译器上为相同的硬件编译相同的dhrystone(和whetstone)代码,数字到处都是,数量级。相同的源代码相同的处理器,dhrystone没有任何意义
    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