首页> 中国专利> 用于实时Java处理器的字节码高速缓存装置及存取方法

用于实时Java处理器的字节码高速缓存装置及存取方法

摘要

本发明涉及一种用于实时Java处理器的字节码高速缓存装置及存取方法,属于计算机领域。本发明装置包括字节码计数器、高速缓存读地址多路选择器、高速缓存写地址多路选择器、高速缓存读地址寄存器、高速缓存写地址寄存器、高速缓存读地址加法器、高速缓存写地址加法器、字节码可读比较器、字节码可写比较器、主存储器、高速缓存以及字节码寄存器。本发明利用Java字节码不等长、多数字节码少于4个字节的特点,进行一次取4个字节,分多次使用完,从而产生预取时间。本发明装置具有指令自动预取机制,可以减少因取指令带来的CPU停顿;并可以确定未命中发生的字节码位置,使其访问时间可静态预测。在确保程序执行可预测的同时大大提高了Java处理器的性能。

著录项

  • 公开/公告号CN101697117A

    专利类型发明专利

  • 公开/公告日2010-04-21

    原文格式PDF

  • 申请/专利权人 江南大学;

    申请/专利号CN200910035647.7

  • 申请日2009-09-30

  • 分类号G06F9/30(20060101);G06F15/78(20060101);

  • 代理机构无锡盛阳专利商标事务所(普通合伙);

  • 代理人顾吉云

  • 地址 214122 江苏省无锡市滨湖区蠡湖大道1800号

  • 入库时间 2023-12-17 23:40:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-10-12

    专利权的转移 IPC(主分类):G06F9/30 登记生效日:20160922 变更前: 变更后: 申请日:20090930

    专利申请权、专利权的转移

  • 2012-09-05

    授权

    授权

  • 2010-06-02

    实质审查的生效 IPC(主分类):G06F9/30 申请日:20090930

    实质审查的生效

  • 2010-04-21

    公开

    公开

说明书

(一)技术领域

本发明涉及计算机领域中Java处理器的高速缓存机制,具体为一种用于实时Java处理器的字节码(指令)高速缓存装置及其存取方法。

(二)背景技术

为了使存储器的访问速度尽可能与CPU的执行速度相匹配,目前计算机系统一般通过多层次的存储器结构满足访问速度、存储容量和制造成本的多方面需求。通常将访问速度快,但制造成本高的存储器以较小的存储容量设置在离CPU较近的位置,它保存离CPU较远的较大存储器的一个数据子集。根据程序局部性原理,CPU大多数情况会在离它较近的高速存储器中访问到所需数据,只有少数情况才需要访问较远的存储器,并将一批数据复制到高速存储器中。在存储器层次结构设计合理的情况下,其整体访问速度会接近最近一级的访问速度,而存储容量及成本则接近最远一级的。高速缓存(即Cache)处于存储器层次结构中最靠近CPU的位置,对CPU的性能起着至关重要的作用。由于目前CPU设计多采用流水线技术来提高整体性能,为了减少流水线的停顿,通常把Cache分为指令Cache和数据Cache两部分,本发明针对的是指令Cache部分。在Java处理器中,由于硬件直接执行Java字节码,因此指令Cache就是本发明所提到的字节码高速缓存。

现有的指令Cache通常是通过提高命中率、减小命中时间、降低未命中开销等方法提高访存平均性能,由于无法提前判断程序执行过程中访问哪条指令会出现未命中,因此程序最坏执行时间无法提前静态预测。也有通过指令预取提高指令存储器访问性能的,但主要目标也是提高平均性能,而且没有和Java处理器特点相结合。

现有技术中,也有针对实时Java处理器的字节码高速缓存机制。该机制在方法调用、返回时一次性地把将要用到的整个方法装入高速缓存,避免在执行时发生不命中。其优点是执行时间容易静态预测,存在的问题是装入的方法利用率低,方法调用和返回时处理器等待时间很长。

(三)发明内容

针对上述问题,本发明提供一种用于实时Java处理器的字节码高速缓存装置及存取方法,使用该装置和方法可以提高Java处理器的性能。

本发明装置的技术方案是这样的:

其包括字节码计数器、高速缓存读地址多路选择器、高速缓存写地址多路选择器、高速缓存读地址寄存器、高速缓存写地址寄存器、高速缓存读地址加法器、高速缓存写地址加法器、字节码可读比较器、字节码可写比较器、主存储器、高速缓存以及字节码寄存器;

字节码计数器用来保存以字节为寻址单位的待执行的字节码地址,该地址经过地址对齐操作之后送到高速缓存写地址多路选择器;

高速缓存读地址多路选择器及高速缓存写地址多路选择器的输出端分别连接字节码可读比较器的两个输入端,字节码可读比较器的输出端分别连接字节码寄存器以及高速缓存读地址寄存器的使能端;

