嵌入式系统超标量体系CPU的高效软件优化技术
4从数据Cache的角度进行优化
4.1 数据Cache对程序效率的分析
从前面分析可知,在程序取操作数环节,若能从数据Cache中读取操作数,而不是每次都从内存中读取则能提高程序执行速度。
4.2 从提高数据Cache命中的角度进行优化
① 访问数据时,最好是对同一段数据在一个地方集中访问。
② 访问数据时,最好是根据数据的顺序依次访问。比如对数组的访问,最好是按数组成员依次访问,效率较高。
③ 为了使程序能够连续访问数据,需要调整数据结构、重构代码使得数据结构和程序配合,提高数据Cache的命中率。
4.2.1 数组连续访问的优化
代码举例5:
float afBuf[1000];
float xBuf[8][24];
Func {
for(i=0;i<24;i++) {
xBuf[0][i]=afBuf[0+i];
xBuf[1][i]=afBuf[24+i];
……
xBuf[7][i]=afBuf[168+i];
}
}
被优化为:
Func {
for(i=0;i<8;i++) {
m=i*24;
xBuf[i][0]=afBuf[0+m]
xBuf[i][1]=afBuf[1+m];
……
xBuf[i][23]=afBuf[23+m];
}
}
这样优化后,数据每次访问都是连续的。
4.2.2 将不连续数据访问重构为连续访问的优化
代码举例6:
floatafBufA[24];
floatafBufB[24];
floatafBufC[24];
floatxbuf[200];
Func {
xBuf[0]=afBufA[0];
xBuf[1]=afBufB[0];
xBuf[2]=afBufC[0];
……
xBuf[69]=afBufA[23];
xBuf[70]=afBufB[23];
xBuf[71]=afBufC[23];
}
被优化为:
struct {
float fA;
float fB;
float fC;
} aBufABC[24];
floatxbuf[200];
Func {
xBuf[0]=aBufABC[0].fA;
xBuf[1]=aBufABC[0].fB;
xBuf[2]=aBufABC[0].fC;
……
xBuf[69]=aBufABC[23].fA;
xBuf[70]=aBufABC[23].fB;
xBuf[71]=aBufABC[23].fC;
}
5 软件优化实验结果
5.1 优化对比实验
在自动化装置的主要消耗资源的实时扫描任务中进行了代码分析,并按上述可能优化措施进行了优化。优化前实时扫描任务占用资源为系统CPU总资源的52%。代码优化后实时扫描任务占用CPU资源只有系统总资源的31%。
对比可以看出,系统效率提高了40%,效果是非常明显的。
结语
虽然CPU的标称性能指标非常高,但其有专用的体系结构,对一般开发者的编程开发方式而言并不是完全匹配,导致发挥不出CPU的潜力。所以有针对性的根据CPU的体系结构特点进行分析,并采取针对性的优化措施,才能真正发挥其性能,满足嵌入式强实时性要求。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)