- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DM642 的优化
工作阶段:
工作流程一般分为三个阶段。
阶段一:直接按照需要用 C 语言实现功能。在实际的 DSP 应用中,许多算法都是非常复杂,直接用汇编代码编写,虽然优化效率很高,可是实现的难度却很大,所以一般都采用先用 C 语言来实现,然后编译运行,利用 C64X 开发环境的 profile clock 工具测试程序运行时间,若不能满足要求,则进行第二阶段。
阶段二:C 语言级的优化。选择 C64X 开发环境提供的优化方式以及充分运用其他技巧,优化 C 代码,若还不能满足效率要求,则进行第三步。
阶段三:汇编级的优化。将上一阶段 C 程序中优化效率较低的部分提出来,用线性汇编语言编写,利用汇编优化器进行优化。汇编优化器的作用是让开发人员在不考虑 C64X 流水线结构和分配其内部寄存器的情况下,编写线形汇编语言程序,然后汇编优化器通过分配寄存器和循环优化将汇编语言程序转化为利用流水线方式的高速并行汇编程序。
上述的三个阶段不是都必须经过,当在某一阶段获得了期望的性能,就不必进行下一阶段的优化。
选用 C 编译器提供的优化选项
在编译器中提供了分为若干等级和种类的自动优化选项,如下:
-o:使能软件流水和其他优化方法
-pm:使能程序级优化
-mt:使能编译器假设程序中没有数据存储混淆,可进一步优化代码。
-mg:使能分析(profile)优化代码
-ms:确保不产生冗余循环,从而减小代码尺寸
-mh:允许投机执行
-mx:使能软件流水循环重试,基于循环次数对循环试用多个方案,以便选择最佳方案。
根据实际编译的程序,选择合适的优化选项,进行源程序的优化。
减小存储器相关性
为使指令达到最大效率,C64X 编译器尽可能将指令安排为并行执行。为使指令并行操作,编译器必须知道指令间的关系,因为只有不相关的指令才可以并行执行。当编译器不能确定两条指令是否相关时,则编译器假定它们是相关的,从而不能并行执行。设计中常采用关键字 const 来指定目标,const 表示一个变量或一个变量的存储单元保持不变。因此,在代码中加入关键字 const,可以去除指令间的相关性。例如下面的程序:
void vecsum(short *sum,short*in1,short*in2,unsigned int N)
{
inti; for(i=0;iN;i++) sum[i]=in1[i]+in2[i];
}
由其相关图 2(a)可见,写 sum 可能对指针 in1、in2 所指向的地址有影响,从而 in1 和 in2 的读操作必须等到写 sum 操作完成之后才能进行,降低了流水效率,为帮助编译器确定存储器的相关性,使用 const 关键字来指定一个目标,上面的源程序可改为含关键字 const 的优化源代码:
void vecsum(short * sum, const short*in1,const short*in2,unsigned int N)
{
inti; for(i=0;iN;i++) sum[i]=in1[i]+in2[i];
}
由其相关图 2(b)可见,由于使用了关键字 const,消除了指令之间的相关路径,从而使编译器能够判别内存操作之间的相关性,找到更好的指令执行方案。
使用内联函数(intrinsics)
内联函数是 C64X 编译器提供的专门函数,它们与嵌入式的汇编指令是一一对应的,其目的是快速优化 C 源程序。在源程序中调用内联函数,与调用一般的函数相同,只不过内联函数名称前有下划线作特殊标识。当汇编指令功能不易采用 C 语言表达时,可采用内联函数表示。例如在定点运算中经常要求出源操作数的冗余符号位数,这一功能如果用 C 完成的话, 需要如下的代码:
unsigned int norm(int src1)
{
unsigned int sign, result = 0; sign = src1 0 while(1)
{
if(sign)
{
if((src1 = src1 1) sign) result += 1;
else
return result;
}
else
{
if((src1 = src1 1) | sign) return result;
else
result += 1;
}
}
}
该源程序代码冗长,有较多的逻辑操作和判断跳转,运行效率低下。若用内联函数, 则是 result =_norm(src1),减少了代码长度,提高了运行效率。因此对于需要大量 C 代码才能表示的复杂功能,应该尽量用 C64X 的内联函数来表示。
short 型数据的 int 处理
C64XDSP 具有双 16bit 扩充功能,芯片能在一个周期内完成双 16bit 的乘法、加减法、比较、移位等操作。在
您可能关注的文档
- C语言程序设计-第2章 练习题.docx
- C语言程序设计-第3章 练习题.docx
- C语言程序设计-第5、6 章习题答案.docx
- C语言程序设计-第6章 练习题.docx
- C语言程序设计-第7章 练习题.docx
- C语言程序设计课程期末练习题.docx
- C语言程序设计实验报告.docx
- C语言程序之闰年,素数的判定.docx
- C语言的二维数组的指针访问.docx
- C语言复习参考题(含答案)——胡春安.docx
- 2026年青海中公农商银行(农信社)校园招聘(含校园引才)备考题库附答案详解(能力提升).docx
- 2026年浦发银行长沙分行秋季校园招聘备考题库附答案详解(黄金题型).docx
- 2026年度中国建设银行黑龙江省分行校园招聘430人备考题库及答案详解(网校专用).docx
- 2026广发银行博士后研究人员招聘备考题库及答案详解一套.docx
- 2026年度秋季中国工商银行远程银行中心校园招聘68人备考题库附答案详解.docx
- 2026广发银行西安分行校园招聘备考题库精编答案详解.docx
- 2026年度陕西省选调生招录备考题库(面向北京大学)及答案详解参考.docx
- 2026广东华兴银行秋季校园招聘备考题库及一套参考答案详解.docx
- 2026成都银行秋季校园招聘(第一批次)备考题库及答案详解(网校专用).docx
- 2026甘肃农信校园招聘备考题库及答案详解(名师系列).docx
原创力文档


文档评论(0)