Blackfin C语言优化

[09-12 18:28:20]   来源:http://www.88dzw.com  EDA/PLD   阅读:8523

文章摘要:编译器在进行优化的时候永远都遵循一个基本原则,那就是优化不能影响程序运行的正确性。所以当编译器发现矢量化和软件流水线需要满足的那些条件不确定的时候,它的行为往往是保守的。这是一种宁可放弃性能也要保证正确性的态度,无可厚非。该出手时就出手,到了程序员帮编译器一把的时候了。因为编译器面对的这些不确定性,在程序员看来通常是确定,一定,以及肯定的。以前面数据独立性的问题为例,编译器很难判断当前for循环中两个指针pa,pb在运行的时候是不是会指向同一个数组,因为对编译器来说它们只是两个指针,对它们后面实际操作的对象毫无头绪。而程序员却可能清楚的知道这段程序处理的两个数组是定义在两段不同的物理内存上的,

Blackfin C语言优化,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  编译器在进行优化的时候永远都遵循一个基本原则,那就是优化不能影响程序运行的正确性。所以当编译器发现矢量化和软件流水线需要满足的那些条件不确定的时候,它的行为往往是保守的。这是一种宁可放弃性能也要保证正确性的态度,无可厚非。该出手时就出手,到了程序员帮编译器一把的时候了。因为编译器面对的这些不确定性,在程序员看来通常是确定,一定,以及肯定的。以前面数据独立性的问题为例,编译器很难判断当前for循环中两个指针pa,pb在运行的时候是不是会指向同一个数组,因为对编译器来说它们只是两个指针,对它们后面实际操作的对象毫无头绪。而程序员却可能清楚的知道这段程序处理的两个数组是定义在两段不同的物理内存上的,也就是说这两个指针不会指向同一段地址,数据的独立性是有保证的。这个时候我们就可以通过相应的编译选项通知编译器:下面这个for循环里的数据是独立的,放心大胆的优化吧。这里提到的编译选项,包括前面说的关于循环次数,数据对齐,以及存储位置等其他编译选项都可以在VisualDSP++关于C语言编译器的手册中找到。

  了解了编译器的工作方式,针对矢量化和软件流水线对代码和数据存储的要求,在C语言范围内对相关代码进行调整,并通过编译选项将有利于优化的确定信息通知编译器,依托C语言编译器的能力实现代码的高效优化,就是程序员在这里要做的工作。

  4. 打完收工,还是刚刚开始

  我们已经简单的谈了C语言优化,特别是性能曲线从A点到B点应该遵循的主旨和一些技巧。个人认为,嵌入式系统上高效的C代码优化不是在代码写好以后才开始的一个独立的步骤,而应该是在系统设计和编写代码的时候就已经开始考虑硬件平台有效执行的因素,妥善安排算法,精度,数据类型,存储空间和性能之间的关系。再加上灵活应用上面提到的技巧,可以做到事半功倍。由于篇幅的限制,这里只能提纲挈领的讲一讲。有兴趣的读者可以访问http://www.analog.com/zh/embedded-processing-dsp/content/blackfin_bold_training/fca.html#ADEV001

  到此为止,C语言优化告一段落,而嵌入式系统的优化才刚刚开始。片内片外代码和数据的分配,主频和外频的选择,系统带宽和DMA的使用,这些都会影响到优化后的代码在嵌入式系统里最终的性能。火星人的地球之旅,才刚刚开始。


上一页  [1] [2] [3] [4] 


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《Blackfin C语言优化》相关文章

分类导航
最新更新
热门排行