百科问答小站 logo
百科问答小站 font logo



x86架构处理器中不同的寄存器有性能区别吗? 第1页

  

user avatar   peng-fei-29 网友的相关建议: 
      

以下内容只针对Intel微架构。

短答案:有区别。

长答案:大多数情况下没有,少数情况下(某些指令、微架构、操作系统ABI等)不同寄存器有较大性能差别。

绝大多数x86/x86-64指令在新Intel微架构上都要经过register renaming来分配真正的物理寄存器,所以ISA层面的寄存器使用“一般”不会造成性能区别。但是有一些特例,大致分为以下几种类型:

  1. 特殊指令的微架构实现限制:

最著名的是slow LEA,既某些形式的LEA指令会很慢,比如用EBP、RBP或R13做base 地址

2. Partial register stall:Intel 建议永远使用32/64-bit 操作数而避免使用8/16-bit操作数来防止partial register stall。比如你的前一条指令将结果写入AL/AH/AX寄存器,下一条使用EAX寄存器,那这两条指令之间就会产生一个很长的延迟(好像是5-6 cycles)导致CPU pipeline 阻塞。

多说一句,partial register stall在general purpose register 上是比较好识别的,但在FLAGS上就很隐蔽。有些指令(比如INC/DEC)只修改部分FLAGS标志,这会让后续使用其他FLAGS标志位的指令也产生dependency。好在这个限制在新桌面架构(Sandy Bridge开始)上已经解决,但ATOM还有。

3. SIMD registers:AVX-SSE transition penalty, UNIX ABI 不能callee save XMM/YMM,YMM不能享受store forwarding等,能说好多……

4. Register-renaming bugs: 个别几个指令(lzcnt, tzcnt,popcnt)在Intel的某些架构上有bug,导致register renaming失效,这时候编译器需要插入指令来触发register renaming.


user avatar   bei-ji-85 网友的相关建议: 
      

我只说我知道的一个:AX/EAX/RAX寄存器比其它三个快。因为MOV/ADD/ADC指令对于AX/EAX/RAX的操作编码有两个:

这个稍微有点不符合题目,因为这是语言层面而非架构层面

手册上还有很多类似的指令




  

相关话题

  如何评价AMD总裁兼首席执行官苏姿丰博士?她为AMD的发展做出来怎样的贡献? 
  为何x86中“系统调用”要使用“内中断”实现? 
  英特尔新一代奔腾 G7400 上架,10nm 双核四线程,该款产品都有哪些亮点值得关注? 
  一颗现代处理器,每秒大概可以执行多少条简单的MOV指令,有哪些主要的影响因素? 
  ARM 宣布停止对华为后续服务,将会对华为的麒麟芯片造成哪些影响? 
  如果arm或者其他架构严重到了威胁x86架构的地位,intel和amd会将其开源并开放授权吗? 
  怎么看 Anandtech 实测骁龙 865 功耗表现不佳,会不会是下一个火龙? 
  如果华为加快5G建设,运用云处理器,搭配低端手机处理器,能否在手机芯片方面弯道超车? 
  为什么时至今日还有这么多人纠结于CPU指令集? 
  如何看超威半导体(AMD)不再向天津海光提供新的ZEN架构技术授权的? 

前一个讨论
汇编的ret怎么区分近返回还是远返回?
下一个讨论
目前(2020 年)开发WINDOWS程序,用UNICODE还是多字节更实际?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利