- 1、本文档共2页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件算法优化方法.doc
软件算法优化方法(阿华 2011-11-09)
很久没有做过算法了,以后机会可能也不多了,难得一身好本领...噔噔噔...o(╯□╰)o。这里和大家分享一篇我N久前写的总结。方法、工具是会过时的,但是思想却永远不会。希望能给那些仍然奋战在算法优化前线的兄弟们一点小小的启发。
小弟之前是做DSP、ARM算法的,如果有看不懂的术语请自行查阅一下。谢谢。
由于篇幅有限,本文以思想、方法为主,缺少举例,请多多见谅。呵呵。
资质有限,难免有所疏忽,希望大虾们多多指点,欢迎交流。O(∩_∩)O~
—— 阿华 2011-11-09
作者:阿华 QQ:4749920 Email:4749920@
转载请附带原文链接。
算法优化的思想
尽可能不做、少做不必要的操作;
尽可能使用高效的运算方法取代低效的运算方法;
尽可能将CPU的所有运算器并行起来、寄存器饱和运作;
尽可能将CPU的高效处理单元集中处理性能比重较大的算法部分;
尽可能减少不必要的内存吐出、cache miss;(ARM系统尤为重要)
算法优化的前提
通过Profile工具、打点记时,获知算法中占用性能比重较大、调用次数较多的部分,并对其重点优化;
对算法复杂度进行分析(基于考虑内存吞吐、算术运算),按照CPU性能预估运算时间,并与实际统计运算时间进行比较,分析实际运算时间是否合理,如果不合理,需要再细化分析,并获知性能瓶颈出在哪些环节,可能包括内存吞吐、运算器、寄存器、cache miss等,很多时候需要进行汇编代码级的分析;
算法优化的方法
提高并行度
使用DMA以PingPong方式搬运数据,与CPU处理平行起来,尤其是视频解码显示的情况;
减少相邻代码行数据之间的相关性、依赖性,这样编译器能更容易进行优化;
对于核心循环代码,使用软件流水线优化,将执行逻辑不相关的代码行、指令操作相互并行起来;(DSP可以通过编译器来自动排流水线,ARM基本就只能靠自己写汇编代码了)
使用位宽高的指令(SIMD:Single Instruction Multiple Data)代替位宽低的指令,同时处理多个位宽低的数据运算;
使用高效的运算方法
将核心的运算放在片内内存、cache中进行计算,降低CPU访问片外内存的几率;
尽可能合理的分配寄存器,将经常反复使用的结果保存在寄存器,对于不经常使用的结果保存在栈或则堆中;(注意:栈的访问效率往往高于堆)
使用带复合功能的汇编指令,如乘法累加、相加饱和等;
使用字节对齐的内存访问方式,使用4字节对齐、8字节对齐的内存访问方式,效率会高很多;
使用算术运算(移位、加、减)代替乘法、除法运算;
空间换时间 (内存换性能)
将经常重复运算的结果进行制表,使用查表代替运算;(注意:表不能太大)
将频繁执行、性能比重较大的核心逻辑提取出来,走单独、简单的流程,避免过多执行无效的判断和跳转;(缺点:代码量会增加)
效果换时间 (质量换性能)
当效果、质量允许下降的情况下,适当省略对效果、质量影响不明显的运算部分,如视频技术中的运动估计、去噪滤波、B帧解码、Yuv2Rgb的小数处理;
优化算法架构、流程
避免重复运算、无效运算、意义不大的运算;
重复使用可以利用的中间运算结果、内存读写结果;
调整函数流程,缩短中间变量的生命周期,避免中间变量过多,导致寄存器饱和,引起不必须要的栈操作;(寄存器饱和后,中间变量会缓存在栈中,一写一读引起两次额外的内存操作)
编译方法
使用-o3、-o2;(注意:往往有时使用-o2的性能比-o3还高)
为核心循环提供尽可能多的编译信息,如循环次数、内存对齐等,方便编译器进行优化;
尽可能使用const、restricted指针,方便编译器进行优化;
调整函数代码、表格数据在链接时候的code section、data section位置,将经常互相访问的代码、数据放得相近一些,避免cache miss;
使用feedback编译方法,统计实际运行情况,然后把实际运行情况交给编译器,再对代码进行二次优化编译;(这种牛X的编译器我也只是在Tilera上见到过)
使用性能更佳的编译器;
针对平台定制
使用CPU提供的协处理器接口、硬件加速接口、硬件编解码接口;
总结
算法优化必须要有依、有据、有重点;
要充分了解你的CPU有哪些运算器、寄存器、指令、cache,编译器有哪些选项,平台有哪些接口,那样你才会清楚有多少优化空间;
在优化初期,很容易通过代码行、指令级的优化获得明显的优化效果,但是不要沾沾自喜,因为很快会到了天花板,这个时候你要好好耐心的分析瓶颈,甚至要看看汇编代码,不要怕,没你想象中那么难!
代码行的优化始终会遇到天花板,天花板是啥?天花板就是你的算法架构!到了必要的时候,要敢于真刀真枪的的给你的架构做手术!
作者:阿华
您可能关注的文档
- 调控松动:一个尚不靠谱的传说.doc
- 调控胚胎发育的基因.doc
- 调查研究2013年第四期——郑州市管城回族区安全网格化.doc
- 调查问卷-上海外国语大学-深入开展党的群众路线教育实践.doc
- 谈书面表达的写作技巧与方法.doc
- 谈信息技术对学生德育的促进作用.doc
- 谈培养低年级学生空间观念的策略.doc
- 谈多媒体技术与小学英语教学的整合.doc
- 谈如何引导学生走进精彩的问题空间.doc
- 谈惩罚在教学中的意义.doc
- 护理员、医疗救护员职业技能鉴定理论考试题库-下(简答题).docx
- 护理员、医疗救护员职业技能鉴定理论考试题库资料-下(简答题).pdf
- 古诗中的科学知识考试题库资料300题(含答案).pdf
- 2024年全国高职高专院校信息素养大赛考试题库-下(多选、判断题汇总).docx
- 青少年生态知识竞赛考试题库资料150题(含答案).pdf
- 山东省海洋知识竞赛(初中组)考试题库资料500题(含答案).pdf
- 《诗词里的科学》考试题库资料300题(含答案).pdf
- 2024年工会送温暖活动总结范文_工会扶贫帮困送温暖工作总结范文(精编4篇).docx
- 必威体育精装版2024人教版八年级地理下册期中模拟考试【及答案】 .pdf
- 机关换届选举大会上的领导讲话 .pdf
文档评论(0)