Assembly 等效指令数

Assembly 等效指令数,assembly,equivalent,instructions,Assembly,Equivalent,Instructions,我有一个问题(和我一样) 但是…如果我有一个C或C++编写的CouSin算法或者任何你想要的代码……固定一个编译器,我可以确定指令的数量,但是这些表达式彼此不同:X加,Y MUL,Z MOV,F FADD,T FMUL(F代表浮动)…是否有一种方法、方程式或其他东西,允许在“等效指令”的数量中写入指令的数量,以比较不同的算法?你们中有人使用这种度量吗?这是垃圾吗 谢谢 马可 第2部分: 我知道它在总体上倾向于上升和建筑。我的问题是:确定在不同软核架构上实现的不同算法的执行时间。在y轴上我必须写时

我有一个问题(和我一样)

但是…如果我有一个C或C++编写的CouSin算法或者任何你想要的代码……固定一个编译器,我可以确定指令的数量,但是这些表达式彼此不同:X加,Y MUL,Z MOV,F FADD,T FMUL(F代表浮动)…是否有一种方法、方程式或其他东西,允许在“等效指令”的数量中写入指令的数量,以比较不同的算法?你们中有人使用这种度量吗?这是垃圾吗

谢谢

马可

第2部分: 我知道它在总体上倾向于上升和建筑。我的问题是:确定在不同软核架构上实现的不同算法的执行时间。在y轴上我必须写时间,在x轴上,指令的数量和图形的点由架构的类型参数化(请原谅我的英语)。但在x-axix上,我认为最好使用“等效指令数”之类的东西


这是一个垃圾想法吗?

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


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

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


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

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


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

谢谢Jon,有没有办法确定固定算法的工作量?但是没有像O(nlog(n))这样的东西…那是学术性的…谢谢我没有意识到。我通常发现“运行并计时”是最简单的方法,而且效果很好。Jon,有时候缓存未命中是可以预测的。例如,如果你将两个大矩阵相乘,你肯定知道检索第二个矩阵的每一列都会导致大量缓存未命中,甚至可以评估这一操作的成本。@sharptooth:当然这将取决于缓存的大小、一次提取多少等。我的观点是这是一个相当复杂的计算:)@Jon:Yeap,这是真正的硬核。毫无疑问,谢谢。但是我不能使用处理器周期,因为我也可以使用纯FPGA架构,而不是基于上的……所以处理器周期在这种情况下变成一个废话……你必须考虑处理器的流水线和执行单元,这对于精确的执行时间预测是必不可少的。这意味着您知道每个执行单元在每个处理器周期中都在做什么。这不是含糊不清的,这是超硬核。如果在仔细的高级优化之后进行,它可能会非常有效。