芯片j9九游会网


首页 -- 单片机j9九游会-- ICj9九游会-- 芯片j9九游会-- 新闻技能 --关于j9九游会
 

ANSI C代码在TMS320C55X上的移植和优化

弁言  

随着DSP技能的不停开展和美满,数字信号处置的使用范畴越来越普遍。工控、盘算机、通讯和消耗电子产品中,都市找到它的影子。到了20世纪80年月前期,各个DSP的消费商都推出了本人的初级言语编译器。这使得使用初级言语开辟DSP软件成为大概。

编译器的原理是经过特定的语法例则把初级言语誊写的逻辑转化成特定硬件平台所认知的汇编言语。由于编译器的主要功能是根据肯定的规矩编译出逻辑准确的代码。如许在包管准确性的条件下,编译出的汇编代码冗余很难分身服从。在一些及时性要求比力高的场所,比方在语音图像处置方面,必需对某些要害的算法举行优化。本文以TI公司的DSP芯片TMS320C55X为例,介绍怎样对一个工程举行优化。

    优化的一样平常步调

在初级言语编译器呈现曩昔,由于软件局部都是由汇编来完成,而且写出的代码功能都比力高,以是代码的优化在开辟历程中曾经完成,不必要把优化独自地作为开辟的一个步调。如今随着初级言语使用到DSP体系的开辟中,在软件功效完成的底子上,软件实行服从的优化显得愈减轻要。每团体在优化历程中利用的详细办法各有特点,但在总体上照旧有肯定的标准可寻。
    笔者依据本人的实践事情履历,并参照别的比力乐成的优化实例,总结了以下几个步调,作为优化历程的参考。:

(1)向C55X上移植所需的预备事情:数据范例的界说、intrinsic函数的利用、为合适多通道的使用所做的代码的修正。    

(2)工程层的优化:关于函数体较小的函数利用"inline"有限词、数据的对齐。    

(3)C函数层的优化:针对TMS320C55X系列芯片的外部布局;改动C代码使其能在硬件最大利用概率的条件下,低落算法的用时。

(4)局部算法的修正。

(5)局部函数的手工汇编。

向C55X上移植所需的须要事情

由于DSP硬件布局的束缚,用C言语开辟的代码在向其移植时,必需作响应的窜改,来顺应特定硬件平台的特点。总结移植所必要的事情,次要有以下几点:
    (1)数据范例的界说。由于C55X系列芯片是TI公司消费的定点DSP芯片,此中累加器为40位。为了完成定点小数的数学运算,界说一个typedef.h的文件,在typedef.h文件中界说了几种数据范例。Word16对应short型;Word32对应long型;Flag对应int型。

    (2)Intrinsic函数的利用。由所界说的数据范例可以完成定点的数学运算,由于这些根本的盘算被屡次利用,以是TI公司提供了这些函数的优化汇编代码。在算法完成代码文件头中参加"#include<gsm.h>"语句,但代码中挪用了这些函数,则在编译时会主动把优化过的汇编代码嵌入到输入文件"*.asm"中,从而节流了少量的工夫。

(3)为合适多通道的使用所做的代码修正。在 DSP 上完成的有些算法,比方语音的编解码等,必要同时处置多个通道。由于硬件资源(内存等)在工程的设计阶段曾经分别终了,以是要求在算法内不克不及在有内存的静态分派。办理的办法是事前把必要静态分派内存的变量放到一个布局体当中,会合在工程的设计阶段分派好内存。比方,将有关编码必要静态分派内存的数据布局兼并为一个独立的布局体。如许当有多个通道同时事情时,只需对每一个通道辨别开发一块内存,公用算法代码,就可以完成多通道的使用。

    工程层的优化

在工程层的优化中一样平常利用以下两种技能:内嵌函数和数据对齐。
(1)内嵌函数

所谓的函数内嵌,是指用函数的本体取代函数的挪用这一历程。这项技能去失了庞大的函数挪用历程来进步函数的实行服从,而支付的价钱是增长了代码所占用的空间。

由评价信息来决议一个函数能否应该被内嵌。一样平常的准绳是,那些代码量比力小、被频仍挪用的函数实用于内嵌。但也要思索别的的一些要素,包罗函数通报参数的数目和范例、函数值前往的方法和数据对齐的方法。在某些状况下,当函数被内嵌当前,数据的对齐属性有大概被毁坏。

完成函数内嵌的办法有以下三种:

a.可以利用编译器的选项来隐含地使函数内嵌。利用“-x2-o0”编译选项可以控制用inline声明的函数;利用“--o3-oi<size>”编译选项可以主动内嵌一些函数体比力小的函数。内嵌函数体的最大尺寸由<size>来决议。

b.可以利用“#pragma inline”声明语句。为完成统一函数在差别的文件中被inline,这个函数应该独自地放在一个头文件中,同时在每一个援用它的地方加上static有限词,如许可以制止链接器在链接时天生反复的全局标号界说。

c.可以手工地用函数体替换函数挪用。

(2)数据对齐

