CPU高效编程技术.pptxVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CPU高效编程技术 核心系统数据库组 褚霸(余锋) 2013-5-7 微处理器的核心技术 流水线处理 运算器高速化 RISC和CISC 超标量执行 乱序执行 分支预测 缓存 多核心 2 了解处理器Nehalem E5620 长流水线 = 15级 X86指令解释为微指令后乱序执行 等待执行的微指令放在Reserveration Station 多个ALU运算单元并发、乱序执行 Reorder Buffer中实现串行化 Instruction Retirement Pipeline 示例:4级和8级的流水线 Intel的长流水线 Front End 读入x86指令, 每个时钟周期 16字节 x86指令解析为微指令(μop) 微指令(μop)缓存 乱序执行-1 寄存器重命名 微指令进入保留站 分配临时寄存器 发射指令 各种运算 Load/Store EU EU EU 乱序执行-2 存入临时寄存器 EU中计算结果 Load/Store 按指令顺序写出结果 指令生效,真正写入 内存和物理寄存器 触发具有数据依赖的指令执行 指令量化分析 取指令,每个16字节/cycle X86指令解析为微指令 简单指令3条/cycle 复杂指令1条/cycle 保留站到EU的Port,总共6个 P0,P1,P5到ALU单元 P2,P3,P4到Load/Store单元 Instruction Retirement,4条μop/cycle Dependency Chain长度 指令优化 长流水线 = 15级 Branch prediction miss性能损耗大 减少Branch prediction miss率 减少/消除conditional branch Bit运算代替比较 Comvg指令代替比较 充分发挥Intel处理器乱序执行的能力 避免指令间存在long dependency chain 避免指令间隐性的依赖关系,例如对eflags的依赖 CPU内部各部件访问速度 11 充分利用寄存器 # define LZ4_COPYSTEP(s,d) A64(d) = A64(s); d+=8; s+=8; # define LZ4_COPYPACKET(s,d) LZ4_COPYSTEP(s,d) #define LZ4_WILDCOPY(s,d,e) do { LZ4_COPYPACKET(s,d) } while (de); 12 位运算 int r; if (!(val32)) { r=4; } else { r=0; val=32; } if (!(val16)) { r+=2; val=8; } else { val=24; } r += (!val); return r; 13 并行执行 *op++?=?*ref++; *op++?=?*ref++; *op++?=?*ref++; *op++?=?*ref++; 14 消除Conditional Branch 如何消除这个if语句 if (a b) { r = c; } else { r = d; } Bit运算版本1 int mask = (a-b) 31; r = (mask c) | (~mask d); Bit运算版本2 int mask = (a-b) 31; r = d + mask (c-d); cmovg版本 r = (a b) ?c : d; 分支可能性提示 #define likely(expr) expect((expr) != 0, 1) #define unlikely(expr) expect((expr) != 0, 0) while likely(ipmatchlimit-(STEPSIZE-1)) { … } 16 The Blocking Technique 17 The Blocking Technique // Increasing memory usage improves compression ratio // Reduced memory usage can improve speed, due to cache effect // Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache #define MEMORY_USAGE 14 #define HASH_LOG (MEMORY_USAGE-2) #define HASHTABLESIZE (1 HASH_LOG) struct?refTables { HTYPE?hashTable[HASHTABLESIZE]; }; 18 memchr magic_bits = ((unsi

文档评论(0)

118books + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档