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



x86指令集通过uops解码后通过RISC内核执行,是不是代表x86实际上已经属于半个RISC核? 第1页

  

user avatar   mu-tou-long 网友的相关建议: 
      

2020年了还讨论risc和cisc哪个好,真的无视业界这30年发展了么?


risc是精简指令集计算机,cisc是复杂指令集计算机,相对于cisc,risc的这个“精简”体现在三个地方:

  1. 定长指令。cisc的每条指令长度是不固定的,因此需要相对复杂的解码单元来把连续的二进制指令数据分解为一系列的指令数据。risc直接根据指令长度就能截取出多条指令,解码单元高效的多。
  2. 指令操作数类型少。cisc的操作数有三种:寄存器、立即数和内存地址。risc的操作数只有寄存器和立即数,没有内存地址,需要操作内存数据的时候需要先通过load指令把内存数据加载到寄存器中,计算后用store指令回写到内存。
  3. 指令数量少。risc更倾向于用多个单一功能的指令组合来取代cisc中的单一指令或者多个相似指令,因此在早期的risc指令集中,指令数量比cisc少得多。当年的risc说的是程序中可以用20%的常用指令实现80%的功能。


今天的cisc,在解码过程会把一部分指令分解成μOPs,主要是针对第二种情况,把直接操作内存的指令分解成读取-计算-回写,配合乱序执行、指令并发降低内存读写导致的指令堵塞。当然也有少量原来的某些指令也会分解成多个指令组合,减少执行单元的实现开销——但这个可以忽略不计了。


但反过来,今天的ARM,也是需要把指令解码为μOPs的,具体情况没仔细研究,猜测是为了指令兼容性之类的原因。另外这么多年来,为了提高CPU性能,各种risc指令集把一些常用指令组合作为新增指令也不少,总的指令数量少说也有二三百条了,远不止cisc的20%了。


事实上,当年的cisc使用多操作数,变长指令,单一指令功能复杂,是因为这样可以大幅减少程序使用的指令数量,以及指令的内存使用量。早期的计算机,CPU频率低,内存容量小,编译器不成熟经常需要使用汇编语言编程,cisc的这种设计是非常合理的。


但随着CPU频率提升,内存容量的增大,编译器日渐成熟,cisc的这些优点不再重要,反而因为执行单元的复杂,使得CPU频率提升困难,因此业界开始转向risc的设计思路。x86为了兼容性,从P6开始在CPU内部做了一个cisc-risc的转换,但新的编译器,除非使用了特殊选项,通常会尽可能使用risc-like指令的。


十多年前,不管是risc还是cisc都有了频率接近4GHz的CPU,CPU的频率受限于物理限制以及功耗,难以再进一步提升,用单一指令以实现一些常用指令组合的功能再次成为CPU提高计算性能的重要手段,FMA、x86的AVX、ARM的NEON等扩展指令集均是这种思路的产物。这个时候的risc,已经完全说不上是“精简”了。


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

uops不是RISC。

然后执行过程中再使用RISC内核

你这句是错的。

微码跟RISC毫无关系。

具体的,看 @木头龙 的答案吧。




  

相关话题

  为什么CPU主频一般都比FPGA快,但是却说FPGA可以帮助CPU加速? 
  英特尔公司(Intel)为什么不做安谋(ARM)芯片? 
  如果中国被美国禁止使用 Android、iOS、Windows 系统,会对中国造成怎样的影响? 
  如何激怒一位计算机科学爱好者? 
  为什么Intel掌握着CPU的核心技术,开发出操作系统的却是微软? 
  对于初入职场的程序员, 读书 读好的代码 造轮子 哪个更重要? 
  为什么中国有超级计算机,但是中国的 CPU 不行? 
  为什么计算机科学没有系统的学派? 
  计算机系统是如何显示一个字符的? 
  Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗? 

前一个讨论
公历1582年消失了10天,但我国的农历用了这么多年,难道没有误差吗?
下一个讨论
为什么c51编程多用unsigned char/int?





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