本帖最后由 电子玩霸 于 2015-9-28 09:46 编辑
5、指令集
指令集就是一个编码集合。它是用一些代码表达读、写等操作,命令计算机做各种运算的一套命令标准。指令集可分为复杂指令CISC、精简指令RISC、超长指令集VLIW。
CISC指令集的每个指令可执行若干低阶操作。诸如从内存读取、储存、和计算操作,全部集于单一指令之中,指令数目多而复杂,指令编码格式混乱,导致编码器复杂,流水线设计较为困难,指令不定长也带来指令对齐方面的额外挑战,因此付出了性能的代价。CISC指令集经典代表:X86。
RISC指令集对指令数目和寻址方式都做了精简,固定指令长度,统一指令编码格式,加速常用指令,流水线设计更容易,因此效率也更高。有一段时间,因为RISC的高效率,Intel在发展CISC产品线的同时,也不得不研发了RISC处理器。RISC指令集典型代表:Alpha、Mips。
CISC和RISC与在竞争的过程中相互学习、取长补短,CISC指令集在解码阶段上实现向RISC类指令的转化,将后端流水线转换成类RISC的形式。而随着技术发展,RISC指令集也达到数百条甚至上千条(loongISA有1907条),在指令集上殊途同归了。
超长指令集(VLIW)使用非常长的指令组合,把许多条指令连在一起,以能并行执行。因为和CISC和RISC软件生态不兼容的原因已经很罕见了,Intel的安腾,英伟达的丹佛都是其代表。
龙芯选择兼容Mips,一方面是因为课题组当时只有10余名成员,人力财力精力有限。另一方面,龙芯自己定义一套指令集技术上没有难度,但是无法兼容现有的计算机体系。举例来说,你既可以用“+”、“-”、“*”、“/”来定义加、减、乘、除和也可以用 “-”、“+”、“/”、“*”来定义加、减、乘、除,既可以用大写汉字来“壹”来表示1,也可以用“一”来表示1。
1+1=2,这种表述方式全世界都看得懂。
但是壹+壹=贰,就只有中国人才看得懂了。
而你若将“-”定义为加,那么壹-壹=贰,就只有你自己看得懂了——因为你无法让全世界的人跟着你的指挥棒走,让全世界人民在日常数**算中用“-”来表示加,无法让全世界学校的教科书中用“-”来表示加,无法让已经被证明的数学公式和定理中用“-”来表示加。
研发兼容Mips指令集的CPU,就如同我们在数学上放弃了传统的汉字而使用阿拉伯数字去证明数学定理,Mips指令集和阿拉伯数字只是知识的载体而非知识本身,真正具有价值的是指令集的实现方法和被证明的数学定理。 ARM于2012年购买了498条Mips指令专利,但这并不会对ARM的自主知识产权造成影响。同理,龙芯使用兼容Mips指令并不会对自主知识产权构成影响。而真正对龙芯自主可控路线产生影响的是指令集的发展权——是否有资格自主扩展指令,是否能让软件生态跟着你的指挥棒走。
|