百科问答小站 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毫无关系。

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




  

相关话题

  大学如何自学计算机科学与技术? 
  12306 一崩再崩,作为程序员你最想优化哪个功能? 
  东京大学情报理工iip申请经验?是否有希望? 
  教材上说铁路订票系统是实时操作系统,可是服务器的Linux不是分时操作系统吗? 
  当初的生物热,和如今的全民CS全民AI,让你想到了什么? 
  为什么英特尔x86等多数中央处理器不支持源操作数和目标操作数同时为内存的指令? 
  物理专业学生应该具备哪些数学素养? 
  IOI国际金牌是什么水平,在此之上更高的水平是什么样的? 
  按照这个推荐的顺序学下来计算机水平能达到什么程度? 
  汇编语言转换成机器语言,具体在机器这个层面是如何实现的? 

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





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