CCS软件优化.ppt
《CCS软件优化.ppt》由会员分享,可在线阅读,更多相关《CCS软件优化.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CCS软件优化,赵翠芳,主要内容,优化方法 软件流水 多周期循环流水线设计 理解软件优化结果的反馈信息,优化方法,优化和优化过程概述(复习) 利用代码生成工具对C代码进行优化(复习) 汇编代码的优化,概述,程序优化:对软件代码进行处理以获得以下两个主要目标: 更快的运行时间 更大的代码大小 Note: 一般在更快的执行速度和更小的代码大小之间需要进行一个折中(trade off),概述,1个时钟周期内让尽可能多的功能单元在执行指令。趋近8*主频(MHz) MIPS 前提:满足各种资源限制(resource bound) 途径:(1)资源合理分配、充分使用(2)算法映射结构 DSP适合对大量数据
2、做相同的运算,概述,为实现高效代码,编程者必须熟练掌握以下几个方面的知识: 处理器结构 编程语言:C、汇编、线性汇编 代码生成工具:编译器、汇编器、连接器,代码优化的三个层次,1、C语言级的优化 2、线性汇编优化 3、手工汇编优化,C语言级的优化编译器选项,C优化编译器 使用ANSI C代码语言,可达到手工汇编代码效率的80%。如选择-o2,-o3等 整个优化过程包括不同阶段、不同层次的优化。 必须掌握每个阶段、层次的优化知识。,C语言级优化 C语言程序优化,通过下述方法改进C语言程序,可以提供编译出代码的性能: 1、使用intrinsics内联函数替代复杂的C语言程序。 2、对短字长的数据使
3、用宽长度的存储器访问数据打包处理(Packed Data Processing) 3、改进C语言循环程序,使之更有利于用软件流水技术优化。,线性汇编语言简介,线性汇编语句的基本结构 线性汇编中的伪指令 线性汇编资源安排 C代码转换为线性汇编,线性汇编语句的基本结构,基本格式与汇编语言相同,必须是ASCII码文件,扩展名必须是”.sa”,用作汇编优化器的输入文件 Label: | register mnemonic unit specifier operand list ;commend,线性汇编中的伪指令,1、调用一个函数 .call ret_reg=func_name(arg1,arg2)(
4、仅在过程procedure)内有效 2、定义一个可被汇编优化器优化,而且可被C/C+当做函数调用的线性汇编代码段的伪指令。 label .cproc vari1,vari2, 起始 .endproc 结束 3、定义一个可被汇编优化器优化的线性汇编代码段的伪指令。 label .proc vari1,vari2, 起始 .endproc 结束,线性汇编中的伪指令,4、表明存储器地址相关与不相关的伪指令 .mdepsymbol1,symbol2 1,2相关 .no_mdep 其后定义的函数段内存储器地址不相关 5、定义变量,或者说描述存入寄存器的数值变量的伪指令: .reg variable1,v
5、ariable2, 6、过程的返回值 .return argument 7、指出循环迭代次数的伪指令 label .trip minimum value,线性汇编资源安排,读取指令(LDH)必须使用.D单元 乘法指令(MPY)必须使用.M单元 加法指令(ADD)必须使用.L单元 减法指令(SUB)必须使用.S单元 跳转指令(B)必须使用.S单元,线性汇编,线性汇编文件使用“.sa”扩展名 线性汇编过程可以: 传递参数 返回结果 使用符号变量 不考虑流水线问题,写线性汇编代码举例点积,写线性汇编代码举例FIR滤波器 简写为,C代码转换为线性汇编,short DP(short *m, short
6、*n, short count) short i ; short product ; short sum = 0 ; for(i=0;icount;i+) product = mi * ni ; sum += product ; return(sum) ; ,线性汇编,实现上式,需要包括如下步骤: (1)加载采用点数据xi (2)加载滤波器系数hi (3)xi和hi相乘 (4)将(xi*hi)加入累加和 (5)将循环进行步骤1to4共40次 (6)累加器中的累计和保存入变量y.,C代码转换为线性汇编,第一步:定义函数名称、实现参数传递 short DP(short *m, short *n,
7、short count) .def _DP _DP .cproc cptr0,cptr1,vptr 1).def为definition的缩写 2).cproc表示本函数是C可调用函数,其后为所传递的参数,C代码转换为线性汇编,第二步:暂时存放临时数据的寄存器定名,由.reg ( register)完成 .reg addr_a,addr_x .reg m,n .reg product,sum,C代码转换为线性汇编,第三步,数据初始化 MV cptr0,addr_a MV cptr1,addr_x ZERO sum 前两句将数组a 和x 的首地址存入名为addr_a和addr_x的寄存器变量,以便
8、其后实现对数组的访问;最后一句是累加寄存器清零。,C代码转换为线性汇编,第四步处理程序的循环体部分 定义一个标号loop:作为循环返回的标志;然后按照原C程序语句顺序改写成汇编语句(不必指定指令执行的功能单元): product = mi * ni ; 改写 LDH *addr_a+,m LDH *addr_x+,n MPY m,n,product sum += product ; 改写为 ADD sum,product,sum,C代码转换为线性汇编,将循环变量vptr(即count)减一;利用C6x指令的条件执行功能通过对vptr是否为零的判断条件执行跳转指令: if ( vptr!=0)
9、then B loop 最后,.return实现数据的返回。 一切工作完成后,使用.endproc作为函数结束的标志。,C代码转换为线性汇编,.def _DP _DP .cproc cptr0,cptr1,vptr .reg addr_a,addr_x .reg m,n .reg product,sum MV cptr0,addr_a MV cptr1,addr_x ZERO sum loop: LDH *addr_a+,m LDH *addr_x+,n MPY m,n,product ADD sum,product,sum SUB vptr,1,vptr vptr B loop .retur
10、n sum .endproc,线性汇编不需要指出和考虑: 功能单元 寄存器 延迟间隙,.cproc/ .endproc: 确定要优化的代码段 必须成对使用 可作为C调用的函数,.reg伪指令: 声明符号变量,变量由优化器 选择与功能单元一致的寄存器 .reg在.(c)proc/ .endproc内有效 当变量为40/64bit时,变量使用 寄存器对格式:如ahi:alo,.cproc variable1,variable2,: 给出输入参数 .return:给出返回结果 .return仅在.cproc/ .endproc内有效,.proc register1,register2, ; 给出输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ccs 软件 优化
限制150内