我有一个嵌入式处理器,运行BASIC(Parallax BASIC Stamp)的精简版。在循环中,我通过SPI总线写入1024个值。
在编译语言中,通过展开循环可以获得更高的速度(将更多语句放入循环中,减少语句开销比)。但是,我不确定BASIC,因为它是一种解释性语言,每个语句在执行之前都会被解释。
分析很困难,因为我必须找到一个可用的引脚,向其写入一个脉冲,然后用ocopecope进行测量。
从理论的角度来看,BASIC中的循环展开能否提供任何速度优势?
答案 0 :(得分:1)
理论上,循环展开减少了循环内增量和比较所花费的时间。通过减少循环开销时间,可以获得性能提升。
在解释程序中获得的时间量可能不如编译程序那么重要。解释器获取指令,解释(构建代码)和执行语句代码需要一些时间。为了使循环展开时间节省显着,节省的时间必须大于此开销。
与微处理器不同,解释器可能无法针对执行速度进行优化。现代处理器具有高速缓存,分支预测和前瞻技术。有些甚至可以在执行其他指令时将新指令提取到缓存中。循环展开通过减少跳转次数并使执行更具可预测性来利用这些功能。对于编译语言,这可以显着节省(对于大型迭代)。节省的性能时间可能不适用于大多数口译员,因为他们可能不会使用这些功能。
性能改进的最佳决心是通过测量。在我的情况下,必须有足够的用户投诉来证明执行测量的计划命中。