Blackfin系列处理器的C代码优化基本原则
0赞(本文基于VisualDSP++ C/C++编译器和Blackfin处理器。)
编译优化和没有优化的c代码在性能方面有很大的差别,在某些情况下,优化后的代码执行效率可能提高10倍甚至20倍。所以,在代码移植到产品之前都应该进行优化处理。
应用程序优化处理有几下基本策略:
首先,程序体中的循环的编写对程序执行效率有较大的影响。尽量不要在循环中使用除法和取余操作。处理器硬件不直接支持32位整数除法,对于整型变量的除法和取余操作是多周期操作,此外,对于任何与除法有关的循环,都将阻止优化器使用硬件循环,所以在循环中避免整数除法可以保证代码执行的效率。同时,尽量避免在循环中进行数组写操作,对数组元素进行写操作也会引入其他相关性,将降低程序执行的效率。而且,在循环中应避免使用条件代码,保持循环简短能提高执行性能。当循环中包含函数的调用时,编译器由于保存和重新载入硬件循环的文本的代价就不能生成硬件循环。
对于Blackfin处理器而言,处理器能在单周期指令行上支持两种存储器操作,前提是当两个地址在不同的存储块中时。如果同时对同一存储块访问,将会插入一次空操作。所以,尽可能将数组放入不同存储区可以节省指令操作的时钟周期数。
通过对编译器的优化选项的设置也能提高代码的效率。
优化器相关的命令行选项:
-O 速度优化
-Os 大小优化
-Ox 假定short中的值在16位范围内
-Ofp 改变帧指针的偏移量,使能更短指令的应用
-ipa 执行内部过程优化
以-ipa为例,为了保证最好的性能,优化器通常需要知道某些有外部工作的子程序确定的事情,特别是他要帮助了解指针参数的对准和数值,以及循环边界的值。编译器的-ipa选项就可以使能内部过程化分析,获得相应的信息。保证好的性能。
