Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436430
  • 博文数量: 111
  • 博客积分: 4290
  • 博客等级: 上校
  • 技术积分: 1301
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 14:22
个人简介

努力工作,建立一个幸福的家庭。

文章分类

全部博文(111)

文章存档

2015年(4)

2013年(9)

2012年(6)

2011年(17)

2010年(69)

2009年(6)

分类: WINDOWS

2011-02-23 19:44:19

关于优化我的经验是这样的:
一、首先考虑从系统结构上优化,比如尽量减少待处理数据的无谓搬移,考虑你DSP片内存储量和每次处理数据量对系统结构优化,这部分的优化应该最早做;
二、其次从算法层面上着手,看采用的算法有没有更好更简单的计算方法,算法是否有某种对称性,可否采用更合适的数据结构等等,这方面的优化比程序上的优化更明显;
三、如果算法层面暂时无更好的优化办法,看看软件结构能否优化。
比如:
         1
)多层的循环结构能否减层。我经常看到这样的程序:
             for(i = 0; i++; i< A)
                 for(j = 0; j++ j< B)
                 {
                       E[j]  = C[j] - D[j];
                 }

            
这个可以优化成:
             for(i = 0; i++; i             {
                     E[i] = C[i] - D[i];
             }

            2
关键循环结构中的条件、跳转指令应尽量避免,哪怕会增加一些循环次数,循环中没有条件指令优化器更容易优化;
            3
)关键循环不要调用子函数
            
其它还有一些,具体可以看看手册,手册上讲的很清楚
四、结合DSP系统的硬件结构优化
            1
)看你处理的数据是放在片内还是片外,如果放在片外的话这个建议将数据分块分批倒入片内处理,类似于流水结构;
            2
)针对外部数据可对L2 cache优化
五、结合DSP优化器、指令系统等进行优化
           
这部分可以详细的看TI的手册,大概有这几个方法:
            1
)优化选项,-o3 -pm 取消-g 等等这些选项,如果你的软件结构很好,那么它们的优化效果很明显;
            2
)加一些优化指示符指导优化,这部分看手册,包括存储地址无关性,SIMD(单指令多数据处理)等等;
            3
)用一些专用指令,比如6000提供饱和加、溢出减指令,可以不必用条件判断;
            4
)如果效果还是不好,用线性汇编改写你的程序,将你的优化思想用线性汇编表述出来,一般到地步就可以了;
            5
)如果线性汇编优化未能尽显你的优化思想,那就汇编吧,优化器不会再帮助你优化,完全是你自己控制程序了,自己做软件流水吧;
           
这部分需要有比较丰富的优化经验和扎实的优化功底,多多积累,多看资料。
最后要重点说下:
           
优化是没有止境的,在对程序对细致优化前要对程序每个部分测试下时间,对非常耗时的部分做优化,一但满足你的要求就可以,不要为了优化而优化,我们应该有更重要的东西要学,不要陷在优化上而不能自拔!
阅读(1065) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~