程序速度优化案例分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序速度优化案例分析 2006-3-27 软件DSC简介 凸阵式扇形扫查的回波信号是极坐标形式的。图示出这种极坐标形式的采样点与光栅扫描显示像素间的位置关系。 软件DSC简介 对于每一个象素点,需要找到与其相邻的四个采样点进行线性插值,得到该点灰度值。 软件DSC简介 提高代码执行效率的准备工作 建立起时间测试框架 以递增方式做测试 打开编译器的优化选项 打开编译器的优化选项 为了便于调试,编译器在Debug下一般对代码不作或只作很少的优化,所以依据Debug版的测试结果来作为效率改进的依据有时可能意义并不大,编译器可能已经作了你想作的优化。 软件DSC速度改进过程 单B图像(35c50ha探头,深度5.17),速度大约为13.7帧/秒,显然不具备实时性。(测试所用机器配置如下:cpu: 奔腾四2.8G,L1 data cache 8K Bytes,L2 cache 512K Bytes。 ) UConvexDSC::DSC() 以空间效率换取时间效率 经过这一步优化,耗时从72ms减少到8.8ms,达到113.9帧/秒。 将循环体的逻辑判断移到循环体外 通过这一修改,耗时从8.8ms减少到5.5ms,达到180.8帧/秒。 循环体内工作量最小化,减少冗余的操作 这一步改进使得耗时从5.5ms减少3.6ms,达到274帧/秒。 CPU的cache对性能的影响 存储器层次结构 存储器层次结构中的基本缓存原理 局部性原理 时间局部性 在一个具有良好时间局部性的程序中,被引用过一次的变量很可能在不远的将来再多次被引用(重复引用一个变量)。 空间局部性 在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。 局部性原理对速度的影响 局部性原理对速度的影响 数据存储方式对效率的影响 原因分析 原因分析 代码耗时比例 通过提高空间效率提高时间效率 测试数据表格 不同pc上的比较测试 提高代码执行效率的一些原则 1. 不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。 2.? 局部效率应为全局效率服务,不能因为提高局部效率而对全局效率造成影响。 3. 不要一味追求紧凑的代码,因为紧凑的代码并不代表高效的机器码。 提高代码执行效率的一些原则 4. 先优化算法,再优化执行代码。 比如计算从1到100的和,使用以下代码 int sum = 0; for( int i = 1; i= 100; i++ ) sum += i; 需要执行200次加法指令,100次比较指令,100次跳转指令。而如果使用高斯公式 sum = (1+100)*100/ 2; 只需要执行1次加法,1次乘法,1次移位。 5. 找到影响代码速度的瓶颈。在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。 提高代码执行效率的一些原则 提高代码执行效率的一些原则 提高代码执行效率的一些原则 提高代码执行效率的一些原则 提高代码执行效率的一些原则 * * DSC要解决的两个主要问题是:坐标变换及插补处理。首先要将屏幕上每个象素点(DisX,DisY)转化为以探头圆心为原点的直角坐标系中的坐标(X, Y),再将(X,Y)转换为极坐标(R,θ),然后求得对应扫描线线号(Col,Row)。 95%以上时间花费在此 对于屏幕上每个象素点来说,对于给定探头,如果深度、放大系数、偏移系数固定,每个点对应极坐标位置和插值系数是固定的。如果将第一次的计算结果存储到表格中,以后计算时不需要重新计算每个点的坐标位置和插值系数,而使用表格中存储的数据,直接进行插值运算。 不需要每帧都进行计算 循环内判断应当移到循环外部 存在冗余计算 存在冗余计算 位于CPU芯片上的L1高速缓存的访问速度几乎和访问寄存器堆一样快,CPU可以在一个时钟周期内访问它们。L2高速缓存是通过一条特殊的总线连接到处理器的,访问L2的时间开销要比访问L1大5倍。而通常CPU需要几十或几百个时钟周期才能访问到内存。 分层结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。 L0和L1层之间传送通常使用1个字的块,L1和L2之间以及L2和L3之间的传送通常使用4~8个字的块。 测得软件DSC耗时增大了5.07ms,速度为98.0帧/秒,速度降低65%! C语言以行优先顺序存储数组,二维数组在内存中存放顺序如下: 如果高速缓存和内存之间传送数据块大小是4个

文档评论(0)

创业文库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档