采用虚拟寄存器结构设计java处理机的方法

文档序号:6411870阅读:269来源:国知局
专利名称:采用虚拟寄存器结构设计java处理机的方法
技术领域
本发明属于计算机技术领域,特别涉及设计JAVA处理机结构的新方法。
应用的需求推动了计算机性能的提高,计算机的性能是由核心部分,即处理机性能决定的。
由于微电子大规模集成电路VLSI的发展,VLSI芯片上电路的工作速度越来愈快,而芯片与芯片之间的工作速度要慢到5倍到10倍,用技术术语来说,片上(On-chip)的频宽很高,而片外(Off-chip)频宽较低。因此,现代新型处理机的设计都要充分利用On-chip频宽,才能使处理机速度(性能)充分提高,而寄存器堆是做在片上(On-chip)的,主存是在处理机芯片以外的,所以,最新处理机的设计要充分发挥寄存器与寄存器之间互相操作的指令,尽管减少处理机(有时处理机即为CPU)与主存之间的操作指令。(然而,由于高速缓存Cache是做在芯片上的,所以CPU与Cache之间的操作也相当快)。现代处理机RISC设计就基于上述思想,CISC设计也往这方面转变。
正是由于上述技术的驱动,现代计算机研究十分重视寄存器堆的设计。然而,所谓要充分发挥寄存器-寄存器操作,并不是说要把处理机芯片上寄存器堆的寄存器数量做得愈多就愈好,寄存器数愈多,也会造成如下缺点(1)寄存器数太多,在发生文本切换(Context Switching)而要保存现场和恢复现场时,保存和恢复的寄存器数太多,从而使开销增加,但在一般情况下,寄存器堆太大(即其中包含寄存器数太多)有时又用不完,形成浪费。
(2)寄存器数太多,工艺制造上会增加复杂性和成本。
因此,目前大多数新型RISC处理机中设计的寄存器堆中的通用寄存器数为32个,称之为物理寄存器,如

