主站
校园
交友
学习
论文
小说
美图
游戏
英语听力
考研
留学
电影
创业
壁纸
笑话
试卷
闪字
查询
圈子
注册
登录
会员
标签
社区银行
电信镜像
联通镜像
网通镜像
帮助
四川大学生联盟社区
»
IT 学院
» TMS320C6000系列DSP的软件优化技术
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
TMS320C6000系列DSP的软件优化技术
zhongqian
步入江湖
帖子
17
精华
0
积分
149
金币
155 金币
学校
西华大学
年级
大三
注册时间
2007-12-10
最后登录
2008-6-30
个人空间
发短消息
加为好友
当前离线
川盟社区第
32403
位会员
1
#
大
中
小
发表于 2008-6-5 04:24 PM
只看该作者
TMS320C6000系列DSP的软件优化技术
TMS320C6000系列DSP的软件优化技术
[日期:2008-03-17]
来源:
单片机及嵌入式系统应用
作者:重庆
大学
高秀娟
[字体:
大
中
小
]
摘要
详细介绍
dsp
软件优化流程;结合具体实例阐述在C语言中使用内联函数、指夸并行、字装载半字型数据、软件流水等几种代码优化技术,并对各种技术优化后的代码执行效率进行总结分析,对实际系统的开发具有重要意义。
关键词
dsp
软件优化 软件流水 TMS320C6000
1
dsp
系统的软件优化流程
dsp
系统的软件优化流程如图l所示。整个工作流程分为3个阶段:
第l阶段,直接根据需要用高级C语言实现
dsp
功能,测试代码的正确性。然后,移植到C6X平台,利用C6X开发环境Profile测试程序的运行时间。若不满足要求,则进入下一阶段。
第2阶段,利用C6X提供的优化方式和其他各种优化技巧,如使用不同的编译器选项使能软件流水,循环展开,字存取代替半字存取等,优化C语言代码。如果还不能满足要求,则进入第3阶段。
第3阶段,将C语言代码中耗时最长的部分抽取出来,用线性汇编语言重写,用汇编优化器进行优化。使用profile确定这段代码是否需要进一步优化。
2 优化过程
首先,用C语言编写程序,并通过编译验证其正确性。然后,使用内联函数和合适的优化选项进行优化,并通过CCS中的profiler确定是否有函数需要被进一步优化,使用线性汇编语言重写需要被优化的函数。最后,使用汇编优化编程技巧和汇编优化器优化汇编代码。
2.1 编译器
当优化器被激活时,将完成图2所示的过程。C/C++语言源代码首先通过一个完成预处理的解析器(Parser),生成一个中间文件(.if)作为优化器(Optimizer)的输入。优化器生成一个优化文件(.opt),这个文件作为完成进一
步优化的代码生成器(Code generator)的输入,最终生成汇编文件(.asm)。当选择编译选项时,-o2和-o3将尽可能地优化软件。
2.2 编译器内联函数
TMS320C6X提供了很多内联函数,它们直接映射为内嵌C6X汇编指令的特殊函数,这样可迅速优化C语言代码。C编译器以内联函数的形式支持所有C语言代码不易表达的指令。内联函数用下划线“_”开头,如例2,使用时如同调用普通函数一样。下面结合实例,研究一下完成200点点积经过上述各种优化技术优化后的代码效率。完成200点的点积运算C语言代码程序dotp.c如下:
3 线性汇编代码的优化
优化线性汇编代码,首先是尽可能地使指令并行,使得同一时间内多个功能单元同时被使用,然后是调整代码顺序,缩减等待时延(NOPS),如例5。接下来使用字访问short型数据.如例6,最后使用软件流水技术。当进行实际操作时,并不是要按顺序地完成上面的每一步。只要达到要求,就可以结束。
3.1 C语言代码转换到线性汇编代码
定点点积中,C语言代码内部循环使用线性汇编指令,如例3所示。
3.2 线性汇编的资源分配
①装载指令(LDW)必须使用.D单元。
②乘法指令(MPY和MPYH)必须使用.M单元。
③加法指令(ADD)使用.L单元,
④减法指令(SUB)使用.S单元。
⑤跳转指令(B)使用.S单元。
由此得到例4的汇编代码。
例4
下面的例子是没有并行执行的汇编代码:
完成200次循环迭代,经过profile clock分析循环部分,需要16×200=3200 cycles。
3.3 使用并行指令完成点积代码
使用并行指令完成点积代码如例5所示。
使用并行指令,循环体内需要8个时钟周期。这段循环代码的执行周期为8×200=l600 cycles。
3.4 使用字存取原short型数据
为进一步提高效率,使用字存取原short型数据,如例6所示。
这段代码在循环体内仍然是8个时钟周期,迭代100次为8×100=800 cycles。
4 软件流水技术
软件流水技术是用在循环语句中调用指令的方法,即安排循环中的多个迭代运算并行执行。在编译C语言代码时,可以选择编译器的-o2或-o3选项,编译器将根据程序尽可能地安排软件流水。图3所示为运用软件流水的循环结构,它包括A、B、C、D、E五次迭代,同一周期最多执行五次迭代的不同指令(阴影部分)。图3中阴影部分称为“循环内核”,核中不同的指令并行执行。核前执行的过程称为“流水线填充”,核后执行的过程称为。流水线排空”。
在
dsp
算法中存在大量的循环操作,因此充分运用软件流水线方式,能极大地提高程序的运行速度。当手绘软件流水时,首先要画出相关图,如图4所示,然后建立软件流水迭代间隔编排表,最后根据编排表写出程序。
在画相关图时应遵循:
①画出节点和路径;
②写出完成各指令需要的CPU周期;
③为各节点指派功能单元;
④分开路径,以使最多的功能单元被使用。
根据相关图写出模迭代间隔安排表,如表1所列。
由此迭代间隔表写出对应代码:
5 总结
各种优化技术所需时钟数如表2所列。表中括号内数字为循环内核时钟周期,括号前数字为流水线填充时钟周期,括号后数字为流水线排空CPU时钟周期。
由此得出遵循以上的软件优化流程和代码优化技术,可以极大地提高代码效率,这对实际应用具有
UID
32403
帖子
17
精华
0
积分
149
金币
155 金币
学校
西华大学
年级
大三
阅读权限
20
在线时间
7 小时
注册时间
2007-12-10
最后登录
2008-6-30
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
我的大学
2008级新生接待室
川盟水吧
每周话题
自由写作
大学日记
情感驿站
老乡聚会
娱乐八卦
音乐天地
影视交流
流行资讯
体育专栏
学习交流
IT 学院
大学资源
两性地带
图个痛快
会员靓照
帅男贴图
美女贴图
综合贴图
动漫卡通
四川大学城
成都东软信息学院
电子科技大学
成都农业科技职业学院
成都大学
四川大学
西华大学
成都电子机械高等专科学校
四川音乐学院
四川水利职业技术学院
四川师范大学
西华师范大学
成都信息工程学院
四川农业大学
成都理工大学
西南石油大学
西南交通大学
成都体育学院
西南民族大学
西南财经大学
申请专版
特色联盟
寝室大联盟
川盟电台——radio.scdxs.net
NJ讨论专版
读书频道
信息平台
兼职招聘
信息发布
川盟站务
意见建议
控制面板首页
编辑个人资料
积分记录
公众用户组
个人空间管理
升级个人空间
基本概况
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
回到川盟主站
|
设为首页
│
加入收藏
|
搜索
|
联系站长