字节码可读比较器用来判断高速缓存中是否有字节码可用,写地址大于读地址则有字节码可用,通过高速缓存读地址加法器将当前地址加1并在下一个时钟来时打入高速缓存读地址寄存器,同时由控制信号控制选择该地址作为输出;

主存储器的读地址输入连接到高速缓存写地址多路选择器的输出端,其数据输出连接到高速缓存的数据输入端;

高速缓存的读地址输入端连接于高速缓存读地址多路选择器的输出端,其写地址输入端连接于高速缓存写地址多路选择器的输出端,其数据输入端连接于主存储器的数据输出端,其数据输出端连接于字节码寄存器的输入端;

字节码寄存器的输出端连接到Java处理器的后续段;

高速缓存的读地址输入端及写地址输入端分别连接字节码可写比较器的两个输入端,字节码可写比较器的输出端连接高速缓存写地址寄存器的使能端;

字节码可写比较器用来判断高速缓存有无空间存放更多字节码,写地址不等于读地址时表示有空间存放更多字节码,通过高速缓存写地址加法器将当前地址加4并在下一个时钟来时打入高速缓存写地址寄存器,同时由控制信号控制选择该地址作为输出;

在控制流发生改变时,由控制信号分别控制高速缓存读地址多路选择器以及高速缓存写地址多路选择器,选择字节码计数器的地址为输出地址。

其进一步的技术方案为:

所述高速缓存的地址为0~(2m-1),所述主存储器的地址为0~(2n-1);所述高速缓存的读地址输入端连接于高速缓存读地址多路选择器输出端的低m位,所述高速缓存的写地址输入端连接于高速缓存写地址多路选择器输出端的低m位;所述字节码可读比较器的输入分别是n位的高速缓存读地址多路选择器的(n-1)~2位以及n位的高速缓存写地址多路选择器的(n-1)~2位,所述字节码可写比较器的输入分别是高速缓存读地址输入端的(m-1)~2位以及高速缓存写地址输入端的(m-1)~2位;

所述高速缓存为双端口环形存储器;

所述高速缓存的数据输入端的总线宽度为32位,所述高速缓存的数据输出端的宽度为8位。

本发明方法的技术方案如下:

CPU只从高速缓存中读取字节码,并不直接对主存储器进行读取;当高速缓存有空间可用时,在时钟的驱动下,高速缓存自动地把从主存储器读出的字节码以每次4字节为单位写入高速缓存;当字节码可写比较器指出高速缓存无空间存放更多字节码,自动预取就转入等待;当高速缓存中有字节码可用时,CPU对高速缓存进行读取,以取得所需的字节码;当字节码可读比较器指出高速缓存中无字节码可用,Java处理器转入等待。

其进一步的技术方案为:

当控制流发生改变时,未用到的已预取指令作废,高速缓存读地址多路选择器及高速缓存写地址多路选择器选择改变后的字节码计数器值作为新的预取起始地址,所述字节码高速缓存装置从该起始地址开始自动读取主存储器并将数据写入高速缓存,Java处理器则以该地址作为新的字节码读取地址从高速缓存中读取字节码送入字节码寄存器中供后续使用;

所述控制流发生改变包括方法调用、返回,分支,跳转及中断。

本发明的技术效果在于:本发明利用Java字节码不等长、多数字节码少于4个字节的特点,进行一次取4个字节,分多次使用完,从而产生预取时间;本发明对Java字节码中有一些复杂指令需要多个时钟周期执行,可以同时进行大量的预取;通过对方法调用、返回进行改进,尽早获得新的字节码地址从而可以进行正确的预取;利用主存储器初次读取延时较大,接下来读取延时较小的特点,将访存产生的等待集中在基本块的开始,以便于进行静态分析。

本发明装置具有指令自动预取机制,可以减少因取指令带来的CPU停顿;并可以确定未命中发生的字节码位置,使其访问时间可静态预测,在确保程序执行可预测的同时大大提高了Java处理器的性能。

(四)附图说明

图1为本发明装置的内部结构示意图;

图2为本发明中地址对齐操作的示意图;

图3为本发明中基本块的最坏情况统计方法示意图;

图4为本发明中程序的最坏执行时间静态统计方法流程图。

(五)具体实施方式

如图1所示,本发明所提出的装置,包括字节码计数器1、高速缓存读地址多路选择器3、高速缓存写地址多路选择器4、高速缓存读地址寄存器5、高速缓存写地址寄存器6、高速缓存读地址加法器7、高速缓存写地址加法器8、字节码可读比较器9、字节码可写比较器10、主存储器13、高速缓存14以及字节码寄存器15。

其中,字节码计数器1用来保存以字节为寻址单位的待执行的字节码地址,以字节为寻址最小单位,由CPU的译码段根据当前字节码实际长度进行调整。字节码计数器1宽度由主存储器13地址宽度决定。字节码计数器1的地址经过地址对齐操作2之后送到高速缓存写地址多路选择器4。

