【问题标题】:equivalent number of instruction等效指令数
【发布时间】:2009-02-26 10:26:39
【问题描述】:

我有一个问题(就像我一样)...

但是...如果我有一个用 C 或 C++ 或您想要的任何代码编写的选定算法...修复了一个编译器,我可以确定指令的数量,但这些指令彼此不同:x ADD,y MUL , z MOV, f FADD, t FMUL(F 代表 FLOATING)...是否有方法或等式或其他允许写入“等效指令”数量的指令数以比较不同算法的方法?你们中是否有人使用这种类型的指标?是垃圾吗?

谢谢

马可

第 2 部分: 我知道它通常取决于 uP 和架构。我的问题是:确定在不同软核架构上实现的不同算法的执行时间。在 y 轴上我必须写下时间,在 x 轴上,指令的数量和图形的点由架构类型参数化(对不起,我的英语)。但是在 x-axix 上,我认为最好使用类似“等效指令”的数量...

这是一个垃圾想法吗?

【问题讨论】:

    标签: assembly equivalent instructions


    【解决方案1】:

    你不太明白这个问题。执行速度不仅取决于指令,还取决于指令间的依赖性。微处理器可以同时执行多条指令,因为这些指令不相互依赖。一次执行多条指令的能力因处理器系列而异。这就是为什么这个任务真的是特定于硬件的,它不能一劳永逸地解决。

    您所能做的就是绘制指令和处理器周期的执行时间表。处理器周期可以是 y 轴,指令可以是 x 轴。您将在预测缓存命中和未命中时遇到问题,并且许多指令的执行时间会因缓存命中/未命中而有很大差异。准备好花大量时间阅读处理器手册。

    【讨论】:

    • 谢谢,但我不能使用处理器周期,因为我也可以使用纯 FPGA 架构,而不是基于 uP...所以处理器周期在这种情况下变得无稽之谈...
    • 您必须考虑处理器的流水线和执行单元,这对于精确的执行时间预测至关重要。这意味着您知道每个执行单元在每个处理器周期都在做什么。
    【解决方案2】:

    它必须考虑流水线和各种其他复杂性,其中许多会因处理器而异。换句话说,即使可行,我也看不出它特别有用。

    还有一些事情是算法无法告诉你的,比如会有多少缓存未命中等 - 这些可能比原始指令计数很多重要。

    【讨论】:

    • 谢谢乔恩,有没有办法确定固定算法的工作量?但是没有像 O(nlog(n)) 这样的东西……这是学术性的……谢谢
    • 我不知道。我通常发现“运行并计时”是最简单的方法,而且效果很好。
    • Jon,有时可以预测缓存未命中。例如,如果您将两个大矩阵相乘,您肯定知道检索第二个矩阵的每一列会导致大量缓存未命中,甚至可以评估这样做的成本。
    • @sharptooth:这当然取决于缓存的大小、一次获取多少等。我的意思是这是一个非常复杂的计算 :)
    • @Jon:是的,这是真正的硬核。毫无疑问。
    【解决方案3】:

    这不是垃圾,只是模糊。从算法到源代码再到对象代码再到核心......有很多细节需要确定,每个细节都可能对性能产生重大影响。

    看看 Hennessey & Patterson 的“计算机体系结构,一种定量方法”

    【讨论】:

    • 这不是含糊的,那是超硬核。如果在仔细的高级优化之后完成,它可能会非常有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2017-02-13
    • 2011-05-07
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多