百科问答小站 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分钟都到了,所以就坐等这次真实的出警时间是多少了。





  

相关话题

  如何看待台积电张忠谋说大陆造不出顶级芯片? 
  三星称「将准时向美国提交芯片商业数据」,对三星将产生怎样的影响?美国此举是出于什么原因? 
  苹果的M1芯片是不是证明arm可以干翻X86了? 
  为什么英特尔要坚持在他的i系列中央处理器上集成显卡? 
  为什么电脑 CPU 不像手机 SoC 那样设计成大小核? 
  2021年计算机保研,人大信息学院专硕、南大软院专硕、浙大软院专硕,从就业角度应该如何选择? 
  没有光刻机就没有半导体,那么请问光刻机里的半导体哪来的? 
  为什么这两年没再听说有什么大规模的电脑病毒爆发? 
  大一计算机专业学生如何在寒假充电? 
  请问这个峰值检波的原理是什么,为何会出现下面的问题? 

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





© 2024-06-02 - tinynew.org. All Rights Reserved.
© 2024-06-02 - tinynew.org. 保留所有权利