图2是地址对齐操作示意图,因为是32位对齐,可以简单地将最低2位接地处理。

高速缓存14为双端口环形存储器,高速缓存14的地址为0~(2m-1)。高速缓存14的读地址输入端11连接于高速缓存读地址多路选择器3输出端的低m位,高速缓存14的写地址输入端12连接于高速缓存写地址多路选择器4输出端的低m位。

字节码可读比较器9和字节码可写比较器10的输出结果分别用来控制高速缓存读地址寄存器5和高速缓存写地址寄存器6的使能端。

主存储器13的地址为0~(2n-1),字节码可读比较器9的输入分别是n位的高速缓存读地址多路选择器3的(n-1)~2位以及n位的高速缓存写地址多路选择器4的(n-1)~2位。字节码可读比较器9的输出端分别连接字节码寄存器15以及高速缓存读地址寄存器5的使能端。字节码可读比较器9用来判断高速缓存14中是否有字节码可用。因为直接比较的是主存储器13的地址,当读地址落后于写地址时说明有字节码可读,将读地址顺序往下移动一个字节,通过高速缓存读地址加法器7将当前地址加1并在下一个时钟来时打入高速缓存读地址寄存器5,同时由控制信号19控制选择该地址作为输出。这样就完成了高速缓存读地址多路选择器3的顺序递增,同时也就完成了高速缓存14的读地址输入端11的递增。

字节码可写比较器10的输入分别是高速缓存读地址输入端11的(m-1)~2位以及高速缓存写地址输入端12的(m-1)~2位。字节码可写比较器10的输出端连接高速缓存写地址寄存器6的使能端。字节码可写比较器10用来判断高速缓存14有无空间存放更多字节码。字节码可写比较器10比较的是高速缓存14的地址,因为该高速缓存14是环形缓存,写地址大于或小于读地址都表明有空间可用,可以把写地址顺序往下移动一个字。通过高速缓存写地址加法器8将当前地址加4并在下一个时钟来时打入高速缓存写地址寄存器6,同时由控制信号19控制选择该地址作为输出。这样就完成了高速缓存写地址多路选择器4的顺序递增,同时也就完成了高速缓存写地址输入端12的递增。

主存储器13的读地址输入连接到高速缓存写地址多路选择器4的输出端,因为预取就是以32位为单位读取主存储器13中的字节码并将其写入对应的高速缓存14地址处;主存储器模块的数据输出端口是32位的端口17,端口17同时也是高速缓存14的数据输入端17。

高速缓存14的数据输入端17是32位的数据写端口,其连接于主存储器13的数据输出端。高速缓存14的数据输出端18是8位的数据读端口,其连接于字节码寄存器15的输入端。字节码高速缓存由高速缓存写地址多路选择器4所指定的地址处以32位为单位自动预取字节码并通过数据输入端17写入到写地址输入端12所指定的高速缓存14处;CPU在需要时从读地址输入端11所指定的地址处读取字节码并通过数据输出端18送到字节码寄存器15。

字节码寄存器15用来存储从高速缓存14读出的字节码并通过输出端16提供给Java处理器的后续段使用。该寄存器每个时钟周期能以8位为单位提供字节码,这就给自动预取提供了时间。

字节码计数器1应该在Java处理器的译码或执行阶段进行更新,如果是在基本块内部继续执行,则在译码阶段就能根据当前所译码的字节码字节数判断字节码计数器1的递增值;如果要跳出基本块,即控制流发生了变化,则要在执行阶段才能计算出要跳转的新地址;如果是方法调用、返回等复杂指令,可能还需要更多的时间才能计算出要更新的值。图1中的信号19用来说明当前译码的字节码是否需要改变控制流,该信号由译码部件产生。

在字节码位于基本块内部时,控制流顺序进行,高速缓存读地址多路选择器3以及高速缓存写地址多路选择器4独立改变,由控制信号19控制高速缓存读地址多路选择器3选择地址加1作为其地址输出,信号19控制高速缓存写地址多路选择器4选择地址加4作为其地址输出。读写地址更新独立进行。

在控制流发生改变时(如方法调用、返回,分支,跳转,中断等),由来自译码段的控制信号19分别控制高速缓存读地址多路选择器3以及高速缓存写地址多路选择器4,选择由地址对齐操作2送来的32位对齐的字节码计数器1值作为新的预取起始地址,本发明装置从该起始地址开始自动读取主存储器13并将数据写入高速缓存14,原来被预取进来的字节码被丢弃;同时,高速缓存读地址多路选择器3选择由字节码计数器1送来的字节对齐的字节码计数器值作为新字节码读取地址。

