文档详情

CC程序设计及代码优化

r***
实名认证
店铺
PDF
837.03KB
约22页
文档ID:47206897
CC程序设计及代码优化_第1页
1/22

1BIT/TI1第六章 TMS320C6000的软件编 程及代码优化BIT/TI2主要内容?C语言编译及优化?汇编语言优化?使用汇编优化器BIT/TI3C62xx/C67xx编程工具效率编程 工作量BIT/TI4软件工具流程BIT/TI5代码开发流程代码开发流程BIT/TI6建议的程序开发流程C程序C程序优化用线性汇编改 写关键代码段2BIT/TI75.1 C语言编程及优化BIT/TI8除个别例外,C6000C/C++编译器支持全部C/C++语言,同时有一些补充和扩展,极大地缩短了软件开发周期C/C++编译器根据用户程序内提供的信息和用户指定的编译选项进行优化一、 TMS320C6000C/C++编译器BIT/TI9二、编写及编译C语言程序1、对数据类型的考虑 C6000编译器对数据类型确定了尺寸(包括有符号和无符号)BIT/TI10编写程序时遵循以下原则:• 避免在代码中将int和long作为同样尺寸处理;• 对于定点乘法输入,尽可能使用short型;• 循环计数器应使用int或无符号int类型,不用short;• 当使用浮点C67xx时,使用-mv6700编译器开关,使所产生的代码能利用C67xx的硬件资源和浮点指令集BIT/TI112、编译C语言程序C6000编译器包括一个外壳程序cl6x,可一步完成代码的 编译、汇编优化、汇编和连接。

Cl6x [options] [filenames] [-z [linker options] [object files]BIT/TI12优化选项作用优化级别-o0优化寄存器的使用-o1本地优化-o2或-o全局优化-o3文件级优化低高•经过C优化器的优化,以及其它C语言优化后, C代码效率可达70-80%•用优化选项启动优化器选项有软件流水功能3BIT/TI13C优化器的使用步骤-建议• 不带优化选项进行编译(功能验证)cl6x -g -s file.c -z• 用优化选项-o2进行编译(-o2是与符号调试兼容的最高优化级别)cl6x -g -o file.c -z• 用最高级别优化选项进行编译 cl6x -o3 -pm file.c -z以上每个步骤都需要进行功能验证注意BIT/TI14C优化器选项优化选项作用优化级别-o0优化寄存器的使用-o1本地优化-o2或-o全局优化-o3文件级优化低高优化器选项有软件流水功能BIT/TI15与优化有关的其它编译选项• 建议使用建议使用 – -pm与-o3合用,进行程序级优化 – -mt程序中没有数据aliasing – -x2函数内联 • 不要使用不要使用 – -ml大模式(使得.bss段内的变量都按far方式访问) – -g符号调试 – -s, -ss, -os C编译器生成的汇编文件内,C语句作为注释出现Aliasing 两个指针指向同一个变量, 或一个指针修改后指向 另外一个变量BIT/TI163、存储器相关性为使代码达到最大效率,C6000编译器将尽可能把指令安排为并性执行。

为此,必须确 定指令的相关性:一条指令必须在另一条指令 之后执行编译器对指令并行性的原则:如不能确定两条指令不相关,则编译器假定它们是相关 的,指令串行执行;如能确定不相关,则并行 执行BIT/TI17(1)使用关键字restrict来标明一个指针是指向 一个特定对象的唯一指针 例6-1 void vecsum(short *sum, short *in1, short *in2, unsigned int N) { int i; for (i=0; i>2; #pragma MUST_ITERATE(10); for (i=0; i= 最小循环次数流水代码 执行较快BIT/TI113消除冗余循环• 关闭软件流水(-mu)减小代码尺寸,但也减小吞吐量 • 指出运算迭代次数(.trip)如果.trip≧最小循环次数,仅产生流水循环如果.trip<最小循环次数,产生两种循环 • 不产生冗余循环(-ms)如果没给出.trip,仅产生不流水循环如果给出.trip,且.trip≧最小循环次数,仅产 生流水循环BIT/TI114指出运算迭代次数Dotp: .cprocp_m, p_n, count .regp_m, m, p_n, n, prod,sum,count zero sum loop: .trip 40 ldh*p_m++, m ldh*p_n++, n mpym, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop .return sum .endproc指出运算迭代次数20BIT/TI115点积的完整线性汇编Dotp: .cprocp_m, p_n, count .regp_m, m, p_n, n, prod,sum,count zero sum loop: .trip 40 ldh*p_m++, m ldh*p_n++, n mpym, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop .return sum .endprocBIT/TI116三、调用汇编优化器调用汇编优化器和汇编器仅调用汇编器BIT/TI117四、多周期循环的软件流水BIT/TI118软件流水过程1 . 用C语言实现算法并验证 2 . 写C6x线性汇编代码 3 . 画相关图 4 . 分配功能单元和寄存器 5 . 建编排表 6 . 将编排表转换为C6x汇编代码BIT/TI119加权矢量和软件流水 第一步:C代码BIT/TI120第二步:线性汇编代码21BIT/TI121第三步:相关图BIT/TI122第四步:分配功能单元BIT/TI1232周期循环2个周期/每次循环迭代迭代间隔:每次循环迭代 占用的周期数BIT/TI124多周期循环迭代BIT/TI125多周期循环BIT/TI126第五步:建迭代间隔编排表(1)22BIT/TI127第五步:建迭代间隔编排表 (2)BIT/TI128第五步:建迭代间隔编排表 (3)BIT/TI129第五步:建迭代间隔编排表 (4)BIT/TI130第五步:建迭代间隔编排表 (5)BIT/TI131第五步:建迭代间隔编排表 (6)。

下载提示
相似文档
正为您匹配相似的精品文档
相关文档