编译器要求把长型数据范例寄存在偶数地点界限。在声明一个庞大的数据范例 (既有多字节数据又有单字节数据) 时,应该起首寄存多字节数据,然后再寄存单字节数据,如许可以制止内存的空泛。编译器主动地把布局的实例对齐在内存的偶数界限。  

    函数级的C代码的优化

    这个阶段的重点在于充实使用C55X外部硬件的并行布局。这个优化本领不必要片面地掌握算法,也不必要对数据流有深化的研讨;只必要对C55X的外部布局和外部各个单位的利用本领十分熟习,就可以很轻松地掌握它。一样平常的步调如下:

a.把函数从原来地点的文件中分散出来,利便更深化的研讨;

b.在每次函数的挪用前后参加测试语句,用来输出数据和察看输入的数据;

c.对函数举行优化然后测试优化后的代码,比力这时的输入和没有优化时的输入能否相反;

d.把优化后的代码集成到整个工程中,然后用ITU-T的一切测试向量测试这个步伐。

(1)挑选优化函数

挑选优化函数的次要尺度是在工程层所作的评价数据:

*每一帧的信号处置历程中函数被挪用的次数。经过这条数据可以找到那些函数体较小并且被频仍挪用的函数。在工程层优化时此数据最有效。

*函数每次被挪用所实行的周期数。这条数据可以预算出所作的优化获得的结果。由于在每一帧的处置历程中,一个函数大概被挪用频频,以是这一条并不克不及作为选择优化函数的尺度。

*处置每一帧数据函数被实行的总的周期数。这是选择优化函数组紧张的数据。

(2)估量实行速率的进步水平

上面这些要素间接影响代码的优化水平:平凡变量和指针变量的数目、循环的数目和维数、数据对齐的属性、数据的独立性、挪用函数的数目。由于这些要素的存在,一切优化结果事前很难估量。比方,假如一个函数的循环维数比力多并且循环外部多是乘加的盘算,则可使用硬件MAC单位实验并行,优化结果最为分明。假如分之语句和函数挪用较多,则优化的水平很难估量并且结果一样平常不是很好。

(3)利用的优化办法

针对算法中泯灭工夫最严峻的循环局部,差别的状况有以下几种办法:循环的翻开、循环的兼并、循环的剖析。而这些办法利用的根据是C55X的硬件布局所使能的,充实使用A单位中的ALU和D单位的两个MAC单位。

a.循环的翻开。这项技能的重点在于,它经过在每次循环中多利用了A单位中的ALU,增长了一次盘算,从而低落了 循环的次数。同时循环体中的语句可以举行并行优化,如许就低落了整个循环体总的实行指令数目。

b.循环的兼并。兼并的条件是具有相反的循环次数而且循环体内数据的运算后果不会由于兼并而改动。它节流了每次循环创建的工夫和循环内相反变量反复寻址工夫,进步了帮助存放器的利用率。

c.循环的剖析。汇编器在处置循环体比力大的循环时,不克不及把循环转化为RPTBLOCAL或RPTB语法,而是用分之语句完成。为制止这种征象,可以把循环体比力大的循环剖析为两个或多个小的循环,同时界说一些部分变量来存储两头盘算后果。如许可以使编译器愈加公道的分派存放器。

(4)用到的编程本领

a.变量的声明只管即便接近变量第一次被利用的地区, 以使编译器确定变量的生命周期。 如许,可以公道地分派存放器,但大概增长货仓的的利用。

b.利用"#pragma loop_count"语句声明,假如loop_count大于零,编译器则省略了响应的测试语句。

c.利用">>"运算符来取代一个变量的右移操纵,如许可以制止一个函数的挪用。

d.颠倒一个多重循环的次序,如许大概会对下一步的盘算带来利便。

    算法的改动

    假如做完了上个阶段的事情,还没有获得抱负的实行速率,编程者可以得当地改动算法,大概在函数级优化办法上使用并行的技能。

在大少数状况下,算法的改动会合在比力小的部分范畴内,最罕见的,比方一个函数内。但假如改动函数之间数据的通报范例,使得算法处置数据的工夫用得更少,而由此所参加的数据转换函数的实行工夫可以疏忽的话,也可以在函数之间参加数据转换函数,从而改动其前后的函数的算法。

手工汇编

通常,使用手工汇编既可以进步代码的实行速率又可以增加代码的存储空间。但思索到编码模块的可移植性,手工汇编代码的数目要控制在肯定的范畴内,通常这个比率为手工汇编的C代码的行数占一切C源步伐总行数的20%。

总结

以上几个优化级另外分别是参考Motorola公司在做DSP移植和优化时外部利用的办法。在这里介绍给各人,并把它使用到自己的实践事情中。现实证明优化的结果非常分明。别的,这里提供的优化的观点也合适种种DSP的工程优化,只是在详细的完成办法上根据硬件平台的差别而差别。

前往顶部


2013-2015 芯片j9九游会网 All Rights Reserved.
若有任何题目和发起请>###@qq.com

深圳市星光芯电子有限公司 版权一切

地点:深圳市龙岗区南湾街道平吉小道1号建昇大厦B栋1618(李朗软件园劈面)###
###QQ:498187676 联系:周工


站点舆图