代码之家  ›  专栏  ›  技术社区  ›  Charles

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

  •  9
  • Charles  · 技术社区  · 15 年前

    我最近被要求为我们开发的算法生成mips(每秒百万条指令)。该算法由一组C型函数公开。我们已经在Dell™Axim上运行了该代码,以测试不同输入下的性能。

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

    1. 由于我们的算法不是实时的,我认为我们不需要把它量化为mips。是否可以简单地引用组装说明的总数?

    2. 如果1是真的,您如何执行此操作(即如何测量组装指令的数量),一般情况下还是针对ARM/XScale?

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

    4. 3能自动化吗?

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


    谢谢你的帮助。我想S.洛特很成功。作为后续行动,我现在有更多的问题。

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

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

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

    7 回复  |  直到 15 年前
        1
  •  9
  •   S.Lott    15 年前

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

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

    管理层将其翻译为“多少MIP?”

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

    你有两个自由度。

    • 处理器固有的MIP产品。

    • 消耗这么多mips的秒数。

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

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

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

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


    你需要多少mip?

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

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

    3. 测量准确的运行时间。取一堆样品的平均值以减少不确定性。

    4. 报告。750 mips处理器上的3秒是——好吧——750 mips下的3秒。MIPS是一种速率。时间就是时间。距离是速率*时间的乘积。750 mips下的3秒是750*300万指令。

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

    不要说是3*750英里。不是,是2.25亿条指令。

        2
  •  3
  •   jakobengblom2    15 年前

    一些注释:

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

    2. 以这种方式使用MIP是不科学的。

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

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

    在PC上,您不能以任何方式对此进行近似。您需要拿出一些工具中的一个来正确执行此操作:

    1. 为目标结构使用指令集模拟器,如qemu、arm自己的工具、synopsys、coware、virtutech或vast。这些指令很快,但可以很好地计数指令,并支持正确的指令集。除非大量使用诸如整数除法(请不要使用浮点)之类的昂贵指令,否则这些数字往往非常接近。

    2. 为你的目标处理器找到一个时钟周期精确的模拟器(或其他接近的东西),它将提供相当好的管道效果估计等。再一次,从ARM或Carbon SocDesigner获得它。

    3. 为您要瞄准的处理器系列或接近它设计的ARM准备一个开发板,并在那里分析应用程序。你不需要使用arm9来描述arm11,但是arm11可能是一个很好的手臂皮质的近似值,例如A8/A9。

        3
  •  2
  •   James Eichele Bernard Igiri    15 年前

    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
    
        4
  •  1
  •   rmeador    15 年前

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

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

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

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

        5
  •  1
  •   old_timer    15 年前

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

    基准测试充其量是有缺陷的。作为一个爱好,我曾经在不同厂商的不同编译器上为同一个硬件编译相同的Dhrystone(和Whetstone)代码,而且这些代码的数量到处都是,数量级。同样的源代码同样的处理器,Dhrystone并不意味着什么,也不作为基线有用。基准测试中最重要的是你的算法运行得有多快,它最好比需要的快或快。根据离终点线的距离,你可以有足够的坡度。早期可能希望运行速度比需要的快5、10或100倍,这样到项目结束时,您至少比需要的快一点。

    我同意我认为S.Lott所说的,这是所有销售、营销和管理方面的谈话。作为一个管理层已经把石头和硬地方之间的一个,那么你需要做的是让他们购买最快的处理器和最好的工具,他们愿意花基于彩色饼图和图形,你将从稀薄的空气中产生作为理由。如果在接近尾声时,它不能完全满足性能要求,那么您可以返回StackOverflow,但同时,管理层将被迫以几乎任何价格购买不同的工具链,或者交换处理器和响应板。到那时,你应该知道你离目标有多近,我们需要1.0,如果我们买的处理器速度是我们买的处理器的两倍,我们的速度是1.25。

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

        6
  •  1
  •   Saravanakumar Tiruthani    12 年前

    这个回答不是为了直接回答问题,而是为了提供关于这个问题被问到的原因的附加上下文。

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

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

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

        7
  •  0
  •   starblue    15 年前

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

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

    现在的机器上有很多影响速度的因素(缓存、管道、不同的指令集,…),所以你在PC上的基准测试可能离ARM远了。