从TLB entry数目来看,局限于SRAM的size、功耗,片上都不会放太多,而且一般都分2
级,这一点大家都差不多。不同的是,L2 TLB miss之后,x86/arm硬件会自己page tab
le walk然后硬件自己填写TLB,而MIPS会抛出一个异常让软件填写(当然异常处理程序
的实现一般也是从page table里取),这里我觉得一定程度上是有效率损失,但效率损
失到底有多少?我猜应该不太大,因为即使是x86硬件自己填写TLB也是需要访问外存,
我猜访问外存在这里是主要矛盾,MIPS的TLB refill异常处理没有多少条指令,现在CP
U处理速度都很快,所以我觉得差别不大。我猜MIPS TLB这样设计也是有优点的:MIPS的
TLB可以由用户控制增加了灵活性,它可以让用户灵活配置页表大小;另外硬件实现起来
应该也会比较简单。
MIPS是Million Instructions Per
Second的缩写。MIPS是衡量CPU速度的一个指标,它指每秒处理的百万级的机器语言指令数。就像是一个Intel 80386
电脑可以每秒处理3百万到5百万机器语言指令,即我们可以说80386是3到5MIPS的CPU。
从表面看,MIPS既容易理解,又符合人的直觉。其实,用MIPS作为度量性能的指标存在三个问题。
首先,MIPS规定了指令执行的速率,但没有考虑指令的能力。我们没有办法用MIPS比较不同指令集的计算机,因为指令数肯定是不同的。其次,在同一计算机上,不同的程序会有不同的MIPS,因而一台计算机不会只有一个MIPS值。最后,如果一个新程序执行的指令数更多,但每条指令的执行速度更快,则MIPS的变化是性能无关的。
是指单字长定点指令平均执行速度。
MIPS即Million Instructions Per Second的简写,计算机每秒钟执行的百万指令数,是衡量计算机运行速度的指标,即每秒处理的百万级的机器语言指令数,是衡量计算机运算速度的指标。MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。
现如今CPU的频率越来越高,又是流水线又是超标量计算又是双核多核的,单纯以时钟频率来衡量计算机的速度已经不再科学,用MIPS来衡量相对比较合理。MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。
mips存在的问题
MIPS是指令执行的速率,规定了性能和执行时间成反比,越快的计算机具有越高的MIPS值。从表面看,MIPS既容易理解,又符合人的直觉。其实用MIPS作为度量性能的指标存在三个问题。
首先MIPS规定了指令执行的速率,但没有考虑指令的能力。我们没有办法用MIPS比较不同指令集的计算机,因为指令数肯定是不同的。其次在同一计算机上,不同的程序会有不同的MIPS,因而一台计算机不会只有一个MIPS值。
最后一点,也是最重要的一点,如果一个新程序执行的指令数更多,但每条指令的执行速度更快,则MIPS的变化是性能无关的。
寄存器的大小为32位,由于32位为一组的情况很常见,所以称之为 “字(word)” ,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差4。另外,处理器只能将少量的数据保存在寄存器上,剩下的数以十亿记的数据都是放在存储器上的。比如数据结构和数组等。所以MIPS体系中要对存储器和寄存器之间的数据进行传输,就有了 数据传送指令 。其具体的实现方法是:讲一个基址存于寄存器中,然后通过数据传送指令进行取值,所以当使用数据传送指令取存储器中的数据(字)的时候,其 地址偏移量是基址+4 逻辑偏移量。按字节编址的情况下,所有字的起始地址必须是4的倍数,这就是 对齐限制 。
对立即数(也就是常数1,2··· 这些存放在存储器中的数据)的 *** 作一般都是相对于对寄存器 *** 作的指令加上一个i(immediately),对于无符号数则加上一个u,默认情况下是对寄存器进行有符号数的 *** 作。另外注意,由于“0”这个数用处远比别的常数大,所以专门在寄存器zero中存放了0,且恒为0;至于为什么大?有的时候是要判断一个数是否小于0有时候是要用0进行 *** 作,比如异或,或非等一些 *** 作可能用的上,所以其概率远远的高于别的常数,这就是前面讲过的“加速大概率事件发生”的重要思想的体现!
目前普遍采用二进制补码的方式实现负数,为什么呢?我也是一阵苦恼,后来慢慢的摸索发现,二进制补码可以直接进行想加 *** 作就得出其具体的数值,与无符号数完美的统一,具体的实现方式是把符号位,也就是最左端的一位作为符号位,然后在计算机十进制数值的时候,对符号位的十进制值取负数,然后与后面的位数的十进制数相加,就会得到其表示的负数,而取反码这一方式虽然正数负数对称,但是存在了两个0 的问题,对于粗心的程序员是很麻烦的,另外,求一个正数的相反数的补码表现形式很简单,补码=反码+1,比如0010 表示+2,第一位是符号位, 如果要取-2,那么只需要先变为1101,然后加1 ,得到1110,这就是二进制的-2的补码表示。转换为十进制的时候就是
当然,这一公式仅仅针对负数,正数的反码补码都是原码。
很多时候存在了把十六位数转换为32位数的情况。这个时候,只需要把符号位复制16次,并且把原来的16位数放在右边,符号位复制后的16个数放在左边,组合之后的32位数就是32位的符号数了。然后你再算相反数的补码表示,就会发现,好神奇哟~~
(1)CISC指令集
CISC指令集,也称为复杂指令集,英文名是CISC,(Complex Instruction Set Computer的缩写)。在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个 *** 作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。其实它是英特尔生产的x86系列(也就是IA-32架构)CPU及其兼容CPU,如AMD、VIA的。即使是现在新起的X86-64(也被成AMD64)都是属于CISC的范畴。
要知道什么是指令集还要从当今的X86架构的CPU说起。X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM1981年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加了X87芯片,以后就将X86指令集和X87指令集统称为X86指令集。
虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486直到过去的PII至强、PIII至强、Pentium 3,最后到今天的Pentium 4系列、至强(不包括至强Nocona),但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU(如AMD Athlon MP、)都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。x86CPU目前主要有intel的服务器CPU和AMD的服务器CPU两类。
(2)RISC指令集
RISC是英文“Reduced Instruction Set Computing ” 的缩写,中文意思是“精简指令集”。它是在CISC指令系统基础上发展起来的,有人对CISC机进行测试表明,各种指令的使用频度相当悬殊,最常使用的是一些比较简单的指令,它们仅占指令总数的20%,但在程序中出现的频度却占80%。复杂的指令系统必然增加微处理器的复杂性,使处理器的研制时间长,成本高。并且复杂指令需要复杂的 *** 作,必然会降低计算机的速度。基于上述原因,20世纪80年代RISC型CPU诞生了,相对于CISC型CPU ,RISC型CPU不仅精简了指令系统,还采用了一种叫做“超标量和超流水线结构”,大大增加了并行处理能力。RISC指令集是高性能CPU的发展方向。它与传统的CISC(复杂指令集)相对。相比而言,RISC的指令格式统一,种类比较少,寻址方式也比复杂指令集少。当然处理速度就提高很多了。目前在中高档服务器中普遍采用这一指令系统的CPU,特别是高档服务器全都采用RISC指令系统的CPU。RISC指令系统更加适合高档服务器的 *** 作系统UNIX,现在Linux也属于类似UNIX的 *** 作系统。RISC型CPU与Intel和AMD的CPU在软件和硬件上都不兼容。
目前,在中高档服务器中采用RISC指令的CPU主要有以下几类:PowerPC处理器、SPARC处理器、PA-RISC处理器、MIPS处理器、Alpha处理器。
(3)IA-64
EPIC(Explicitly Parallel Instruction Computers,精确并行指令计算机)是否是RISC和CISC体系的继承者的争论已经有很多,单以EPIC体系来说,它更像Intel的处理器迈向RISC体系的重要步骤。从理论上说,EPIC体系设计的CPU,在相同的主机配置下,处理Windows的应用软件比基于Unix下的应用软件要好得多。
Intel采用EPIC技术的服务器CPU是安腾Itanium(开发代号即Merced)。它是64位处理器,也是IA-64系列中的第一款。微软也已开发了代号为Win64的 *** 作系统,在软件上加以支持。在Intel采用了X86指令集之后,它又转而寻求更先进的64-bit微处理器,Intel这样做的原因是,它们想摆脱容量巨大的x86架构,从而引入精力充沛而又功能强大的指令集,于是采用EPIC指令集的IA-64架构便诞生了。IA-64 在很多方面来说,都比x86有了长足的进步。突破了传统IA32架构的许多限制,在数据的处理能力,系统的稳定性、安全性、可用性、可观理性等方面获得了突破性的提高。
IA-64微处理器最大的缺陷是它们缺乏与x86的兼容,而Intel为了IA-64处理器能够更好地运行两个朝代的软件,它在IA-64处理器上(Itanium、Itanium2 ……)引入了x86-to-IA-64的解码器,这样就能够把x86指令翻译为IA-64指令。这个解码器并不是最有效率的解码器,也不是运行x86代码的最好途径(最好的途径是直接在x86处理器上运行x86代码),因此Itanium 和Itanium2在运行x86应用程序时候的性能非常糟糕。这也成为X86-64产生的根本原因。
(4)X86-64 (AMD64 / EM64T)
AMD公司设计,可以在同一时间内处理64位的整数运算,并兼容于X86-32架构。其中支持64位逻辑定址,同时提供转换为32位定址选项;但数据 *** 作指令默认为32位和8位,提供转换成64位和16位的选项;支持常规用途寄存器,如果是32位运算 *** 作,就要将结果扩展成完整的64位。这样,指令中有“直接执行”和“转换执行”的区别,其指令字段是8位或32位,可以避免字段过长。
x86-64(也叫AMD64)的产生也并非空穴来风,x86处理器的32bit寻址空间限制在4GB内存,而IA-64的处理器又不能兼容x86。AMD充分考虑顾客的需求,加强x86指令集的功能,使这套指令集可同时支持64位的运算模式,因此AMD把它们的结构称之为x86-64。在技术上AMD在x86-64架构中为了进行64位运算,AMD为其引入了新增了R8-R15通用寄存器作为原有X86处理器寄存器的扩充,但在而在32位环境下并不完全使用到这些寄存器。原来的寄存器诸如EAX、EBX也由32位扩张至64位。在SSE单元中新加入了8个新寄存器以提供对SSE2的支持。寄存器数量的增加将带来性能的提升。与此同时,为了同时支持32和64位代码及寄存器,x86-64架构允许处理器工作在以下两种模式:Long Mode(长模式)和Legacy Mode(遗传模式),Long模式又分为两种子模式(64bit模式和Compatibility mode兼容模式)。该标准已经被引进在AMD服务器处理器中的Opteron处理器。
而今年也推出了支持64位的EM64T技术,再还没被正式命为EM64T之前是IA32E,这是英特尔64位扩展技术的名字,用来区别X86指令集。Intel的EM64T支持64位sub-mode,和AMD的X86-64技术类似,采用64位的线性平面寻址,加入8个新的通用寄存器(GPRs),还增加8个寄存器支持SSE指令。与AMD相类似,Intel的64位技术将兼容IA32和IA32E,只有在运行64位 *** 作系统下的时候,才将会采用IA32E。IA32E将由2个sub-mode组成:64位sub-mode和32位sub-mode,同AMD64一样是向下兼容的。Intel的EM64T将完全兼容AMD的X86-64技术。现在Nocona处理器已经加入了一些64位技术,Intel的Pentium 4E处理器也支持64位技术。
应该说,这两者都是兼容x86指令集的64位微处理器架构,但EM64T与AMD64还是有一些不一样的地方,AMD64处理器中的NX位在Intel的处理器中将没有提供。
MIPS基本流水线中可以采用以下静态方法降低分支损失:
延迟分支(Delayed Branching):延迟分支是指在分支指令之后插入一条或多条指令,这样分支指令的结果可以在下一条指令中得到,并且如果分支不成立,那么这些指令会被抛弃。这样可以避免在分支指令处产生流水线清空的情况,从而提高流水线的效率。
静态预测(Static Prediction):静态预测是指在编译阶段对分支指令的执行结果进行预测,然后在运行时根据预测结果来决定是否进行分支 *** 作。通常静态预测的方法包括两种:总是预测分支成立(Always Taken)和总是预测分支不成立(Always Not Taken)。这种方法的缺点是无法适应程序执行过程中分支行为的变化。
分支目标缓存(Branch Target Buffer,BTB):BTB是一个高速缓存,存储分支指令的目标地址和是否分支的标志位。如果分支指令的目标地址在BTB中已经存在,那么就可以直接跳转到该地址,从而避免了流水线清空的情况。这种方法的缺点是需要占用一定的硬件资源,同时也可能出现缓存冲突的情况。
分支历史缓存(Branch History Buffer,BHB):BHB是一个缓存,存储程序中分支指令的历史信息,包括该分支指令的执行结果以及它之前的若干个分支指令的执行结果。根据这些信息,可以使用一些预测算法来判断当前分支指令的执行结果,从而避免流水线清空的情况。这种方法的缺点是需要占用更多的硬件资源,并且预测算法的准确性也可能受到程序执行行为的影响。
以上就是关于请教个MIPS架构方面TLB的问题全部的内容,包括:请教个MIPS架构方面TLB的问题、mips是指计算机的什么mips是指计算机的什么、在计算机领域中通常用mips来描述等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)