高速缓存通常是用SRAM技术来实现,SRAM每次访问的周期都是一样的,而主存储器通常采用DRAM技术实现,DRAM的特点是访问第一个字与访问后续字的时间不一样。如以DRAM PC-100为例,访问第一个字所需的时间是20ns,而后续每个字所需的时间是10ns。再考虑到嵌入式实时Java处理器的主频一般不是很高,目前的多数实现都不超过100MHz,如果以100MHz计算,则在每个新的基本块预取第一个字时会出现20ns延时,而后续预取都在10ns完成,而处理器的主频也在100MHz,再加上统计资料显示每32位字节码平均需要2.41的周期完成,即处理器会以接近40MHz的平均频率,100MHz的最高频率访问高速缓存,而高速缓存的预取频率可以达到100MHz,所以在基本块内部不会再发生未命中。

本发明方法如下:

CPU只从高速缓存14中读取字节码,并不直接对主存储器13进行读取;当高速缓存14有空间可用时,在时钟的驱动下,高速缓存14自动地把从主存储器13读出的字节码以每次4字节为单位写入高速缓存14;当字节码可写比较器10指出高速缓存14无空间存放更多字节码,自动预取就转入等待;当高速缓存14中有字节码可用时,CPU对高速缓存14进行读取,以取得所需的字节码;当字节码可读比较器9指出高速缓存14中无字节码可用,Java处理器转入等待。

当控制流发生改变时,未用到的已预取指令作废,高速缓存读地址多路选择器3及高速缓存写地址多路选择器4选择改变后的字节码计数器1值作为新的预取起始地址,所述字节码高速缓存装置从该起始地址开始自动读取主存储器13并将数据写入高速缓存14,Java处理器则以该地址作为新的字节码读取地址从高速缓存14中读取字节码送入字节码寄存器15中供后续使用。

如果考虑到Java处理器频率的提高,即使在基本块内部也可能发生未命中的情况,本发明提出的方法还可以方便地计算出基本块内部的最坏情况执行时间,而整个程序的最坏情况执行时间可以通过将基本块以控制流图的方式组织起来,根据最坏情况下的执行路径统计出最坏情况执行时间。

图3是基本块的最坏情况统计方法示意,其中序号20表示字节码,N说明该基本块包含N个字节码。序号21是每个字节码对应的字节数,比如第1个字节码包含2个字节,第3个字节码包含4个字节,第N个字节码包含X(X为1~4的某个数)个字节等等。序号22是每个字节码需要被访问的时间点(第几个时钟周期),它等于该字节码之前的所有字节码执行时间之和。序号23是每个字节码不包含访存延迟在内的执行所耗费时钟周期数。序号24是每个字节码被从存储器预取到高速缓存的时间点(以第几个时钟周期计算)。序号25说明每个字节码访问时是否发生了未命中。

从图3中可知,根据字节码的执行所需时间23,可以计算出每个字节码的被访问的时间,它等于该字节码之前的所有字节码执行时间之和,例如第4个字节码需要被访问的时间是第8个时钟周期,因为它之前的指令执行分别用了2、1、5个时钟周期;而根据字节数21和DRAM的延时指标可以推断出每个字节码被预取到的时间24,如DRAM在访问第一个字时延时为2个周期,之后的字访问延时都是1个周期,而且从DRAM读取字节码的单位是32位,因此,第1、2个字节码预取到的时间都是2,因为它们同属于第1个32位;而第4个字节码预取到的时间是3,因为它属于第2个32位。如果被访问时间22在被预取到时间24之后则该字节码已经被预取到,不会发生未命中情况,反之则会发生未命中。例如,第1个字节码在第0个周期时就需要被访问,但直到第2周期才被取进来,因此发生未命中。而第4条指令被访问时间是8,但早在第3周期就被预取到了,因此不会发生未命中。基本块中最后一条字节码被预取到的时间加之后字节码的执行时间就是该基本块的最坏执行时间。如图中基本块的最坏执行时间:当Y>=M时,最坏执行时间为Y+3;当Y<M时,最坏执行时间为(M-Y)+3。

因为每个程序都是由基本块组成的,如以图4中由基本块B1~B12组成的程序为例,下面说明整个程序的最坏执行时间静态统计方法。括号中标出的是该基本块的最坏执行时间,如B1基本块的最坏执行时间是64。在进行整个程序最坏执行时间静态统计时,以具有较大最坏执行时间的路径取代较小的路径,如B4-B5-B6-B7-B11-B4取代B4-B12。从而得到整个程序的最坏执行时间的最大路径并统计出整个程序的最坏执行时间为:64+3+5+n(3+3+3+5+5)+m(15+36+6+5)+15+36,其中n是B4-B5-B6-B7-B 11-B4路径最坏情况下的执行次数,m是B7-B8-B9-B10-B7路径最坏情况下的执行次数。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号