|
|
51CTO旗下网站
|
|
移动端

1.8.2 降低平均CPI

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为大家介绍降低平均CPI。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 19:17

1.8.2 降低平均CPI

ARM11处理器仅能够在每周期开始执行或者发出一条指令,而ARM Cortex内核可以在每周期发出最多两条指令。平均而言,由于延迟,两个处理器的平均发出率低于各自的最大值。

延迟事件由一个指令引起,它暂时阻止处理器在随后周期从开始处执行(发出)指令的最大数量。换言之,大多数ARM处理器有一个理想CPI值(0.5)。

造成延迟的原因主要有三个:

分支延迟:由分支预测失误或分支目标缓冲失效导致。

数据依赖延迟:由寄存器读后写的依赖关系导致,当涉及浮点指令时,长延迟是最严重的。

加载/存储延迟:由缓存未命中导致,需要片外访问外部存储器。

若处理器未能准确预测条件分支指令结果,将会导致分支延迟。当这种情况发生时,分支后指定抓取的指令必须取消,并用延迟更换。

例如,假设如下的指令序列:

在这种情况下,beq指令取决于状况寄存器中cmp指令的结果——这本身可能依赖于上一个指令计算r1和r2的结果。在beq基于其分支预测后,处理器将继续取指令。这些预测指令的数量将取决于处理器必须等待beq指令执行的执行阶段。如果发现分支是未预测的,所有这些指令将被转换为分支延迟。

发生这种情况的比率与执行条件分支的比率相关联。对于包含控制相关代码的程序,在最内层循环中具有不可预测if语句的代码出现概率较高。

减少分支延迟最明显的方式是减少条件语句。除非有多余的条件语句可以删除,否则不改变代码语义是很难做到这一点的。另一种技术是用预测指令代替条件分支指令,这在条件指令数比较少的时候是唯一有效的。

指令必须等到之前指令的结果已计算出来才能执行,这就导致了数据依赖性延迟。这些延迟在执行浮点指令程序时最为严重,因为这些指令相对于所有算术指令的延迟最长。

例如,下面的指令序列执行两个相互依赖的双精度加法指令序列,第二条指令只有在第一条指令计算出d0值后才能执行。

在这种情况下,只有等到第一条指令完成之后第二条指令才能进入执行渠道,在第一条指令完成和第二条指令开始之间的时间是花费在执行延迟上的。大多数浮点程序包含许多这些类型的依赖关系,从而导致数据依赖延迟和浮点功能单元的利用率低。

减少这些延迟的数量一般通过重新排列代码中指令的顺序来实现,允许同时执行其他非依赖关系的浮点指令,以此来“隐藏”浮点指令延迟这一问题。

执行积极动态调度(也被称为“乱序执行”)的处理器可以在运行时自动完成,而不需要更改程序代码。然而,包括那些ARM在内的大多数嵌入式处理器负担不起在芯片构建或功耗上的这一功能成本,所以它们一般都有限或没有动态调度功能。

第2章介绍了如何使用代码优化技术来隐藏浮点指令延迟,并且采用双缓冲区、软件流水和SIMD指令来减少数据依赖延迟的数量。

另一种减少浮点延迟的方法是将浮点指令转换成定点指令。定点表示法允许采用低延迟整型功能单元的小数点表示。这种方法的主要缺点是动态范围减少,或是可以表示最大和较小数值之间的比值减小。幸运的是,许多图像理论计算不需要高动态范围。第2章也探讨了这种技术。

加载和存储延迟与处理器高速缓存的有效性相关,但可以通过改变访问存储器中数据的顺序来降低这种相关性,以增加访问的局部性。为此,程序员或编译器必须分配加载和存储指令顺序,由此产生的有效地址序列是有利于缓存的。这意味着每当访问相同或相近地址时,访问之间的时间应尽量减少。这往往需要对嵌套循环的结构做出实质性的改变。

实现上述目的主要方法是通过循环转换,如循环交换、循环融合、循环分裂和循环分片。为了跟踪加载和存储延迟,程序员必须能够监视最后一级缓存命中次数和失效次数。

本章将介绍如何使用性能计数器来跟踪周期、指令、缓存命中次数和缓存失效次数。周期数将提供关于执行时间的信息,指令周期比提供CPI,而缓存失效与缓存命中比将提供缓存失效率。注意:全部CPI包括从分支、数据依赖性到缓存失效的延迟周期,虽然无法区分每一种类型的延迟。仍然有足够的信息来进行优化决策,并理解代码转换如何影响性能。

最后值得注意的一点是:ARM11和ARM Cortex-A9 PMU可以计算数据依赖性延迟,但这不再为Cortex A15 PMU所支持(可数)。为了在所有的目标过程中保持一致,本章将不使用这个特殊的计数器。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

计算机病毒防范艺术

本书由Symantec首席反病毒研究员执笔,是讲述现代病毒威胁、防御技术和分析工具的权威指南。与多数讲述计算机病毒的书籍不同,本书完全是...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