龙芯2Nehalem处理器架构深度对比分析 联系客服

发布时间 : 星期三 文章龙芯2Nehalem处理器架构深度对比分析更新完毕开始阅读3fa1ec3183c4bb4cf7ecd117

龙芯2/Nehalem处理器架构深度对比分析

在谈到MIPS的时候,它意味着一种RISC(Reduced Instruction Set Computing,精简指令集)处理器,一种指令集,同时,MIPS又是一间公司。MIPS处理器是一种很流行的RISC处理器,而MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without Interlocked Piped Stages),其机制是尽量避免流水线中的数据相关导致的互锁问题。它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

MIPS 79R4400MC处理器,顶盖上的积分符号显得极具学院气息

龙芯一开始是一款MIPS-like(类MIPS)处理器,这个后缀like是非常重要的,在2005年(龙芯2C之前),ICT(计算所)并没有MIPS公司的许可证,因此有4条被专利保护的指令不能实现,因此只能称为MIPS-like处理器,换一种方式叫做95% MIPS Compatible(95% MIPS兼容)。这四条指令是lwl, lwr, swl, swr,属于访存地址不对齐(Unaligned Memory Access)的指令(32位模式为4条,64位模式为8条),这些指令的美国专利保护在2006年到期。龙芯1是32位处理器,龙芯2是64位处理器。

Sony PS2上的EmotionEngine可能是最为一般人熟知的MIPS处理器

2007年,ICT通过ST意法半导体获得了MIPS的授权,龙芯2成为了MIPS-compatible

(MIPS兼容)的处理器(就像AMD等厂商的处理器叫做x86兼容处理器一样),目前的龙芯2F指令系统主要由以下四个部分组成: (1) MIPS III指令集;

(2) 独有的普通用户态指令,如乘累加指令(MIPS IV中定义了乘加指令,但龙芯2号没

有采用)等;

(3) 部分与处理器结构紧密相关的核心态指令,如对Cache或TLB操作的指令(这些指

令一般随结构的不同而不同,即使在MIPS的不同处理器中也是如此)以及在未来的龙芯3号中进行多核之间同步和通信的指令等;

(4) 龙芯独有的多媒体指令。

在实现上,龙芯指令集也和一般的RISC不同,实际上,和最近的x86 CISC倒有些不谋而合:采用了微代码设计,也就是说,处理器基于的指令集和内部微架构运行的指令并不不相同,它们需要经过一个解码阶段。下面就大致从指令拾取开始介绍龙芯2的微架构,并对比着Intel的最新CISC x86指令集处理器:Nehalem处理器对比,相信更容易理解一些。 首先我们需要清楚地知道,和Nehalem一样,Godson2是一款OOOE(Out of Order Execute)乱序执行的Superscaler超标量处理器,不同的是Nehalem是CISC架构而Godson2是RISC架构。一般而言,由于RISC架构指令集比较简单,因此设计比较简洁,可以达到相对较高的频率(如,IBM的PowerPC 6+可以达到5GHz以上的频率),Godson2的流水线深度为9级,比一般的RISC处理器略高,它们依次是:fetch拾取、pre-decode预解码、decode解码、register rename寄存器重命名、dispatch分发、issue发射、register read读寄存器、execution执行、commit提交。大致上,它们可以分为取指(Instruction Fetch)、解码(Decode)、执行(Execute)、串行顺序回退(Retire)这四个阶段。

Godson-2 Microarchitecture

注:通过类RISC架构和深流水线,CISC处理器也可以达到很高的频率,如Pentium 4。为什么深长的流水线可以达到更高的频率呢?如果流水线短的话,电信号在单位时间内需要传输经过的元部件相对要更多、更远,所要求的元件延迟要更低、频率更高。深长流水线则反之。代价就是晶体管数量的增多,导致功耗增加,并且流水线堵塞的话,清空流水线带来的代价较大。

Nehalem Microarchitecture,经笔者整理

可以发现,它们是有不少相似之处的。龙芯2借鉴、集成了大多数现代处理器的典性架构设计。需要特别说明的一点是,一般的RISC用Big-Endian架构比较多,所有的x86处理器都是Little-Endian架构。Big-Endian和Little-Eendian这两个术语来自Jonathan Swift在十八世纪的嘲讽作品《Gulliver's Travels》(《格列佛游记》),书中Blefuscu帝国的国民被根据吃鸡蛋的方式划分为两个部分:一部分在吃鸡蛋的时候从鸡蛋的大端(big end)开始,而另一部分则从鸡蛋的小端(little end)开始,并因意见不同而引发了六次内战。我们一般将endian翻译成“字节序”,将big-endian和little-endian称作“大尾”和“小尾”。 大尾和小尾有什么用呢?在设计计算机系统的时候,有两种处理内存中数据的方法。叫作little-endian小尾段的方法中存放在内存中最低位的数值是来自数据的最右边部分(也就是数据的最低位部分),大尾段则相反。x86的CPU使用的LE被Windows中称为“主机字节序”。网络传输使用BE,因此BE也常被成为“网络字节序”。和一般的RISC处理器不同,MIPS