嵌入式系统的性能优化设计资料.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.3.2.4 平台相关的优化 利用平台特定的指令,比如 ARM上利用条件执行替代条件跳转 比如ARM中用Branch-and-link实现函数调用,可以节省返回地址压栈 if (i j) i -= j; else j -= i; CMP Ri, Rj ; set condition NE if (i != j) ; GT if (i j), ; or LT if (i j) SUBGT Ri, Ri, Rj ; if GT, i = i-j; SUBLT Rj, Rj, Ri ; if LT, j = j-i; 利用平台特定的结构,比如 8051中利用通用寄存器shadow机制,省去中断响应过程中对寄存器的现场保护 ARM中带F后缀的,可以把浮点计算直接交给FPU来处理 利用ARMV6中引入的SIMD扩展实现一条指令同时处理多路数据 减少cache miss 如果一个数据结构大小与Cache的大小可比拟,那么尽量将该数据结构的所有处理都集中在一块完成,以免造成多次Cache loading 处理一个大数据结构A 处理另一个大数据结构B 又处理A 处理一个大数据结构A 又处理A 处理另一个大数据结构B Cache更形动作: A装入Cache A从Cache中淘汰(即写入内存中) B装入Cache B从Cache中淘汰 A装入Cache Cache更形动作: A装入Cache A从Cache中淘汰(即写入内存中) B装入Cache 使用与处理器的自然边界对齐(alignment)的数据结构 一般处理器访问内存时存在一个自然边界的概念,比如8字节对齐。如果一个数据结构的边界不在这个边界上,需要额外的一次操作。 可以通过#pragma pack编译指令改变编译器缺省行为 对于Intel64架构处理器(64位的x86) char c1, c2, c3; long l; 需要两条mov指令 只需一条mov指令 c1 c2 c3 l 流水线编排(Pipeline Scheduling) 目标是减少流水线stall(空转) 需要对CPU实现结构的深层了解 一般Compiler会做一些这样的考虑,但是想达到最优还是得手工操作。 支持乱序执行的CPU实现结构可以动态的做一定程度的流水线编排 但是大多数嵌入式CPU都不支持乱序执行 由于难度实在太大,一般最对最关键的算法进行这样的优化。 ... ... ADD R1,R2,R4 ADD R1,R2,R4 ADD R2,R2,#1 LDR R4,[R1] ADD R3,R6,R2 ADD R2,R2,#1 LDR R4,[R1] ADD R3,R6,R2 ADD R7,R4,#2 ADD R7,R4,#2 从内存Load数据一般需要多个周期,而下一条指令依赖于R4的值,所以流水线只能stall 此时可能LOAD R4已经完成,可以马上执行这条指令 流水线编排的例子 7.4 软件优化的工具 Profiling工具 帮助你分析程序执行的热点,如GNU gprof 某西雷工具还可以帮你分析流水线调度和Cache的miss情况 比如Intel的VTune(用于Intel X86处理器)和IBM的Mambo(用于PowerPC处理器) 编译器 编译器可以实现部分上述的软件优化方法。某些方法是缺省就做,某些是缺省不做的,可以通过编译器命令行选项来指定 现成的已经优化的常用算法库 比如Intel针对于其X86处理器的 IPP(Intel Performance Primitives)和TI针对于其DSP的媒体codec实现库 GCC的与优化有关的命令行选项 细粒度的优化方法控制 比如-floop-optimize(不变量外提等)-funroll-loops,-finline-functions 按预定义的级别的优化控制 -O1/-O – 基本的优化,不涉及空间换时间的优化,比如-floop-optmize等 -O2 – 更多一些优化,比如指令流水线编排,但仍然不涉及空间换时间的优化 -O3 – 最高程度的优化,使用需要用空间换时间的方法,如inline函数 每后一级别包括所有前一级别的措施 具体参考gcc的man page 需要注意这些优化会让调试时源代码和实际指令对应不上,带来一些困惑,所以调试阶段最好用-O0关闭所有优化 * 本章没有对应书上的章节,为补充章节 * SDR(Single Data Rate,单倍数据速率)、DDR(Double Data Rate,双倍数据速率)、QDR(Quad Data Rate,四倍数据传输率)都是内存访问接口(包括相应的总线)的标准。 SDR只在时钟的上升沿传输数据,读写是在同一条数据总

文档评论(0)

2266670 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档