Micro-op Queue and the Loop Stream Detector (LSD)

微指令队列将流水线前端与乱序引擎解耦合(即隔离开)。它位于微指令生成单元与重命名单元之间(参看上图),主要功能是用于隐藏不同的微指令来源(即传统译码流水线,MSROM和微指令缓存)产生的“气泡现象(即带宽不均衡)”,确保每周期可以发送4条微指令给流水线后续阶段(即乱序引擎)。

对某些指令类型,微指令队列在译码之后具有一些额外的功能。尤其是,读存操作与计算操作以及所有的写存操作,当使用变址寻址时,在译码器和微指令缓存中都表现为单条微指令(即微熔合机制)。但是在微指令队列中,这些操作会被分裂成两条微指令,被称为“离解”过程(un-lamination process):一条微指令执行读存操作,另一条执行计算操作。下面是一条典型的“读存加计算”指令:

ADD RAX, [RBP+RSI]; rax = rax + LD(RBP+RSI)

类似的,下面这条写存指令具有3个寄存器源(注意不是源操作数),会分解成“生成存储地址”与“生成存储数据”两个字操作。

MOV [ESP+ECX*4+12345678], AL

通过“离解过程”生成的额外的微指令会使用重命名和退役带宽;但是,总体上会有省电效果。对于大量使用变址寻址模式的代码(通常是数组处理),重新设计程序算法,使用基址寻址(或相对基址寻址)有时候可以提升程序性能,因为可以保持读存操作与计算操作以及存储操作始终处于熔合状态,即不会被微指令队列“离解”。

The Loop Stream Detector (LSD)

循环流侦测器LSD最初由Intel Core微架构引入(注:位于BPU中)。LSD侦测符合条件的小循环,将其锁定在微指令队列中。循环指令可以直接从微指令队列中获取,不再需要取指/译码或者从任何的缓存中读取微指令,直到分支预测失败结束循环。

符合如下特征的循环方可由LSD/微指令队列锁定:

  • 最多由8个32字节指令块构成
  • 最多28条微指令(~28 x86指令)
  • 所有的微指令同时存在于微指令缓存中
  • 可以包括最多8个采纳分支,且这些分支不能是CALL或者RET指令
  • 不能有未匹配的栈操作。例如,PUSH指令比POP指令多。

许多计算密集型的循环,查找,和软件字符串搬移操作都符合这些特征。

软件应该“机会主义式的”使用LSD功能。对于要求高性能的代码,循环展开通常比LSD循环锁定更受推荐,即便是循环展开可能导致无法做LSD锁定(例如代码长度过大)。

Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (9) - 流水线前端/微指令队列循环流侦测器LSD相关推荐

  1. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (20) - IvyBridge微架构

    Intel® Ivy Bridge Microarchitecture 第三代Intel Core处理器是基于Ivy Bridge微架构的.上述的Sandy Bridge微架构的特性也都适用于Ivy ...

  2. Intel Haswell/Broadwell架构/微架构/流水线 (2)-流水线前端

    The Front End 除了继承了Sandy Bridge/Ivy Bridge微架构的前端特性,Haswell微架构对流水线前端做的额外增强如下: 微指令缓存(uop cache,即decode ...

  3. Intel Skylake (Server) 架构/微架构/流水线 (2) - 体系结构新特性

    Intel Skylake Server微架构引入了如下的新特性(某些特性可能不是全系处理器标配),允许程序员为应用程序优化性能和能耗. 处理器核基于Intel Skylake Server微架构,这 ...

  4. Intel Skylake (Client) 架构/微架构/流水线 (5) - PAUSE指令时延

    PAUSE Latency in Skylake Microarchitecture PAUSE指令通常用于软件线程中,这些线程运行在一个处理器核的两个逻辑处理器中,等待某个锁被释放.这种短小的等待循 ...

  5. Intel® Nehalem/Westmere架构/微架构/流水线 (3) - 流水线前端

    Front End Overview 下图展示了Nehalem微架构流水线前端的主要构成组件.取指单元IFU每个周期可以从一级指令缓存中读取16字节的对齐指令流,然后将其送到指令长度译码器ILD中.指 ...

  6. Intel Core Enhanced Core架构/微架构/流水线 (6) - 指令预译码/指令队列/指令译码

    Instruction PreDecode 指令预译码器从指令Cache或者指令预取缓存区中接收16字节的指令流,执行如下的预译码操作: 确定每条指令的长度(注:x86指令是变长指令) 译码每条指令的 ...

  7. Intel Skylake (Client) 架构/微架构/流水线 (2) - 前端

    The Front End 相比起前代,Skylake  Client微架构的前端做了如下增强: 传统的译码流水线可以每周期译码出5条微指令,前代是4条微指令. 译码后微指令缓存(DSB,即Decod ...

  8. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (1) - 特性概述

    Intel Sandy Bridge/Ivy Bridge Microarchitecture Intel Sandy Bridge微架构继承了Intel Core微架构与Nehalem微架构的成功之 ...

  9. Intel, AMD及VIA CPU的微架构(39,完)

    21. 微架构的比较 已经调查的最先进微架构代表了不同的微架构核心:AMD,Pentium 4(NetBurst),Pentium M与Intel Core 2核心.现在我将讨论这些微架构的优缺点.我 ...

最新文章

  1. 总结网络执法官,p2p终结者等网管软件使用arp欺骗的防范方法
  2. Django—Model就是ORM的具体体现
  3. tensorflow版本问题导致的错误AttributeError: module ‘tensorflow‘ has no attribute ‘***‘
  4. Python的yield关键字
  5. 【报告分享】疫情期间抖音、快手带货趋势分析报告.pdf(附下载链接)
  6. 在docker for win中使用portainer管理容器
  7. c++ 单引和双引的区别
  8. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
  9. 嵩天python笔记_嵩天Python学习笔记-01
  10. ouravr某PCB高手发言总结
  11. 真正“自学”入门编程/程序员是一种怎样的体验?
  12. 三菱工控板底层源码_三菱PLC实例代码开源PLC项目源代码参考程序百度云资源下载...
  13. 计算机配置内存容量怎么调,如何设置电脑虚拟内存,电脑虚拟内存设置多少最合理?...
  14. 一种基于局域网的点对点语音通信
  15. 订单导出(1688)
  16. 小赢钱包近年来的不断创新和变革,给传统金融服务机构带助力及补充
  17. 就您所知,它只是一个Java库
  18. 手机投屏电脑 - 用电脑看手机,爽歪歪!(仅限Win10,Win7/Win8不支持)
  19. 乌云公开漏洞查询api 查看乌云最新安全漏洞
  20. Rational Software Architect 的介绍和基础教程

热门文章

  1. 用mplfinance库定制A股常用的K线、均线图
  2. 如何清空一个数组内容
  3. 数字图像处理 中值滤波 MATLAB实验
  4. 连接路由器后电脑连不上网_猫、路由器、交换机的区别
  5. 问题解决:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
  6. springboot自动配置_揭秘SpringBoot自动化配置
  7. solaris php,在Solaris 10 64位上配置PHP
  8. 计算机代码清单目录,(程序源代码清单.doc
  9. Python练习:天天向上的力量III
  10. opengl画的弧线 为什么有一个半径_怪兽怎么画?简笔画怪兽教程来啦!跟孩子一起学习画萌萌的怪兽吧...