DSP原理及应用——TMS320DM6437 课件 第五章:TMS320DM6437的C语言程序设计与优化.pptx

DSP原理及应用——TMS320DM6437 课件 第五章:TMS320DM6437的C语言程序设计与优化.pptx

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

DSP原理及应用

;第5章TMS320DM643的C语言程序设计与优化;5.1TMS320C64x系列DSP的C/C++语言的特点;5.1TMS320C64x系列DSP的C/C++语言的特点;5.1TMS320C64x系列DSP的C/C++语言的特点;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.2TMS320C64x系列DSP的C/C++语言程序设计基础;5.3运行时环境;5.3运行时环境;5.3运行时环境;5.3运行时环境;5.4DSP的C/C++代码优化;5.4DSP的C/C++代码优化;5.4.3.选用C编译器提供的优化选项优化

-o:使能软件流水和其他优化方法。

-pm:使能程序级优化。

-mt:使能编译器假设程序中没有数据存储混淆,可进一步优化代码。

-mg:使能分析(profile)优化代码。

-ms:确保不产生冗余循环,从而减小代码尺寸。

-mh:允许投机执行。

-mx:使能软件流水循环重试,基于循环次数对循环试用多个方案,以便选择最佳方案。;5.4.4软件流水

在编译代码时,可以选择编译器的-o2或-o3选项,编译器将根据程序尽可能地安排软件流水线。使用软件流水线还有下面几点限制:

(1)循环结构不能包含代码调用,但可以包含内联函数;

(2)循环计数器应该是递减的;

(3)循环结构不能包含break,if语句不能嵌套,条件代码应当尽量简单;

(4)循环结构中不能包含改变循环计数器的代码;

(5)循环体代码不能过长,因为寄存器(32个)的数量有限,应该分解为多个循环;

(6)在软件流水线的运用上,尽量使复杂的循环分解成简单的小循环,以避免寄存器的数量不够;对于过于简单的循环,应该适当展开,以增加代码数量,增加流水线中的迭代指令。;

5.4.5使用内联函数(Intrinsics)

内联函数是C64x编译器提供的专门函数,它们与嵌入式的汇编指令一一对应,C编译器以内联函数的形式支持所有C语言代码不易表达的指令,其目的是快速优化C源程序。在C源程序中调用内联函数,与调用一般的函数相同,只不过内联函数名称前有下划线作特殊标识。当汇编指令功能不易采用C语言表达时,可采用内联函数表示。

Intrinsics是直接与C6000汇编指令映射的在线函数,不易用C/C++语言实现其功能的汇编指令都有对应的intrinsics函数,使用方法与调用函数一样,也可使用C/C++变量。

如以下程序:

;5.4DSP的C/C++代码优化;5.4.6调整数据类型

C64xDSP内部数据总线和寄存器宽度是32位的。一般遵守的规则如下:

(1)在使用过程中,注意int和long两种类型的宽度不一致,long型数据为40位,会产生额外的指令和占用更多的功能单元。

(2)在使用loopcounts时应尽量使其为int型或unsignedint型数据,以避免不必要的符号位扩展。

(3)尽量使用short类型进行乘法运算,因为这种数据类型适应C6000中的16位乘法器。如进行一次short*short运算只需1个时钟周期,而进行一次int*int运算则需5个时钟周期。

;(4)循环计数器应使用int或无符号int类型,不用short。

(5)short型数据的int处理,C64xDSP具有双16bit扩充功能,芯片能在一个周期内完成双16bit的乘法、加减法、比较和移位等操作。在设计时,当对连续的short型数据流操作时,应该转化成对int型数据流的操作,这样一次可以把两个16位的数据读入一个32位的寄存器,然后用内部函数来对它们处理(如_sub2等)。充分运用双16bit扩充功能,一次可以进行两个16bit数据的运算,速度将提升一倍。;5.4.7基于Cache的程序优化

C64x系列采用了两级Cache的存储器结构用于对程序和数据的缓存,Cache的使用较好地解决了低速片外数据存储和高速CPU间的矛盾。对Cache进行优化主要是从提高Cache命中率的角度来进行的,如果Cache中的数据能多次被重复利用,即DSP运算单元可直接从高速Cache中访问数据,而不需要访问慢速的存储器,就避免了DSP的数据访问等待时间。在实际编码时,一般把L2配置为Cache和SRAM混合使用模式。程序使用的一些关键数据段和代码段放入片内内存中,在片内和

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档