Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        3年前关闭。
                                                                                            
                
        
我知道在编写某些(例如)实时应用程序时,执行速度非常重要。有时可以通过编写内联汇编来获得更高的执行速度。

我想知道什么是识别的好方法:

1)大部分时间都浪费在执行算法上

2)编写内联汇编是否会真正提高执行速度

先感谢您。

最佳答案

1)大部分时间都浪费在执行算法上


时间不是“浪费”,而仅仅是浪费。任何算法的效率都取决于许多因素,例如:


针对当前问题选择最合适的算法,
它的编码程度如何,
它用什么语言编码,
编译器代码生成和优化的效率,
选择适当的编译器选项。


也就是说,您的问题无法回答。通常使用有关代码的概要分析根据具体情况确定,但是在跳转到汇编代码之前,可以做很多事情。选择不当或实施不当的算法在汇编代码中可能会运行得更快,但是仍然是选择和/或实施不当,仅通过正确选择就可以得到更好的结果。


  2)编写内联汇编是否会真正提高执行速度


首先要考虑的是,您在编写汇编代码方面有多好,对特定目标的指令集有多熟悉?或许您需要聘请专家才能获得任何真正的利益是多少钱。

在发现无法获得任何明显有用的好处,或者花费时间导致项目在任何情况下都失败之前,您准备花多少时间手工制作汇编代码。

还应考虑到,编译器优化程序在为其生成代码的目标的体系结构和指令集中体现了大量专业知识,并且需要大量时间和专业知识才能以任何重要方式击败它。

要考虑的另一件事是缺乏汇编代码的可移植性。如果您的开发转移到其他体系结构,那么所有昂贵生成的汇编代码可能都已过时,必须手动重新开发或移植(需要差劲的维护人员才能真正理解代码的作用)。

我已经写了很长时间的硬实时系统和DSP系统,并且出于性能方面的考虑,从来没有求助于汇编器。我仅使用它来实现用C之类的高级语言无法完成的事情,例如操作诸如程序计数器和堆栈指针之类的核心寄存器(例如在实时调度程序中)。在一种情况下,我开发了一个在200MHz DSP上运行的应用程序,其中大量用汇编程序编写的代码被移植到完全用C ++编写的72MHz MCU上。这是通过结合更好的设计和使用DMA来捕获和处理样本块中的信号(而不是逐个样本)的组合而完成的,从而显着降低了中断率和软件开销。我遇到的另一个示例是完全用PIC汇编器编写的电子换向电机应用程序,该应用程序用C重新编写,但是通过更适当地使用可用的PWM和定时器/计数器硬件,C实现更加精确,高效并且在C语言中更小。 100%汇编程序实现的代码大小。

实时系统与执行速度的关系较少,而与确定性行为和截止日期的关系更为频繁。通常可以推迟复杂的处理,因此通常可以通过精心设计而不是通过微优化来达到截止日期。通常,可以利用诸如中断处理,DMA和计时器捕获之类的硬件功能来获得性能提升。

通常,通过首先选择更快的处理器,可以获得所需的性能提升的成本较低且容易得多。我建议使用汇编程序来获得必要的性能提升是绝望的最后手段,并且通常表明软件设计和/或实现不佳或处理器选择不当。

07-24 09:44
查看更多