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



为什么 ARM 和 MIPS 那么多寄存器,x86 那么少? 第1页

  

user avatar   zhang-huang-zhao 网友的相关建议: 
      

RISC目前有一款势头很猛的开源ISA,叫做RISCV,是体系结构界开山鼻祖,Berkley的David Patterson带领完成的。(之前所有RISC也是他...)题主提到的MIPS和ARM和它差不太多,一些基本的设计思路都一样。

到底有多少个寄存器,和编译时的寄存器分配关系很大——寄存器太少的话,就要经常把寄存器上的内容倒腾到内存里去,这一来一回用时实在是太大了;寄存器太多的话,根本用不完,白白花了材料钱和制作费。Patterson在他的《计算机体系结构:量化研究方法》这本教材里给出了一个寄存器数目的效用曲线,根据他的统计结果,大致结论是寄存器数目在16-32个之间,对于目前的编译技术而言是最优的选择。(书不在手边,有时间了会补上这个图。)

所以回过头,我们来看RISCV,五位寄存器编码,刚好32个寄存器。说一句题外话,RISCV的编码设计极其精巧,有兴趣的同学一定要写一下RISCV模拟器,体会一下Patterson大佬的设计有多精巧。

RISC ISA有一个大概的通性,就是指令的编码非常巧妙,即可以压缩编码,又能快速解码。这应该是CISC远远比不上的,所以现在的CISC芯片里实际上是包了一个RISC芯片的...

最后说一下CISC的寄存器。按照本篇回答的观点,寄存器在16-32个效用最高,再加上x86的历史遗留的寻址问题,(386寻址是上计算机组成的时候过不去的坎...)导致x86不可能支持过多的通用寄存器——一是成本和收益不对等,二是通用寄存器会挤占别的特殊寄存器(比如寻址需要用到的基地址寄存器等)。除此之外,寄存器过多,会使得指令编码难以设计,尤其是解码器难以快速解码。

比如你原来有32个通用寄存器,然后你有一套用在32个寄存器上的CISC指令。现在突然变成64个寄存器,怎么在兼容原有指令的基础之上给新加的32个寄存器编码呢?一种思路是直接在所有指令后面加上几位,用来指示各个寄存器的“新旧”,这样设计的话,本来就复杂的CISC解码器就更复杂了...另外一种思路是在原来的那套指令上就留好冗余,用于扩展,但这样浪费太大,一条指令可能也就32到64位,里面有三到四位留作冗余...

以上,欢迎讨论。对RISCV有兴趣的同学,欢迎大家关注我的GitHub LC-John,里面有我上体系实习课时写的RISCV模拟器。

// 2018.12.13更新

评论区有几个老哥说x86的寄存器XER这些前后缀是扩展。是没错,但这些是汇编扩展啊,又不是机器码扩展...汇编扩展加个字母就行了,机器码扩展可是得多用bit的呀...

旧版本里8个寄存器,每个寄存器3bit编码就行;现在加8个,一共16个,每个寄存器至少4bit编码。问题就是多出来这个bit怎么办,解码的时候解码器怎么知道这是旧的3bit编码寄存器还是新的4bit编码寄存器呢。另一种方案就是放弃原先的3bit编码,直接全部换4bit编码,行是行,但是无法向前兼容。最后一种方案,在3bit就能编码的时代,超前思考,用4bit编码,预留出来1个目前无用的bit等着未来扩展,这里的问题就是太浪费了,每个寄存器就浪费25%的存储。

上述编码问题,一直都是也应该一直都会是很难解决的问题,不管是risc还是cisc,都会遇到。risc的方案基本都是统计一下多少个够用,然后直接设计这么多,不再扩展。

以及修正一下关于RISC-V通用寄存器的说法。RISCV的ISA里规定的是32个通用寄存器,其中x0永远为0,也就是说实际可用的是31个。

为了支持主流操作系统,例如Linux,一般规定特殊使用前几个寄存器,比如x1,也就是ra,用来放返回地址,x2,也就是sp,用来指示栈顶等。最后实际可用的通用寄存器不到32个。具体请见下图。


user avatar   Ultraman-Tiga 网友的相关建议: 
      

这次舆论的重点在于警察到底是多久赶到的。

没拜码头,收保护费,打砸门面这种原因我们都知道,也不怕;

但是公权力私用或者黑白勾结这种事,就会让人非常害怕;

如果西安公权力真的黑白勾结,还睁眼说瞎话,那就需要处理整顿了。

我朝的治安也不是一直这么好的,人民也不是软弱无比的,60年代西安打的也很凶的。难不成西安各公司以后都要雇佣保安公司保护经营?

这次出警距离1公里,走路10分钟都到了,所以就坐等这次真实的出警时间是多少了。





  

相关话题

  名校计算机专业出来的只能当苦逼的程序员吗? 
  如何评价极客湾测得「高通骁龙 8 Gen1 功耗爆炸、性能孱弱」? 
  “为什么大脑不能像计算机一样有并发性,而每次只能想一件事情?不像计算机一样,可以同时开多个程序。”? 
  如何评价清华大学「天机芯」登上 Nature 封面,清华施路平团队发布全球首款异构融合类脑芯片? 
  计算机专业大学生想要在以后有一份好工作,在大学期间应该及时考哪些证书? 
  为什么TP-LINK(普联)从来不公布路由器产品的CPU、运行内存、闪存等相关参数? 
  为什么有的地方叫X86-64,有的地方叫AMD64? 
  如何看待人工智能攻破德州扑克? 
  为什么英特尔坚持用自己的晶圆厂制造消费级CPU? 
  如何评价最近CSDN的行为? 

前一个讨论
英特尔敦促主板厂商,禁用 12 代酷睿 AVX 512 指令集,如何解读这一举措?
下一个讨论
intel和amd哪一代还可以支持win7?





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