2020年了还讨论risc和cisc哪个好,真的无视业界这30年发展了么?
risc是精简指令集计算机,cisc是复杂指令集计算机,相对于cisc,risc的这个“精简”体现在三个地方:
今天的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,已经完全说不上是“精简”了。
uops不是RISC。
然后执行过程中再使用RISC内核
你这句是错的。
微码跟RISC毫无关系。
具体的,看 @木头龙 的答案吧。