图1所示。每个物理寄存器都有标号,R0,R1,…R31。
然而,物理寄存器又会引起其它的缺点,即在以流水线方式执行指令时,尤其是在编译时,有时会发生两个或两个以上的中间结果,指向同一个物理寄存器的情况,从而会引起寄存器的相关性,但这种相关性有时是一种伪相关性,只要寄存器数量较多,这种伪相关性就没有了,如下面一个例子就可能产生伪相关性。
①x=R1+R2②y=R3+R4③m=(x-y)+R10在编译或执行指令时,就有可能把(R1+R2)的中间结果暂时存放在R5中,而(R3+R4)的中间结果也暂存在R5中,这就发生了相关性,而①与②有相关性,而③暂无法执下去,如图2所示。
发生相关性,就会影响到指令流以流水线方式高效率地并发地执行下去,在新型的多发射结构处理机(即在一个周期中,同时取出多条指令,要求并发地执行多条指令)中,这种相关性的可能性愈大,而相关性(不论是真是伪)对处理机性能的影响也愈大,编译优化可解决一些相关性,但那也有一定的代价。
用技术术语来说,相关性会降低指令级的并行性ILP,而提高ILP是国际上当前研究提高处理机性能的极其重要的研究方向。
国际上互联网络(Internet)发展很快,SUN公司提出的JAVA语言具有不依附于任何特定的操作系统和特定硬件平台的优点;因此,执行JAVA语言的JAVA处理机作为Internet的网络终端具有十分光明的发展前途,(网络终端又称网络计算机NC或网络PC,NetPC)。为了打破INTEL和MICROSOFT(微软)结盟WINTEL软/硬件平台的垄断,IBM,DEC等大计算机公司都极力支持JAVA,从而使JAVA意义更加重要。
用其它处理机来仿真执行JAVA语言是可以的,但其效率要比直接执行的JAVA处理机要低得多,JAVA处理机芯片目前尚未大批量销售问世,但JAVA处理机和其设计已成为世人注目的焦点,1996年底,美国杂志上登载了JAVA处理机的主要结构。
执行JAVA高级语言的JAVA处理机是面向堆栈的结构,所以JAVA处理机的核心是设计有一个64个寄存器(32位)组成的JAVA堆栈,具有64个入口,其中存放Method1,2或3的内容,如图3所示。所谓Method,实际上和一般了解的过程相当,Method的内容包括存放的参数和局部变量,Method,Frame状态,以及堆栈操作数内容,所以每一个Method要占用很多寄存器数,因此,在发生Method调用(类似过程调用)时,就有可能发生64个寄存器堆栈不够用的情况,但是,JAVA堆栈的寄存器堆也不能做得太大,其原因在本说明书第一部分中阐述的寄存器堆大小的讨论完全一样。因此,JAVA的发明者SUN公司是如图4所示的方法技术来解决Method调用所发生的堆栈不够用的问题的。
当Method A已占用64个寄存器JAVA堆栈41的一大部分,如图4(1)中用斜线表示,当MethodA加上Method B所用的寄存器总数已超过JAVA堆栈41的容量,超出的部分43用虚线表示。SUN公司是用另外设计一个暂存的寄存器堆42来解决此问题的,其方法如下先做(a)步,即把JAVA堆栈41中Method A所占的寄存器内容“腾空”出来,即把它们暂时挪动到暂存的寄存器堆中42去;然后做(b)步,把所调用的Method B内容中所超出JAVA堆栈41的寄存器43(虚线)内容放到Method A所“腾空”出的位置中去。最后走(c)步,即等到MethodB执行完毕以后,B的内容都已清零;再把暂存的寄存器堆中所保存的Method A的部分内容,再放回到JAVA堆栈41中原来“腾空”的寄存器中,恢复Method A的内容,以便从Method A的主程序再继续执行下去。
美国SUN公司JAVA处理机设计技术的特点
(I)目前图4所示的例子是MethodA调用Method B,程序设计中十分可能产生的情况是Method A调用Method B,Method B还调用C,C还调用D,...这就是所谓嵌套,嵌套的深度为多少级是随机的,是无法预测的,在发生多级嵌套时,不能马上恢复A,而是必须从底层逐渐向高层恢复。在这种情况下,在调用过程中所需的寄存器数,会大大超过JAVA堆栈所设计的64个寄存器,而这些超出JAVA堆栈所需的大量寄存器数都必须把其内容“积压”在暂存的寄存器堆中而不得很快恢复。因此,这个暂存的寄存器堆必须设计得很大,甚至“喧宾夺主”,还要远大于JAVA处理机的核心—JAVA堆栈。
可是,在一般嵌套深度很小的情况工作时,太大的暂存的寄存器堆又形同“虚设”,是一种浪费。
(II)从图4可知,美国SUN公司公布的JAVA处理机之所以会产生要用暂存的寄存器堆,根本原因是由于JAVA堆栈太小,只有64个寄存器,因此在发生Method A调用Method B时,就已经显得不够,所以要设计出“很难设计的”暂存的寄存器堆,并且采用“拆东墙,补西墙”的方法去“交换”(Swapping)和恢复(Recovering),这一段“拆补”过程还要耗费很大的时间开销。当然,由前述可知,JAVA堆栈做得太大,又会产生很多缺点。
因此,为什么不能把JAVA堆栈做成可变长度的寄存器堆,而且它最大长度可以几乎没有限制,从而在嵌套深度很深时,仍然可以满足寄存器数的需要,这样从“源头”上消除了“拆东墙,补西墙”的起因,可以不必另外设计一个暂存的寄存器堆。而本发明提出的“虚拟寄存器结构”正好满足这样的需要。
本发明的目的在于为克服已有的JAVA处理机结构的不足之处,提出用虚拟寄存器结构设计JAVA处理机的新方法,不但可以省去“很难设计的”暂存寄存器堆栈,而且可在有限长度的物理寄存器堆栈中进行大容量的方法(即Method)调用时消除伪相关性,并节省时间开销和简化逻辑。
本发明提出一种设计JAVA处理机结构的方法,包括在JAVA处理机芯片上设置由多个物理寄存器组成的物理寄存器堆栈和高速缓存器,其特征在于在所说的高速缓存器中构造由可变长度的虚拟寄存器组成的虚拟寄存器堆栈,该虚拟堆栈提供长度不受限制的逻辑地址空间;用所说的虚拟寄存器进行方法调用操作,调用完毕再将最后结果映象到所说的物理寄存器堆栈中去;该映象过程是采用快速换名表实现的,该换名表包括虚拟寄存器特征、虚拟寄存器生命计数值和虚拟寄存器号与三个位域以及数十个以上的入口。
本发明提出的另一种设计JAVA处理机结构的方法,包括在JAVA处理机芯片上设置由多个物理寄存器组成的物理寄存器堆栈和高速缓存器,其特征在于在所说的高速缓存器中构造由可变长度的虚拟寄存器组成折虚拟寄存器堆栈,该虚拟堆栈提供长度不受限制的逻辑地址空间;用所说的物理寄存器进行方法调用操作,当该物理寄存器容量不够时,将多余部分暂存于所说的虚拟寄存器堆栈中去,调用完毕则可一次地或分批地映象到所说的物理寄存器堆栈中去;该映象过程是采用快速换名表实现的,该换名表包括虚拟寄存器特征、虚拟寄存器生命计数值和虚拟寄存器号与三个位域以及数十个以上的入口。
本发明所述的虚拟寄存器结构工作原理现代新型处理机对于编译优化和指令调度都十分重视,本发明所采用的虚拟寄存器是沿用了这一新技术趋势,即在程序经过编译及优化最后产生执行码的中间,产生一个中间代码,见图5,程序在经过编译器以后,先产生中间代码,在产生中间代码阶段,为变量分配的是按逻辑地址的虚拟寄存器,而不是物理寄存器,然后,再经过编译优化和指令调度器。
在这一阶段,才把虚拟寄存器61映射(分配)到物理寄存器中去见图6。实际上可把每一个虚拟寄存器61看成是一个抽象变量,而且这个虚拟寄存器堆的长度可以比物理寄存器堆62长,可以可变长度而不受限制(实际上应用所需对长度不超过200个)。在编译化阶段,虚拟寄存器再映射到具有物理编号的物理寄存器中,这时,一些寄存器相关性和伪相关性就可以消除了,计算的两个中间结果指向同一个寄存器的可能性就没有了。
虚拟寄存器堆实际上是存放在片上的Cache中,现有的处理机的片上Cache一般在4KB以上,所以远远超过虚拟寄存器最大数量200个所需的要求。而且,Cache一行读出一般可达4个字的宽度,况且,物理寄存器堆和Cache都是在片上的,所以映射(Mapping)的工作速度可以很快,如果专门设计采用虚拟寄存器结构的片上Cache,其容量可远小于4KB或8KB,共映射工作速度可以更快。
本发明设计的采用虚拟寄存器结构的映射机制如图7所示。
该映象过程是采用快速换名表71实现的,该换名包括虚拟寄存器特征711,虚拟寄存器生命计数值712,虚拟寄存器号713与三个领域以及数十个以上的入口,虚拟堆栈提供长度不受限制的逻辑地址空间,用虚拟寄存器进行方法调用操作,调用完毕再将最后结果映象到所说的物理寄存器堆栈72中去,物理寄存器堆栈包括标志721与内容722。
图7中,特征值可以记下一些虚拟寄存器使用历史的记录,如它已被前面使用过,或它不能再被他人使用等等。虚拟寄存器生命计数值用来登记在映象过程中的映象时间关系。这些都是在编译优化和指令调度时的重要参考数据,因此这是编译优化和指令调度技术,其详细细节不在本项专利申请范围以内。
本发明具有如下特点(1)本发明提出的虚拟寄存器技术,是用片上的寄存器堆与片上的高速缓存Cache进行交换,使用户看到的是一个抽象的、长度可变的虚拟寄存器堆,它与虚拟存储器的根本不同之处在于(I)虚拟寄存器的根本目标,是提高指令执行的并行性ILP(如第一部分所述的消除寄存器相关性和伪相关性等等),而不是虚拟存储器的扩大用户编程地址空间。
(II)虚拟寄存器是用户编程时看不到的,这是在编译时使用的,而且可大大促使编译优化技术。
(III)虚拟寄存器是靠片上的寄存器堆与片上的Cache交换来实现的,这两者都在片上,所以其工作速度是在同一个数量级,当VLSI技术进展,片上频宽增高,交换速度也随之正比增加,而虚拟存储器是靠主存与外存磁盘存储器交换来实现的,主存已经比寄存器与Cache的芯片慢一个数量级,而且磁盘是以毫秒(ms)级速度工作,比CPU速度慢十万倍、百万倍。(CPU工作周期<10毫微秒)。交换所损失的时间开销巨大得不能相比,此外,这种时间损失还受到系统总线等频宽限制,受限因素太多。
(IV)物理寄存器堆中寄存器数只有32个,寻址长度只有7位,据本发明人实验分析,所需求的虚拟寄存器数最大值不过100~200个。(对于绝大多数程序而言),而物理存储器容量在几百万个单元,而且要跨过系统总线与I/O设备与磁盘相交换,所以虚拟寄存器结构的控制逻辑,要比虚拟存储器的控制逻辑简单得多,实现要简易得多。
(2)本发明的第一个内容就是用虚拟寄存器结构取代JAVA堆栈作用(堆栈实际上是物理寄存器堆,内有64个物理寄存器),从而可以避免在Method调用时,因物理寄存器数不够时,要用另外设计的暂存的寄存器堆来暂时存放和恢复。(我们俗称为“拆东墙,补西墙)。由虚拟寄存器结构构成的JAVA堆栈,我们称之为JAVA虚拟堆栈,最后再映象到物理的JAVA堆栈或其它物理寄存器堆。
(3)本发明的另一内容是把虚拟寄存器结构取代很难设计的“暂存的寄存器堆”(美国SUN公司称之为“Dnibbler)。假如SUN公司认为其JAVA堆栈是不容许更换的话。
附图简要说明图1为通用(物理)寄存器堆栈结构示意图。
图2为用适用寄存器堆栈产生伪相关性示意图。
图3为已有的JAVA物理堆栈结构示意图。
图4为已有的JAVA物理堆栈方法调用示意图。
图5为本发明虚拟寄存器结构工作原理示意图。
图6为本发明虚拟寄存器堆映象到物理寄存器堆的工作原理图。
图7为本发明虚拟寄存器的映象机制原理图。
图8为本发明用虚拟寄存器构造JAVA处理机的实施例之一原理图。
图9为实施例一的方法调用程序图。
图10为本发明用虚拟寄存器构造JAVA处理机的实施例之二原理图。
本发明用虚拟寄存器构造JAVA处理机的方法的实施例一,如图8所示。
本实施例用虚拟寄存器结构取代JAVA堆栈,形成虚拟堆栈,及其执行Method调用(多级嵌套)技术。
图8中,JAVA的用户程序先遇到的是由虚拟寄存器堆组成的JAVA虚拟堆栈81,堆栈中使用逻辑地址指针,这个虚拟堆栈中的虚拟寄存器数是不受限制而且是可变长度的。实际上,这些虚拟寄存器堆,正如前面介绍虚拟寄存器结构时所说的,是保存在JAVA处理机芯片上的Cache内的。
由于虚拟寄存器数不受限制,所以在发生Method调用时,如Method A调用Method B,而Method B又调用Method C这样的多级嵌套调用时,JAVA处理机芯片的Cache可以提供出足够多的虚拟寄存器数,满足需求,而不必去暂时存放在暂存的寄存器堆中,然后再恢复的操作(即“拆东墙,补西墙)。从用户程序看来,虚拟堆栈81提供的逻辑地址空间远远大于物理上JAVA堆栈82的64个寄存器地址空间,而在嵌套调用结束,最后通过虚拟寄存器映象机制,映象到物理寄存器堆82中,或者称JAVA堆栈中。由于这时嵌套调用结束,真正需要映象到物理寄存器堆或称JAVA堆栈中去的内容,只是那些在回到主程序时所需要用到的Method A中的那些寄存器的内容,如图9所示。这些Method A中的寄存器数较少,所以映象是很简单的,由此也可以看出,本实施例有很多优点,它完全可以避免使用美国SUN公司公布的JAVA堆栈中使用暂存的寄存器堆,并使其暂存和恢复(拆东墙,补西墙)的操作成为不必要。
本发明用虚拟寄存器构造JAVA处理机方法实施例2,如图10所示。
本实施例是在保留美国公布的JAVA处理机的结构中的JAVA堆栈101不动,而是用本发明提出的虚拟寄存器102结构去代替美国JAVA结构中的暂存的寄存器堆(Dribbler)。
图10中,美国公布的JAVA堆栈101保存不动,但在发生Method调用时,Method A斜线表示部分A,要调用Method B,JAVA堆栈中的64个物理寄存器已经不够使用,即可把Method B所需的“不够”部分虚线表示部分B的寄存器放入我们提的虚拟寄存器堆中去,而不必放入美国公布的JAVA结构中的暂存的寄存器堆(Dribler)中去。如果又发生Method B调用Method C,则Method C所需的寄存器数也放入虚拟寄存器堆中去,如此类推,可以一起多级嵌套调用JAVA结构中专门设置的暂存的寄存器堆(Dribbler)本身数量不够的情况。
等到多级嵌套调用执行完毕,虚拟寄存器堆中剩下的有用的寄存器可以十分简单地通过虚拟寄存器映象机制映象到物理的JAVA堆栈中去。如果这时只剩下Method A的寄存器有用,则只需一对一地映象到JAVA堆栈中去,如剩下的Method A所需的寄存器数大于JAVA堆栈物理寄存器数,或者剩下需要返回主程序时还需要其他一些更多的寄存器参数,则可以分两次映象到JAVA堆栈中去。
这种方法的优点实际上是提供了一个长度不受限制,而且根据程序执行过程中调用情况不同而长度可变的一个暂存的寄存器堆(Dribbler)。
权利要求
1.设计JAVA处理机结构的方法,包括在JAVA处理机芯片上设置由多个物理寄存器组成的物理寄存器堆栈和高速缓存器,其特征在于在所说的高速缓存器中构造由可变长度的虚拟寄存器组成的虚拟寄存器堆栈,该虚拟堆栈提供长度不受限制的逻辑地址空间;用所说的虚拟寄存器进行方法调用操作,调用完毕再将最后结果映象到所说的物理寄存器堆栈中去;该映象过程是采用快速换名表实现的,该换名表包括虚拟寄存器特征、虚拟寄存器生命计数值和虚拟寄存器号与三个位域以及数十个以上的入口。
2.设计JAVA处理机结构的方法,包括在JAVA处理机芯片上设置由多个物理寄存器组成的物理寄存器堆栈和高速缓存器,其特征在于在所说的速缓缓存器中构造由可变长度的虚拟寄存器组成的虚拟寄存器堆栈,该虚拟堆栈提供长度不受限制的逻辑地址空间;用所说的物理寄存器进行方法调用操作,当该物理寄存器容量不够时,将多余部分暂存于所说的虚拟寄存器堆栈中去,调用完毕则可一次地或分批地映象到所说的物理寄存器堆栈中去;该映象过程是采用快速换名表实现的,该换名表包括虚拟寄存器特征、虚拟寄存器生命计数值和虚拟寄存器号与三个位域以及数十个以上的入口。
全文摘要
本发明属于计算机技术领域,本发明包括在JAVA处理机芯片上设置由多个物理寄存器组成的物理寄存器堆栈和高速缓存器,其特点是在高速缓存器中构造虚拟寄存器堆栈,提供长度不受限制的逻辑地址空间;用虚拟寄存器进行方法调用操作,或作为暂存寄存器堆,再将最后结果映象到所说的物理寄存器堆栈中去。本发明不但可以省去物理暂存寄存器堆栈,而且可在进行大容量的方法调用时消除伪相关性,并节省时间开销和简化逻辑。
文档编号G06F12/08GK1164706SQ9710414
公开日1997年11月12日 申请日期1997年4月25日 优先权日1997年4月25日
发明者李三立 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1