处理器和处理器的控制方法

文档序号:6517485阅读:187来源:国知局
处理器和处理器的控制方法
【专利摘要】本发明涉及处理器和处理器的控制方法。运算处理器设备包括获取单元,其在重复包括获取指令的获取阶段和执行所述指令的执行阶段的指令处理的所述运算处理设备的获取阶段,从被定义为指令存储源的指令地址获取指令;关联关系存储单元,其记录正在经历指令处理的指令的指令地址的高阶位域和所述指令地址的高阶位域被编码成的高阶地址信息之间的关联关系;编码单元,其基于所述关联关系将包含在所述指令地址中的高阶位域编码成所述高阶地址信息;以及解码单元,其从所述高阶地址信息和所述关联关系解码出所述高阶位域。
【专利说明】处理器和处理器的控制方法【技术领域】
[0001]本发明涉及处理器和处理器的控制方法。
【背景技术】
[0002]信息处理设备的分支预测机构基于过去执行的指令在存储器上的存储地址,来管理分支指令的执行历史。然后,分支预测机构通过管理分支指令的执行历史而在接下来执行该分支指令的情况下预测分支目的地。在下文中将指令在存储器上的存储地址称为指令地址。
[0003]在预测分支目的地时,分支预测机构通过组关联方法,根据过去从存储器上的存储源取得的分支指令的指令地址的一部分的位域,来确定一组存储装置。在下文中将短语“从存储器取得指令”称为“取指”。此外,将“分支指令的指令地址”称为分支源地址。然后,分支预测机构通过将分支源地址的另外一个位域用作标签的方式,将分支目的地地址单向存储在根据指令地址的所述部分的位域而确定的组中。
[0004]然后,分支预测机构在指令取指阶段通过利用指令地址全面搜索存储装置。随后,当过去已经执行的分支指令的分支目的地地址被存储在存储装置中时,分支预测机构可以根据与相关组中的标签的内容一致的方式来获得分支目的地地址。也就是说,分支预测机构可以与取指并行地确定要取得的指令是否是分支指令,即,分支目的地地址是否是以使用分支源的指令地址的域作为标签的方式存储的。
[0005]也就是说,在上述技术中,信息处理设备获取当前正在取得的指令的地址,从而与取指并行地确定要被取得的指令是否是分支指令。然后,如果该指令是分支指令,则信息处理设备可以获取要预测的分支目的地地址。因此,信息处理设备即使在执行流水线(pipeline)处理时,也能够事先与当前的取指并行地准备在下一个阶段从要预测的分支目的地的取指。
[0006]然后,如果从当前正在取得的指令获得的分支目的地是预测的分支目的地,则信息处理设备可以跨各阶段进行并行操作而不停止流水线处理。反之,如果从当前正在取得的指令获得的分支目的地不是预测的分支目的地,则然后信息处理设备从正确的分支目的地重新开始取指。此外,当分支目的地不是以与当前正在取得的分支指令的指令地址相关联的方式存储在存储装置中时,即,当分支预测没有成功,而分支指令被执行时,信息处理设备也不能利用该分支预测。在此情况下,信息处理设备从通过对取得后的分支指令进行解码而获得的分支目的地重新开始取指。
[0007]这样,在信息处理设备中,存储指令的空间迄今已经是32位地址空间。然而,与要处理的数据的数据尺寸的增加相对应,这种信息处理设备存在将虚拟地址空间扩展到64位。在这种信息处理设备中,数据空间和指令空间都采用64位配置。
[0008]然而,实际程序尺寸远小于作为具有32位地址的可管理尺寸的极限给出的4GB。即使在比较大的情况下,程序尺寸也就例如大约几百兆字节(MB)。因此,可以说,使得被限定为推测执行处理单元的分支预测设备对64位地址进行处理是硬件资源的浪费。[0009]例如,将64位配置只应用于指令集架构中限定的必要部分是有效率的。在此情况下,在信息处理设备中,用于根据分支预测推测性地控制取指的控制单元迄今已经通过只将低阶32位地址用到最大可能的程度,控制了与传统取得相同的取指。
[0010]具体的方法是信息处理设备预先固定高阶(high-order) 32位地址,并且通过使用固定的高阶32位和低阶(low-order) 32位的4G字节空间,进行取指。然后,例如,考虑这样的方法,如果分支指令的分支目的地地址超过4G字节空间,则信息处理设备重新定义高阶32位。
[0011]也就是说,信息处理设备通常固定程序计数器的高阶32位。然后,当改变高阶32位的指令出现时,例如,当分支指令、异常等出现时,信息处理设备再次获得高阶32位。注意,当由于中断的出现而导致出现改变程序计数器的高阶32位的事件时,信息处理设备也执行相同的处理。在此情况下,当改变高阶32位的指令或者事件完成时,信息处理设备临时彻底清除包含取指和指令执行的流水线。
[0012]因此,在将程序计数器的高阶32位重写为新值之后,信息处理设备利用重写的新地址,从取指重新开始处理。因此,当存在改变高阶32位的指令或者事件时,信息处理设备不能享有推测性执行的益处。即使不能享用推测性执行的益处,只要程序尺寸小,就不会出现问题。其理由是可以预测改变高阶32位的指令或事件的出现频率不会高到影响信息处理设备的性能的程度。
[0013]然而,有一些实际的OS (操作系统)即使在要被分配的程序尺寸小的情况下也采用64位指令地址的高阶32位来执行控制。即使在要被分配的程序尺寸小的情况下,在安装有采用高阶32位的OS的信息处理设备中,程序散布在64位虚拟存储空间中也不是不可能的。如果这样的话,即使当各个程序的尺寸小时,也可能由于分支指令达到比预期更大的程度而导致出现超过32位的4GB地址的分支。
[0014]然而,该64位地址空间被配置为便于数据空间的64位扩展,因此指令序列实际上被不均衡地分配给地址空间中的地址。因为这个原因,考虑通过利用这种不均衡性,以伪方式由小数量的位表达高阶32位。也就是说,考虑频繁出现的高阶地址的模式,并且由使用该小数量的位的固定代码来表达频繁出现的高阶地址可能就够了。其中,“小数量的位”意味着比高阶地址的位数少的位。如果指令序列被实际上不均匀地分配给地址,则高阶地址的改变频率呈现为低。因此,即使当关于预先固定的多个高阶地址安排用来表达这些高阶地址中的每一个的位数少的固定代码时,仍可以预测伴随高阶地址变化的分支指令的执行计数是小的。因此,信息处理设备可以通过使用表达多个指定的高阶地址的位数少的固定代码进行有效的分支预测。
[0015]引f列表
[0016]专利文献列表
[0017]专利文献1:日本特开平H6-089173号公报
[0018]专利文献2:国际公开第TO2007/099605号
[0019]专利文献3:日本特开昭S63-147243号公报

【发明内容】

[0020]抟术问是页[0021]在传统技术中,信息处理设备用位数少的代码表达频繁出现的高阶地址。信息处理设备是基于指令序列被不均匀地分配给地址这一前提的。因此,如果不满足该前提,则根据该传统技术,难以有效地执行处理。例如,如果由OS分配的程序散布在虚拟的64位存储空间中,则难以用位数少的代码来表达频繁出现的高阶地址。
[0022]本公开的一个实施例致力于通过关于64位地址中的高阶地址,以使用比该高阶地址的位数少的位数的方式表达高阶地址来实现信息处理。
[0023]在这种情况下,本实施例的一个方面由处理器来例示。该处理器包括取指单元、关联关系存储单元、编码单元、解码单元和分支预测单元。在重复指令处理的所述处理器的取指阶段,所述取指单元从被定义为指令存储源的指令地址取得指令,其中所述指令处理包括取得所述指令的取指阶段和执行所述指令的执行阶段。所述关联关系存储单元寄存正在经历指令处理的指令的指令地址的高阶位域和所述指令地址的高阶位域被编码成的高阶地址信息之间的关联关系。所述编码单元基于所述关联关系将包含在所述指令地址中的高阶位域编码成高阶地址信息。所述解码单元基于所述关联信息从所述高阶地址信息解码出所述高阶位域。
【专利附图】

【附图说明】
[0024]图1是示出比较例中的高阶地址表的结构例子的图;
[0025]图2是示出执行分支指令的流程的流程图;
[0026]图3是示出在执行该指令时更新高阶地址表的情况下的问题的流程图;
[0027]图4是示出根据一个工作例子的系统架构的图;
[0028]图5是示出根据一个工作例子的处理器的配置的图;
[0029]图6是描述地址信息的流程的图;
[0030]图7是示出高阶地址表更新操作的流程的流程图;
[0031]图8是示出在SMT方法中没有伴随更新高阶地址表的另一线程无效控制的情况下的问题的流程图;
[0032]图9是示出解决SMT方法中伴随更新高阶地址表的问题的方法的流程图;态的例子的图表;
[0033]图10是H32编码器的配置图;
[0034]图11是H32编码器的配置图;
[0035]图12是高阶地址切换确定单元的配置图。
【具体实施方式】
[0036]下面参照附图描述根据一个实施例的信息处理设备。以下实施例的配置是示例性的,并且本设备不局限于该实施例的配置。
[0037]<比较例>
[0038]下面参照图1至图3描述根据比较例的信息处理设备。根据该比较例的信息处理设备具有例如64位虚拟地址空间。其中,在该64位地址中,高阶32位被称为高阶地址,而低阶32位被称为低阶地址。
[0039]此外,该比较例中的信息处理设备将32位高阶地址编码为比32位少的位数的代码。此外,该比较例中的信息处理设备内部设置有高阶地址表。该高阶地址表是存储由该信息处理设备处理的高阶地址与所述位数少的代码之间的关联关系的表。该高阶地址表具有分别由比32位少的位数的代码标识的(例如,由3位代码标识的)条目。该比较例中的信息处理设备每当处理新的高阶地址时,将该新的高阶地址寄存在该高阶地址表中。其中,“新的高阶地址”意思是未被寄存在高阶地址表中的高阶地址。
[0040]该比较例中的信息处理设备在将高阶地址寄存到高阶地址表时,利用与该高阶地址被寄存到的高阶地址表中的条目相关联的位数少的代码代替32位的高阶地址,来描述高阶地址。也就是说,该比较例中的信息处理设备在运行程序期间动态地将高阶地址寄存在高阶地址表中,从而利用该位数少的代码更新高阶地址的关联关系。例如,当该比较例中的/[目息处理设备在该闻阶地址表中没有空闲空间的状态下进一步寄存未被寄存的闻阶地址时,该信息处理设备将该未被寄存的地址覆写到已经寄存了现有的高阶地址的条目。因此,该比较例中的信息处理设备能够在运行程序期间动态切换要被编码的高阶地址。
[0041]图1示出利用传统的固定代码来对高阶地址进行编码的方法与本比较例中的信息处理设备中利用非固定的代码对高阶地址进行动态编码的方法之间的比较。图1中使用固定代码的编码方法是信息处理设备利用比高阶地址的位数少的位数对被预测为表现出基准频率高的固定高阶地址进行编码。
[0042]在图1的例子中,例如,高阶地址“OX00000000”的区域被例示为64位地址空间中的内核区域和32位用户文本区域。
[0043]此外,例如,高阶地址“0X00000001”的区域被例示为64位地址空间中的64位用
户文本区域,并且该文本区域之后的区域被例示为用户数据区域。从确保每个程序的区域的角度来讲,用户数据区域可能是波动的。
[0044]此外,例如,高阶地址“0XFFFFFFFF”的区域被例示为64位地址空间中的系统数据库区域。
[0045]注意,用户的64位数据区域之后的区域被例示为用户数据库区域。用户数据库区域的起始位置取决于该数据区域的尺寸,并因此在该图中被指示为“0X”。其中,“:”(冒号)的左侧指示高阶地址,而冒号的右侧指示低阶地址。此外,符号“”代表任意的十六进制值。
[0046]传统的固定编码方案涉及将代码“00”、“01”、“11”固定地分配给高阶地址“0X00000000”、“ 0X00000001 ”和“ O X FFFFFFFF ”。因此,例如,在起始位置波动的用户数据
库区域中不能有效进行分支预测。这是因为难以确定固定的代码被分配给哪个高阶地址。
[0047]对于这种情况,该比较例中的信息处理设备进行非固定编码。在图1中的非固定编码方法中,信息处理设备通过高阶地址表来准备与3位代码相关联的7个条目。然后,信息处理设备在运行程序期间识别到没有寄存在该高阶地址表中的高阶地址时,将识别出的高阶地址寄存在高阶地址表中。然后,信息处理设备将与具有被寄存的高阶地址的条目相关联的代码分配给该寄存的高阶地址。
[0048]例如,在图1的例子中,代码“000”被分配给高阶地址“OX00000000”。此外,例
如,代码“ 001 ”被分配给高阶地址“ O X FFFFFFFF”。
[0049]也就是说,在图1中所示的高阶地址表的情况下,信息处理设备使用例如代码“000”代替高阶地址“O X 00000000”。此外,信息处理设备使用代码“001”代替高阶地址“O XFFFFFFFF”。
[0050]因此,关于寄存在高阶地址表中的高阶地址,信息处理设备可以采用3位代码代替使用32位高阶地址。此外,未被寄存在高阶地址表中的高阶地址被批处理地编码为例如代码“100”。
[0051]此外,在所有条目中(例如在图1的情况下,在高阶地址表的七个条目中)都已经寄存了高阶地址之后,信息处理设备当识别到新的高阶地址时,在删除已经寄存的高阶地址的同时寄存这些新的高阶地址,即,用新的高阶地址顺序地覆写这些已经寄存的高阶地址。然后,信息处理设备利用图1中的高阶地址表,以分别与七个代码(即七个3位数据)相关联的方式对七个高阶地址进行编码。按照上述方式,信息处理设备通过在运行程序期间动态地切换要被寄存在高阶地址表中的高阶地址来对高阶地址进行编码,并且通过采用与高阶地址相关联的代码和低阶地址来执行诸如分支预测等处理。
[0052]然而,当在运行程序期间动态地切换与高阶地址相关联的代码时,会出现以下问题。例如,关于分支预测是成功还是不成功的判断是基于计算出的分支目的地地址是否与进行分支预测时给出的地址相符来进行的。在下文中,在该比较例中假定分支目的地地址是低阶地址与高阶地址的代码的结合。
[0053]图2和图3分别是示出执行分支指令的流程的流程图。图2示出从取指到执行指令的执行流程、分支预测单元的分支预测流程和验证分支控制单元的运算结果与分支预测的相符性的流程。
[0054]在图2中的指令执行流程中,信息处理设备从指令高速缓冲存储器中取得指令,并且将取得的指令寄存在指令缓冲器中(SI)。接下来,信息处理设备对寄存在指令缓冲器中的指令进行解码,并且将分支目的地地址计算请求发送到计算单元(S2)。然后,信息处理设备将作为计算单元的计算结果获取的分支目的地地址传送到分支控制单元(S3)。传送到分支控制单元的分支目的地地址是64位地址(高阶地址[63:32] +低阶地址[31:0])。信息处理设备的分支控制单元通过查阅高阶地址表来对高阶地址进行编码,并且产生高阶地址代码H32C0DE [2:0]。然后,信息处理设备将高阶地址代码H32C0DE [2:0]与低阶地址[31:0]相结合(H32C0DE[2:0]+低阶地址[31:0],从而产生分支目的地地址作为计算结果。
[0055]另一方面,在信息处理设备的分支预测流程中,信息处理设备从分支历史获取预测的分支目的地地址(S5)。该预测的分支目的地可以由高阶地址代码和低阶地址的结合来描述,例如H32C0DE[2:0] +低阶地址[31:0]。然后,信息处理设备将从分支历史获取的预测的分支目的地地址传送到分支控制单元(S6)。
[0056]信息处理设备的分支控制单元对从指令执行流程获取的作为计算结果的分支目的地地址与从分支预测流程获取的预测的分支目的地地址进行比较(S7)。随后,如果作为计算结果的分支目的地地址与预测的分支目的地地址相符,则信息处理设备确定分支预测成功。然后,信息处理设备按照原样继续对正在经历推测执行的后续指令的处理(S8)。
[0057]反之,如果在S7中确定作为计算结果的分支目的地地址与预测的分支目的地地址不符,则信息处理设备确定分支预测不成功。随后,信息处理设备取消对正在经历推测执行的后续指令的处理(S9)。然后,信息处理设备基于正确的分支目的地地址(即,作为计算结果给出的分支目的地地址)从取指开始执行处理(SA)。在分支预测失败的情况下,从正确的分支目的地地址的取指也被称为“重新取指”。[0058]图3是示出从图2中的分支预测阶段到计算分支目的地阶段的时间段期间更新高阶地址的代码的情况下的结果的流程图。图3中所示的处理与图2中的相同。然而,在图3中,在处理流程内绘出单点虚线LA,这意味着高阶地址表的内容在单点虚线LA前后被更新。
[0059]例如,当信息处理设备基于流水线处理来处理某一分支指令时,假定在分支预测阶段代码“000”被寄存在高阶地址表中作为高阶地址代码“OXaaaaaaaa”。进一步假定高阶地址代码在从分支预测阶段到分支目的地计算阶段的时间段期间被更新。例如,假定代码“ 000 ”被寄存在高阶地址表中作为高阶地址代码“ O X nnnnnnnn ”。
[0060]如果上述假定成立,则当进行分支预测时,分支预测地址的高阶地址“OXaaaaaaaa”被编码为代码“000”。此外,如果作为分支目的地的计算结果给出的高阶地址是“ O X nnnnnnnn ”,则高阶地址被编码为“ OOO ”。
[0061]因此,即使当高阶地址代码相同时,对于进行分支预测时的地址与作为分支目的地的计算结果给出的地址来说,高阶地址也不同。也就是说,如果基于高阶地址进行确定,则分支预测由于分支目的地地址不符而不成功。因此,结果是信息处理设备在不使用高阶地址代码的处理中,取消正在经历用于分支预测的推测执行的指令,并且基于计算出的分支目的地地址重新开始取指。
[0062]然而,在图3中所示的处理的情况下,分支预测地址的高阶地址代码和作为分支目的地的计算结果给出的地址的高阶地址代码二者都是“000”。因此,信息处理设备不能检测到分支目的地地址的不符。因此,如果高阶地址的代码被更新,并且如果高阶地址在进行分支预测时被擦除,则信息处理设备无法对最初已经被编码的原始高阶地址进行解码。因此,信息处理设备难以检测到高阶地址的不符。
[0063]如果无法检测到高阶地址的不符,则信息处理设备无法确定分支预测失败。结果,在信息处理设备中,处理照常进行而不取消本该被取消的推测执行的指令(SB)。因此,结果是执行与符合由信息处理设备执行的程序处理的指令不同的指令,并且存在例如寄存器和存储器的值毁坏的可能性。
[0064]此外,在将该比较例中的处理应用于多线程处理器的情况下,会出现以下问题。其中,多线程处理器是指被配置为通过在单个处理器内复用多个寄存器而使计算装置等的资源能够在多个程序之间共享的处理器。当程序并行地运行在多线程处理器上时,频繁出现的高阶地址的位模式被预测为彼此类似。因此,如果高阶地址的模式可以在线程之间共享,则认为可以实现更有效的分支预测。
[0065]当考虑高阶地址代码在线程之间共享并且动态地在多线程处理器上切换时,还认为其切换定时对于每个线程是独立的。结果,认为比单线程更难以检测到高阶地址的不符。
[0066][例子]
[0067]在本实施例中,信息处理设备包括编码单元和解码单元。编码单元在高阶地址表中具有高阶地址与代码之间的关联关系,并且基于高阶地址表将高阶地址编码为具有位数少的代码。在本实施例中,下文中基于高阶地址表将高阶地址编码成的代码也被称为高阶地址信息。解码单元基于同一表将位数少的高阶地址信息解码回到高阶地址。
[0068]该信息处理设备还包括分支预测单元、取指控制单元和分支控制单元。分支预测单元寄存一组位数少的高阶地址信息和低阶地址作为地址。取指控制单元通过将从分支预测单元获得的高阶地址信息被解码单元解码成的高阶地址与从分支预测单元获得的低阶地址相结合来产生指令地址。然后,取指控制单元基于该指令地址进行取指。分支控制单元从取得的指令代码解码出分支指令,然后计算分支目的地地址并且验证计算出的分支目的地地址与进行分支预测时给出的分支目的地地址之间的相符性。随后,分支控制单元确定分支预测是成功还是不成功。
[0069]在本实施例中,信息处理设备更新寄存有高阶地址的高阶地址表,并且在运行程序期间动态地切换要被编码的高阶地址与所述代码(即,高阶地址信息)之间的关联关系。如比较例中说明的,当高阶地址在执行分支指令期间被更新时,难以检测到进行分支预测时给出的高阶地址与计算分支目的地地址时给出的高阶地址之间的不符。因此,该信息处理设备限制高阶地址地址表的更新定时,即,切换要被编码的高阶地址与所述代码之间的关联关系的定时。也就是说,根据本实施例的信息处理设备通过限制高阶地址表的更新定时来确保高阶地址与进行分支预测和计算分支目的地地址时该高阶地址被编码成的代码之间的相符性。
[0070]<确保高阶地址与代码之间关联关系的检查>
[0071]在本实施例中,首先检查分支目的地的高阶地址被禁止解码的情况。为了关于分支目的地的高阶地址进行该检查,在此假定信息处理设备执行分支指令的情况。
[0072]例如,当分支目的地的高阶地址被寄存在高阶地址表中时,信息处理设备可以通过查阅高阶地址表从所述代码计算出分支目的地的高阶地址。此外,如果高阶地址没有改变的地址指示分支目的地,则信息处理设备可以通过查阅指示正在执行的指令的地址的程序计数器来计算高阶地址。
[0073]因此,无法计算分支目的地的高阶地址的情况是分支目的地的高阶地址是未被寄存在高阶地址表中的高阶地址并且不同于正在执行的指令的地址的情况。
[0074]在本实施例中,信息处理设备将与分配给被寄存的高阶地址的代码不同的代码(例如,“X”)分配给未被寄存在高阶地址表中的高阶地址。然后,如果计算分支目的地地址时给出的高阶地址信息的代码是“X”并且分支目的地的高阶地址不同于由程序计数器指示的地址,则信息处理设备确定分支目的地地址不符。也就是说,当分支目的地的高阶地址未被寄存在高阶地址表中并且由计算单元计算出的分支目的地的高阶地址与分支源的指令地址的高阶地址(程序计数器值)不符(出现超过4GB的分支)时,信息处理设备确定分支目的地地址与预测的分支目的地地址不符。
[0075]然后,信息处理设备进行控制,以取消该指令的推测执行,并且利用由计算单元计算出的分支目的地地址来更新程序计数器。当更新了程序计数器时,信息处理设备能够从更新后的程序计数器的值计算出高阶地址。随后,信息处理设备从更新后的程序计数器产生高阶地址,并且可以基于包含所产生的高阶地址的正确地址重新开始取指。
[0076]此外,在本实施例中,在能够确保进行分支预测时和计算分支目的地地址时与所述代码相关联的高阶地址相符的定时更新高阶地址表。在这种情况下,在本实施例中,信息处理设备利用由于分支预测失败而取消指令的推测执行这一时机。指令的推测执行的取消是通过取消目前存在的所有指令执行,从被定义为流水线的第一阶段的取指重新进行处理的过程。然后,信息处理设备在由于分支预测失败而取消指令的推测执行的定时更新高阶地址表。[0077]例如,当如上所述分支目的地的高阶地址未被寄存在高阶地址表中的时候完成了分支指令的执行时,信息处理设备取消执行的推测执行。在取消指令的推测执行时,信息处理设备将刚完成其执行的指令的分支目的地的高阶地址寄存在高阶地址表中,从而更新高阶地址表。在取消指令的推测执行之后,处理从分支目的地地址的执行取得重新开始,并且因此信息处理设备可以在执行后续指令的时候确保进行分支预测时和计算分支目的地地址时要被编码的高阶地址与所述代码之间的关联关系一致。注意,除了分支目的地的高阶地址未被寄存在高阶地址表中的情况以外,例如,在低阶地址不符的情况下,即,正常的分支预测未成功,在检测到异常的情况下以及在发生中断的情况下,指令的推测执行也都被取消。
[0078]在利用单线程进行指令处理的情况下,在上述定时更新高阶地址表的控制下在运行程序期间动态更新高阶地址表时,信息处理设备也可以确保要被编码的高阶地址与所述代码之间的关联关系。然而,在处理器采用多线程方法,特别是同步多线程(SMT)方法并且具有在线程之间共享要被编码的高阶地址的模式的配置的情况下,该处理变得复杂。同步多线程是指单个CPU (中央处理单元)并行地同步执行多个线程的技术、处理等。
[0079]根据SMT方法,取消指令的推测执行的定时可以没有任何依赖性地出现在每个线程。因此,在如上所述取消某一线程“a”的推测执行的定时执行要被编码的高阶地址与所述代码之间的关联关系的切换时,存在切换所述关联关系的定时出现在正在执行另一线程“b”期间的可能性。在此情况下,信息处理设备不能确保进行另一线程“b”的分支预测时和计算分支目的地地址时编码模式相符。
[0080]在此情况下,在本实施例中,信息处理设备在操作多个线程时确保利用某一线程更新高阶地址表时另一线程的操作。假定在通过某一线程“a”的分支指令来更新高阶地址表时另一线程正在经历指令的执行。在此情况下,信息处理设备将高阶地址编码为“X”,而不管关于另一线程“b”的分支指令的分支目的地的高阶地址是否被寄存在高阶地址表中。其中,符号“X”代表与未被寄存在高阶地址表中的高阶地址相关联的代码。
[0081]当高阶地址信息的代码是“X”时,并且如果分支目的地的高阶地址改变,则信息处理设备确定进行分支预测时给出的分支目的地地址与在上述控制下计算分支目的地地址时给出的分支目的地地址不符。因此,信息处理设备检测到线程“b”中分支目的地地址的不符。当检测到分支目的地地址不符时,线程“b”的推测执行被取消,并且重新开始取指。因此,在线程“b”中也取消指令的推测执行时以及此后,可以确保进行分支预测时和计算分支目的地地址时要被编码的高阶地址与所述代码之间的关联关系相符。当在线程“b”中重新开始取指时,信息处理设备基于利用线程“a”来更新的高阶地址表进行分支预测。因此,信息处理设备能够在运行程序期间以在线程之间共享高阶地址和所述代码之间的动态关联关系的方式进行有效的分支预测。
[0082]因此,本实施例中的信息处理设备通在运行程序期间动态切换要被编码的高阶地址与所述代码之间的关联关系来避免出现问题。信息处理设备使64位地址空间中频繁出现的高阶32位地址能够由少数量的位来表达,并且进一步能够在运行程序期间切换转换到所述少数量位的方法。因此,信息处理设备能够基于少量的硬件资源来实现有效的分支预测。
[0083]<硬件配置>[0084]图4示出根据一个工作例子的信息处理设备的系统架构。图4描述了包括本工作例子应用于的处理器的服务器等的系统。图4中所示的信息处理设备包括多个处理器(CPU) 1-1和1-2、存储器3-1和3-2以及执行与外部装置的输入/输出控制的互联控制单元5。其中,处理器1-1、1_2等一般简称为处理器I。顺便提及,这不意味着图4的信息处理设备中处理器的数目局限于“ I”。
[0085]图5示出了处理器I的配置。此外,图6示出用于取指的地址信息的流程。在该工作例子中,采用无序执行和具有流水线功能的通用处理器。注意,如程序中编写的顺序执行被称为有序执行。另一方面,无序执行被定义为这样的技术,以处理器在不同于写到程序中的执行过程的执行过程中(例如,在执行过程被写到程序之前)执行可执行指令的方式来扩展同步执行多个指令的可能性。
[0086]图5示出“取指”阶段、“指令发送”阶段、“指令执行”阶段和“指令完成”阶段。图5描述各阶段和在各阶段操作的部件之间的关系。例如,在指令取指阶段,取指控制单元
11、指令缓冲器12、分支预测单元20、(初级)指令高速缓冲存储器24和次级高速缓冲存储器25进行操作。
[0087]取指控制单元11获取从分支预测单元20取得的指令的预测分支目的地地址。此夕卜,取指控制单元11从分支控制单元22获取通过分支计算建立的分支目的地地址。此外,取指控制单元11从程序计数器控制单元19获取被定义为接下来完成的指令地址的程序计数器值。取指控制单元11是取指单元的一个例子。
[0088]此外,如果在取指控制单元11内没有分支,则取指控制单元11产生用于连续取得指令的下一个地址。取指控制单元11通过从如上所述获取的预测分支目的地地址、程序计数器值和由此产生的下一个地址中进行选择来建立下一个取指地址。
[0089]取指控制单元11将所建立的取指地址输出到指令高速缓冲存储器24,并且从由此输出的执行取得地址中取得指令代码。指令高速缓冲存储器24是用于存储次级高速缓冲存储器25的数据的一部分的初级高速缓冲存储器。此外,次级高速缓冲存储器25存储例如存储器3-1 (见图4)等的数据的一部分。如果在被定义为初级高速缓冲存储器的指令高速缓冲存储器24中不存在相关地址的数据,则从次级高速缓冲存储器25的指令高速缓冲存储器24中获取该数据。此外,如果在次级高速缓冲存储器25中也不存在该相关数据,则从存储器3-1等将该数据获取到次级高速缓冲存储器25中。
[0090]在该工作例子中,存储器3-1等布置在处理器I外部。因此,通过存储器控制器26来进行外部存储器3-1等和处理器I之间的I/O控制。从指令高速缓冲存储器24、次级高速缓冲存储器25、存储器3-1等的相关地址取得的指令代码被存储在指令缓冲器12中。
[0091]分支预测单元20与取指并行地执行分支预测。分支预测单元20接收从取指控制单元11输出的取指地址。然后,分支预测单元20基于接收到的取指地址进行分支预测,并且将指示该分支是否被建立的分支方向和分支目的地地址发送回到取指控制单元11。如果预测的分支方向没有被建立,则取指控制单元11选择被预测为下一个取指地址的分支目的地地址。之后,利用预测的分支目的地地址进行指令的推测执行。
[0092]在图5的指令发送阶段,指令解码器13和指令发送控制单元14进行操作。指令解码器13从指令缓冲器12接收指令代码,并且分析指令的类型和必要的执行资源。然后,指令解码器13将分析结果输出到指令发送控制单元14、分支控制单元22和指令完成控制单元18。
[0093]指令发送控制单元14具有保留站的结构。例如,该保留站针对该指令查看所查阅的寄存器的依存性,并由此根据具有该依存性的寄存器的更新状态并根据涉及使用同一执行资源的指令的执行状态,来确定执行资源是否能够执行该指令。然后,保留站将执行该指令所需的多项信息(例如,寄存器编号和操作数地址)输出到能够执行该指令的每个执行资源。此外,指令发送控制单元14起到存储该指令直到达到能够执行的状态为止的缓冲器的作用。指令地址缓冲器21存储从取指控制单元11输出的取指地址。
[0094]在指令执行阶段,诸如计算单元15、(初级)操作数高速缓冲存储器16和分支控制单元22等的执行资源进行操作。计算单元15根据程序被执行,从寄存器17和操作数高速缓冲存储器16接收数据,并且执行与指令对应的运算操作,诸如四则运算操作、逻辑操作、三角函数操作和地址计算。然后,计算单元15将运算结果输出到寄存器17和操作数高速缓冲存储器16。操作数高速缓冲存储器16与指令高速缓冲存储器24类似地存储次级高速缓冲存储器25的数据的一部分。操作数高速缓冲存储器16根据加载指令来将数据从存储器3-1等加载到计算单元15和寄存器17中。此外,操作数高速缓冲存储器16根据存储指令来将数据从计算单元15和寄存器17存储在存储器3-1等中。执行资源中的每一个将指令执行完成通知(COMPLETE)输出到指令完成控制单元18。
[0095]分支控制单元22具有保留站的结构。注意,分支控制单元22内的保留站被称为分支保留站22A (见图6)。分支控制单元22 (分支保留站22A)接收来自指令解码器13的分支指令的类型、来自指令地址缓冲器21的与指令解码器13同步的分支指令地址、以及来自计算单元15的成为分支条件的分支目的地地址和运算结果的信号等。然后,分支保留站22A基于每个分支指令存储每个信号。如果所获取的运算结果满足分支条件,则分支控制单元22确定分支被建立,而如果所获取的运算结果不满足分支条件,则确定分支未被建立,从而确立分支方向。此外,在分支控制单元22中,分支保留站22A确定分支地址是否与运算结果中和进行分支预测时给出的预测的分支目的地中的分支方向相符。此外,分支控制单元22还控制分支指令的序列关系。
[0096]分支保留站22A将进行分支预测时给出的分支方向和分支目的地地址寄存在条目中。然后,分支保留站22A在验证了运算结果与预测的相符性之后,基于运算结果替换该条目。如果运算结果与预测相符,则分支保留站22A将分支指令“COMPLETE”输出到指令完成控制单元18。反之,如果运算结果与预测不符,则分支保留站22A将分支指令“COMPLETE”与后续指令的取消请求(由于本工作例子中的其他因素,下文中将该取消请求称为推测性执行指令取消请求)和重新取指请求一起输出到指令完成控制单元18。这是因为运算结果与预测不符意味着分支预测失败。此外,如果分支的建立被确定,则分支保留站22A将运算结果的分支目的地地址从输出分支指令“COMPLETE”的分支保留站22A的条目输出到程序计数器控制单元19。
[0097]在指令完成阶段,指令完成控制单元18、寄存器17、程序计数器控制单元19和分支历史更新单元23进行操作。指令完成控制单元18将从指令解码器13接收到的指令的类型依次存储在提交堆栈条目中。指令完成控制单元18基于从每个指令执行资源接收到的COMPLETE (完成)信号,以存储在提交堆栈条目中的指令代码的顺序执行执行指令完成(提交)处理。例如,指令完成控制单元18将寄存器更新指示输出到寄存器17,将程序计数器的更新指示输出到程序计数器控制单元19。
[0098]寄存器17在从指令完成控制单元18接收到寄存器更新指示时,基于从计算单元15和操作数高速缓冲存储器16接收到的运算结果的数据来执行寄存器数据的更新。
[0099]程序计数器控制单元19从指令完成控制单元18接收指令的COMMIT (提交)信号和提交的指令的类型,并且还从分支控制单元22接收分支目的地地址。程序计数器控制单元19在从指令完成控制单元18接收到分支指令的COMMIT信号时,将从分支控制单元22接收到的分支目的地地址设置在程序计数器中。此外,程序计数器控制单元19在接收到指令的COMMIT信号而不是分支指令时,加上与所提交的指令计数相对应的程序计数器值。更新后的程序计数器值代表接下来被提交的指令的地址。
[0100]分支历史更新单元23基于从分支控制单元22接收到的分支运算操作的结果来产生分支预测单元20的历史更新数据,并且将所产生的历史更新数据输出到分支预测单元20,从而更新分支预测单元20的历史。
[0101]在该工作例子中,如图6中所示,指令地址是64位地址。此外,在该工作例子中,处理器I将64位的指令地址中的高阶32位编码成3位信号(下文中将其称为“H32C0DE”)。然而,这不意味着高阶32位被编码成的H32C0DE的位数局限于3位。在图6中,H32C0DE和32位的低阶地址的2元组被指示为例如[2:0] [31:0]。此外,未被编码的64位地址由[63:0]来指示。因此,例如,H32C0DE和32位的低阶地址的2元组,即,[2:0] [31:0],被存储在分支预测单元20的分支历史中。
[0102]然后,处理器I通过指令执行流水线来传播指令地址的高阶32位被编码成的H32C0DE与低阶32位的组合。其中,指令执行流水线包括例如取指控制单元11、指令地址缓冲器21、分支保留站22A、程序计数器19A、分支历史更新单元23和分支预测单元20等。然后,处理器I在使用指令地址的高阶32位的部件中通过解码所传播的H32C0DE来执行向高阶地址的转换。
[0103]在该工作例子中,H32C0DE的编码器(下文中称为H32编码器7)和H32C0DE的解码器(下文中称为H32解码器8)通过查阅共同的高阶地址表来执行H32C0DE转换。该高阶地址表是指存储H32C0DE和高阶地址之间的关联关系的表,其中每个条目包含H32C0DE和32位地址。其中,处理器I可以采用这样的配置(配置例子1),其中使用一个表作为在所有H32解码器8和H32编码器7之间共享的高阶地址表。此外,处理器I可以采用这样的配置(配置例子2),其中H32解码器8和H32编码器7中的每一个具有小规模的表,并且所有表的更新定时被同步。在该工作例子中,处理器I采用配置例子2。
[0104]此外,当处理器I采用SMT方法时,还考虑这样的配置,其中通过基于每个线程向高阶地址表提供各个表进行控制。然而,在该工作例子中,利用具有小的封装面积的有效配置在线程之间共享高阶地址表。
[0105]图10示出H32编码器7的配置。H32编码器7利用输入的高阶地址来比较H32编码器7内的高阶地址表71中寄存的每个条目的32位地址与输入的高阶地址。然后,H32编码器7输出被寄存在相符的条目中的代码(H32C0DE)作为编码结果。H32编码器7是编码单元的一个例子。此外,高阶地址表71是关联关系存储单元的一个例子。
[0106]在图10的例子中,H32编码器7包括高阶地址表71和选择电路,选择电路连接高阶地址表71的各条目并且选择并输出被寄存在高阶地址表71中的代码(H32C0DE)。选择电路包括例如比较器72和2输入“与”门73。比较器72比较高阶地址表71的相关条目中寄存的高阶地址与输入到H32编码器7的高阶地址。作为比较结果,如果高阶地址表71的相关条目中寄存的高阶地址与输入到H32编码器7的高阶地址相符,则比较器将真(true)(接通,“I”)信号发送到2输入“与”门73的一个输入端子。因此,比较器72使用高阶地址表71的相关条目中寄存的高阶地址作为基准信号。
[0107]通过比较器72与高阶地址比较的、高阶地址表71的相关条目中寄存的代码(H32C0DE)的值(位模式)被输入到2输入“与”门73的另一个输入端子。如上所述,所述代码(H32C0DE)是用于利用少的位数(即,本例子中的3位)对32位高阶地址进行编码的代码。因此,从比较器72接收真(ON)信号输入的“与”门73输出从所述另一个输入端子输入的、高阶地址表71的相关条目中寄存的代码(H32C0DE)。此外,从比较器72接收到假(false)(断开)信号输入的“与”门被切断。因此,“与”门73不输出从所述另一个输入端子输入的、高阶地址表71的相关条目中寄存的代码(H32C0DE)。也就是说,图10概念性示出“与”门73,然而,更具体来说,选择电路包括由比较器72接通/断开的开关可能就够了。
[0108]另一方面,当比较器72的所有比较结果都是假(断开,“O”)时,多输入“与”门74输出代码(H32C0DE) “100”。代码(H32C0DE) “ 100”被定义为指示被输入到H32编码器7的高阶地址未被寄存在高阶地址表71中的信号。此外,多输入“或”门75将所述多个“与”门73和多输入“与”门74中的任一个输出到选择器76。
[0109]选择器76根据高阶地址无效信号是接通还是断开来切换要被选择的信号。其中,高阶地址无效信号是由图6和图12中的高阶地址切换确定单元产生的信号。高阶地址无效信号是用于当处理器I采用SMT方法时避免受另一线程中更新高阶地址表71所施加的影响的信号。
[0110]在图10中,当高阶地址无效信号是断开时,选择器76选择并输出“或”门75的输出。在此情况下,基于由选择电路做出的选择结果来输出高阶地址表中寄存的代码(H32C0DE)或者代码“100”。反之,当高阶地址无效信号是接通时,选择器76输出代码“ 100”而不依赖于选择电路的处理结果。
[0111]例如,在图10的情况下,寄存有与输入数据“OXaaaaaaaa”相符的地址的条目的代码(H32C0DE)是“000”,因此H32编码器7输出“000”。此外,如果没有与输入的高阶地址相符的条目,或者如果高阶地址无效信号是“1”,则H32编码器7输出指示比较结果不符的特定代码“ 100”作为编码结果。
[0112]图11示出H32解码器8的配置。H32解码器8利用输入的代码(H32C0DE)来比较H32解码器8内的高阶地址表中寄存的每个条目与输入的代码(H32C0DE),并且输出相符的条目中寄存的32位高阶地址作为解码结果。
[0113]在图11的例子中,H32解码器8包括高阶地址表81和连接到高阶地址表81的各条目的选择电路,并且选择并输出高阶地址表81中寄存的高阶地址。H32解码器8是解码单元的一个例子。此外,高阶地址表81是关联关系存储单元的一个例子。
[0114]选择电路包括例如比较器82和2输入“与”门83。比较器82比较高阶地址表81的相关条目中寄存的代码(H32C0DE)与输入到H32解码器8的代码(H32C0DE)。作为比较结果,如果高阶地址表81的相关条目中寄存的代码(H32C0DE)与输入到H32解码器8的代码(H32C0DE)相符,则比较器82将真(接通,“I”)信号发送到2输入“与”门83的一个输入终端。因此,比较器82通过基准信号来使用高阶地址表81的相关条目中寄存的代码(H32C0DE)。
[0115]由比较器82比较的、高阶地址表81的相关条目中寄存的高阶地址的值(位模式)被输入到2输入“与”门83的另一个输入端子。因此,从比较器82接收到真(接通)信号输入的“与”门83输出从所述另一个输入端子输入的、高阶地址表81的相关条目中寄存的高阶地址。也就是说,该代码(H32C0DE)被解码,并由此转换为高阶地址。此外,从比较器82接收到假(断开,“O”)输入的“与”门83被切断。在此情况下,“与”门83不输出从所述另一个输入端子输入的、高阶地址表81的相关条目中寄存的高阶地址。因此,与图10类似,图11也概念性示出“与”门83,然而,更具体地说,选择电路包括由比较器82接通/断开的开关可能就够了。
[0116]反之,当比较器82的所有比较结果都是假(断开)时,多输入“与”门84输出程序计数器值的高阶32位。此外,多输入“或”门85将所述多个“与”门83和所输入“与”门84的输出中的任一个输出到选择器86。
[0117]选择器86根据高阶地址无效信号是接通还是断开来切换要被选择的信号。也就是说,如果高阶地址无效信号是断开,则选择器86选择并输出“或”门85的输出。在此情况下,基于选择电路做出的选择结果来输出高阶地址表中寄存的高阶地址或者程序计数器值的高阶32位。反之,如果高阶地址无效信号是接通,则选择器86输出程序计数器值的高阶32位而不依赖于选择电路的处理结果。
[0118]例如,在图1的情况下,寄存有与输入数据“000”相符的代码(H32C0DE)的条目的32位地址是“OXaaaaaaaa”,因此H32解码器8输出“OXaaaaaaaa”作为关于代码(H32C0DE) “000”的解码结果。此外,如果没有与输入的代码(H32C0DE)相符的条目,或者如果高阶地址转换无效信号是“ I ”,则H32解码器8认为比较结果不符,并且输出被定义为正在执行的处理中的指令地址的程序计数器19A的高阶地址,作为解码结果。
[0119]在图6中,代码8-1、8_2被用于区分所述多个H32解码器8。代码7_1、7_2被用于区分所述多个H32编码器7。例如,具有H32解码器8_1的取指控制单元11从接收自分支预测单元20、分支控制单元22和程序计数器控制单元19的代码H32C0DE和如上所述的用于最后一次取指的代码H32C0DE中选择用于接下来的取指的代码H32C0DE,并且H32解码器8-1将其转换为高阶地址。取指控制单元11利用作为取得地址的高阶地址的转换后地址来执行取指。如果在高阶地址表81中不存在与H32C0DE相符的条目,则H32解码器8_1输出指示此时正在执行的指令地址的程序计数器的高阶位。因此,取指控制单元11通过将程序计数器的高阶位设置为取指地址的高阶地址来执行取指。因此,如果在高阶地址表81中不存在与H32C0DE相符的条目,则存在取指地址是错误的可能性。然而,通过使用正在执行的指令地址的高阶地址作为取指地址,可以避免高速缓冲存储器被填充。这是因为在程序的执行中在指定的地址附近进行迭代处理的情况是存在的。注意,H32解码器8-1不能在取指控制单元11中将H32C0DE转换为高阶地址的情况暗示分支预测单元20中存处的分支历史中的H32C0DE要在进行分支预测的时间点被更新的情况的假定。分支预测单元20中存储的分支历史中的代码H32C0DE在进行分支预测的时间点被更新,在此情况下,分支预测成功的可能性降低,然而,信息处理设备可以识别出分支预测未成功。
[0120]此外,如图6中所示,分支控制单元22包括H32编码器7_1,H32编码器7_1将从计算单元15获得的分支地址计算结果的高阶地址转换为代码H32C0DE。分支控制单元22将转换后的H32C0DE作为分支目的地地址寄存在分支保留站22k中。此外,分支控制单元22通过确定进行分支预测时给出的分支目的地地址是否正确来验证与计算结果的相符性。通过比较H32编码器7-1将关于分支目的地地址的高阶地址的检查结果转换成的代码H32C0DE与进行分支预测时给出的代码H32C0DE来检查分支目的地地址。此外,分支控制单元22包括确定分支目的地的高阶地址是否改变的高阶地址切换控制单元22B。
[0121]图12示出高阶地址切换控制单元22B的配置。高阶地址切换控制单元22B是切换确定单元的一个例子。高阶地址切换控制单元22B包括分支目的地高阶地址缓冲器22B6和高阶地址转换无效信号保持电路22B4,分支目的地高阶地址缓冲器22B6保持“提交”前分支目的地地址的高阶地址、高阶地址表更新指示信号产生逻辑、由于高阶地址不符而引起的推测执行指令取消请求产生逻辑。
[0122]分支目的地高阶地址缓冲器22B6保持例如由计算单元15计算出的分支目的地地址的高阶32位。分支目的地高阶地址缓冲器22B6保持用于更新高阶地址表81、71等的高阶地址。将更新高阶地址表81、71的情况假设为这样的情况,分支目的地的高阶地址从分支源的高阶地址改变并且将是没有被寄存在高阶地址表81、71中的新的高阶地址。在此情况下,将由计算单元15计算该新的高阶地址。
[0123]如果高阶地址表更新指示信号产生逻辑输出“真”(导通,“1”),则通过与代码H32C0DE相关联的方式,将分支目的地高阶地址缓冲器22B6所保持的分支目的地地址的高阶32位寄存在H32解码器8的高阶地址表81中和H32编码器7的高阶地址表71中。然而,图12示出在H32解码器8的高阶地址表81中的寄存路径。
[0124]将参照例如图12描述高阶地址切换确定单元22B的高阶地址表更新指示信号产生逻辑。高阶地址表切换确定单元22B包括保持此时的程序计数器值的高阶位的程序计数器缓冲器(下文中简称为PCU缓冲器22B7)、保持与分支源地址的高阶32位相关联的代码H32C0DE的分支源地址代码缓冲器(下文中简称为分支源代码缓冲器22B8)以及保持与分支目的地地址的高阶32位相关联的代码H32C0DE的分支目的地地址代码缓冲器(下文中简称为分支目的地代码缓冲器22B9)。其中“分支源地址”是指程序计数器值。此外,“分支目的地地址”是指例如由计算单元15计算出的分支目的地地址。
[0125]注意,在图12中,在分支目的地高阶地址缓冲器22B6、P⑶缓冲器22B7、分支源代码缓冲器22B8和分支目的地代码缓冲器22B9的每一个中都示出线程编号(thO)。此外,在高阶地址转换无效信号和由于其他因素而引起的推测执行指令取消请求中也都示出线程编号(thO)。线程编号(thO)指示所关注的线程。
[0126]另一方面,在图12中还示出高阶地址更新指示信号(thl)。高阶地址更新指示信号(thl)是指来自另一线程的信号。也就是说,在图12中,复用各个寄存器,以与基于SMT方法的处理器I兼容。因此,如果不采用SMT方法,则高阶地址切换确定单元22B可以不复用具有线程编号(thO)的分支目的地高阶地址缓冲器22B6、P⑶缓冲器22B7、分支源代码缓冲器22B8和分支目的地代码缓冲器22B9。此外,如果不采用SMT方法,高阶地址切换确定单元22B可以不被设置有高阶地址转换无效信号保持电路22B4。
[0127]高阶地址切换确定单元22B从程序计数器19A获取此时的程序计数器值的高阶32位并且将所获取的高阶32位保持在P⑶缓冲器22B7中可能就够了。此外,高阶地址切换确定单元22B从程序计数器19A的H32编码器7_2获取分支源的代码H32C0DE,并且还获取由计算单元15计算出的、由编码器7-1编码的分支目的地地址的代码H32C0DE。高阶地址切换确定单元22B将分支源的代码H32C0DE和分支目的地的代码H32C0DE分别保持在分支源代码缓冲器22B8和分支目的地代码缓冲器22B9中可能就够了。然后,高阶地址切换确定单元22B通过比较器22BA确定分支目的地高阶地址缓冲器22B6中保持的分支目的地地址的高阶32位是否与PCU缓冲器22B7中保持的程序计数器值的高阶32位相符,如果不符,则将“真”(接通,“I”)输出到“与”门22B2和“与”门22BD的输入端子中的一个。
[0128]此外,高阶地址切换确定单元22B通过比较器22BB和22BC确定分支源代码缓冲器22B8中保持的分支源地址的高阶32位的代码H32C0DE和分支目的地代码缓冲器22B9中保持的分支目的地地址的高阶32位的代码H32C0DE中的至少一个是否为值“100”。高阶地址切换确定单元22B利用对确定结果进行“或”操作的“或”门22B1将“或”操作的结果输出到“与”门22B2的一个输入端子。
[0129]此外,由指令完成控制单元18给出的分支指令“提交”信号被输入到“与”门22B2的一个输入端子。因此,“与”门22B2在如下条件下产生推测执行指令取消信号:
[0130]条件(I):分支目的地高阶地址缓冲器22B6的分支目的地高阶地址与程序计数器值的高阶32位不符;
[0131]条件(2):分支指令的指令地址的高阶地址的代码H32C0DE和分支目的地地址的高阶地址的代码H32C0DE中的至少一个是“ 100” ;以及
[0132]条件(3):分支指令“提交”信号被发送;并且“与”门22B2将所产生的推测执行指令取消信号输出到处理器I的各单元,如取指控制单元11、指令高速缓冲存储器24、分支预测单元20、指令完成控制单元18、程序计数器控制单元19和分支控制单元22。利用上述配置,可以识别出分支指令的分支目的地未被寄存在高阶地址表81 (和表71)中,并且超过4GB的分支指令被执行。因此,高阶地址切换确定单元22B可以识别出关于包含进行超过4GB的分支的分支指令的分支预测失败。
[0133]此外,高阶地址切换确定单元22B将分支目的地代码缓冲器22B9中保持的代码H32C0DE的值是否为“100”的确定结果输出到“与”门22BD的一个输入端子。此外,由指令完成控制单元18给出的分支指令“提交”信号被输入到“与”门22BD的一个输入端子。“与”门22BD通过对比较器22BA、22BC的输出和分支指令“提交”信号进行“与”操作,来产生分支目的地高阶地址不符信号,并且将所产生的信号输出到“与”门22B5的一个输入端子。
[0134]“与”门22B5对由“与”门22BD给出的分支目的地高阶地址不符信号和由高阶地址转换无效信号保持电路22B4给出的高阶地址转换无效信号的相反值(“与非”)进行“与”操作,从而产生高阶地址更新请求指示信号。利用该高阶地址更新请求指示信号,分支目的地高阶地址缓冲器22B6中保持的分支目的地地址的高阶地址被寄存在高阶地址表81、71的空条目中。此外,如果在高阶地址表81、71中没有空条目,则从最早到最新的顺序覆写这些条目。因此,利用高阶地址更新请求指示信号,处理器I内的H32解码器8的高阶地址表81和H32编码器7的高阶地址表71被更新。注意,在基于SMT方法的处理器I中,高阶地址更新请求指示信号例如被基于每个线程复用,保持在寄存器中,并且被通知给其他线程。
[0135]高阶地址转换无效信号保持电路22B4例如是锁存器。由高阶地址切换控制单元22B给出的与另一线程(thl)相关联的高阶地址更新指示信号(thl)来设置高阶地址转换无效信号保持电路22B4的设定端子。高阶地址转换无效信号保持电路22B4是高阶地址转换无效指示单元的一个例子。
[0136]此外,例如由“或”门22B3的输出信号来对高阶地址转换无效信号保持电路22B4进行复位,其中,“或”门22B3对推测执行指令取消请求或者由其他因素引起的推测执行指令取消请求进行“或”操作。其中,“由其他因素引起的推测执行指令取消请求”是基于例如上述高阶地址切换确定单元22B的高阶地址表更新指示信号产生逻辑以外的逻辑的推测执行指令取消请求。如果如图6中所示,在分支保留站22A中分支预测单元20的分支预测结果与计算单元15执行分支指令的结果不符,则从分支保留站22A发出由其他因素引起的推测执行指令取消请求。
[0137]如上所述,通过使用“与”门22B5的方式,对分支目的地高阶地址的不符检测信号(“与”门22BD的输出)和高阶地址转换无效信号的负极逻辑进行“与”运算,来配置高阶地址表更新指示信号的产生。利用该配置,如果高阶地址转换无效信号是“真”(导通,“1”),则“与”门22B5变成“假”(断开,“0”),并且即使当检测到分支目的地高阶地址不符时,也不更新高阶地址表。如果高阶地址转换无效信号是“真”(导通,“1”),则H32编码器7输出“100”而与高阶地址表71和代码H32C0DE之间的比较结果无关。因此,高阶地址已经被寄存在高阶地址表71中,但是“与”门22BD进行操作以发出用于将高阶地址再次寄存在高阶地址表71中的更新指示信号。然后,如果高阶地址表更新指示信号是“真”(导通,“1”),则“与”门22B5设置障碍以不发出高阶地址表更新指示信号。
[0138]注意,高阶地址切换确定单元22B的分支目的地高阶地址缓冲器22B6在保持“提交”之前分支指令中最早的指令的分支目的地地址的32位高阶地址。分支控制单元22将分支目的地地址的32位高阶地址与分支目的地地址的32位低阶地址以及代码H32C0DE —起输出到程序计数器控制单元19。
[0139]此外,如图6中所示,高阶地址转换无效信号被分别发送到处理器I内的H32编码器7和H32解码器8。此外,如图6中所示,程序计数器控制单元19包括H32解码器8_2和H32编码器7-2,并且当完成分支指令的执行时,从分支控制单元22接收分支目的地地址的代码H32C0DE。然后,当H32解码器8_2解码从分支控制单元22接收到的分支目的地地址的代码H32C0DE时,程序计数器控制单元19将该高阶地址作为下一个指令地址寄存在程序计数器19A中。如果高阶地址表81不包含相符条目,则在本工作例子中代码H32C0DE是“100”。在此情况下,通过选择器19B不选择H32解码器8-2的输出而是选择分支目的地高阶地址缓冲器22B6的输出,程序计数器控制单元19更新程序计数器19A (见图6)。这是因为程序计数器控制单元19获取到接下来要执行的指令的正确指令地址。
[0140]此外,当H32编码器7将程序计数器中的高阶地址的值转换为代码H32C0DE时,程序计数器控制单元19将该代码H32C0DE传送到取指控制单元11的取指地址选择逻辑。
[0141]在上述高阶地址切换确定单元22B的控制下,高阶地址表71、81等被更新。处理器内的多个高阶地址表71、81被同时更新。下面描述一个H32解码器8的高阶地址表81如何被更新的例子。
[0142]<高阶地址表更新过程>
[0143]然而,考虑关于高阶地址表81的条目的更新顺序的各种形式,为了简单化,在该工作例子中高阶地址切换确定单元22B采用从最早的条目开始的顺序填充条目的形式。执行高阶地址表81的更新,以使得如上所述进行分支预测时给出的高阶地址表与计算分支目的地地址时给出的高阶地址表相符。因此,如上所述,该工作例子中的处理器I检测到分支预测地址与指令被实际分支到的分支目的地不符。然后,如果检测到不符,则处理器I从正确地址进行重新取指,并且如果分支目的地的高阶地址改变成高阶地址代码中未被寄存的值,则更新高阶地址表81。以下是对基于上述工作例子中处理器I的硬件配置的高阶地址更新处理的描述。
[0144]图7示出更新高阶地址表的操作过程。除了 S4A中的处理以外,图7中的处理与由上述比较例给出的图2和图3中的处理相同。注意,当高阶地址未被寄存在高阶地址表中时,在图7中S4A的处理中,将高阶地址编码成指示“未被寄存”的代码“100”。
[0145]利用32位的低阶地址和代码H32C0DE,可以通过比较在分支保留站22A的条目中存储的分支目的地与作为计算结果获取的分支目的地,来检测预测的分支目的地与计算单元15计算出的分支目的地不符。当分支指令由于分支目的地地址不符而变成“提交”时,取指控制单元11做出重新取指请求。注意,除了重新取指是在取消正在经历推测执行的指令之后进行的取指以外,重新取指与正常的取指相同。此外,高阶地址切换确定单元22B同时更新高阶地址表。
[0146]如上所述,响应于推测执行指令取消请求,所有后续的推测执行指令都被取消,并且通过查阅改变后的高阶地址表来重新开始分支预测和取指。因此,可以确保正确地址的取指。然而,上述处理是代码H32C0DE是特殊代码“100”以外的代码的情况下的处理。
[0147]然而,由计算单元15计算出的分支指令的分支目的地地址的代码H32C0DE的值是指示高阶地址表中没有条目的特殊代码“ 100”,在此情况下,即使当代码H32C0DE符合时,处理器I也不能确保高阶地址符合。也就是说,处理器I不能确保正在经历推测执行的后续分支目的地指令是否正确。对于分支指令的指令地址(程序计数器值)的代码H32C0DE的值是指示高阶地址表中没有条目的特殊代码“ 100”的情况也是如此。如果分支目的地地址的代码H32C0DE的值是“100”以外的值,则在分支预测依然成功时,处理器I继续推测执行指令。这是因为如果当高阶地址改变时并且甚至分支指令的指令地址的代码H32C0DE的值是“ 100”时仍继续分支指令,则存在分支指令的指令地址的高阶地址不一定与程序计数器19A的高阶地址相符的情况。
[0148]因此,处理器I检查分支指令的指令地址的代码H32C0DE是“100”的条件或者分支指令的分支目的地地址的代码H32C0DE是“ 100”的条件是否成立(图12中的“或”门22B1)。然后,处理器I进一步通过比较分支目的地高阶地址缓冲器22B6与程序计数器19A,对H32C0DE= “ 100”取“与”条件。如果高阶地址表中没有条目并且如果分支目的地地址的高阶地址与程序计数器的高阶地址不符,则不确保进行分支预测时给出的分支目的地的高阶地址正确。因此,高阶地址切换控制单元22B在分支指令由于分支目的地地址不符而变成“提交”时发出推测执行指令取消请求,并且进一步执行高阶地址表的更新。此外,程序计数器控制单元11将重新取指请求输出到指令高速缓冲存储器24。其中,当高阶地址切换控制单元22B检测到高阶地址表中不存在条目并且高阶地址不符时,总是出现重新取指,然后取消指令的后续推测执行,因此,分支目的地高阶地址缓冲器22B6在“提交”前保留分支指令中最早的分支指令的分支目的地高阶地址用于一个指令就够了。注意,如图8和图9中所示,如果处理器I是基于SMT方法的,则分支目的地地址高阶地址缓冲器22B6在基于每个线程“提交”之前保留分支指令中最早的分支指令的分支目的地高阶地址用于一个指令可能就够了。
[0149]图8示出在SMT方法中没有伴随更新高阶地址表的另一个线程无效控制的情况下的问题。图8中的处理与图7的情况下的处理相同。然而,在图8中,前提是当前线程(thO)的高阶地址表被在单点虚线LC下侧上的另一个线程(thl)中的处理更新。此外,图9示出解决SMT方法中伴随更新高阶地址表的问题的方法。除了 S4B的处理以外,图9中的处理与图8中的相同。
[0150]此外,在SMT中在线程之间共享高阶地址表的情况下,与图7类似,处理器I的高阶地址切换确定单元22B执行检测作为计算结果而给出的分支目的地地址与分支预测出的分支目的地地址之间高阶地址不符的处理。假定在指令执行中高阶地址表由于线程(thO)的因素而被更新,那么在当前线程(thl)中,在进行分支预测时和在进行计算之后,被查阅的高阶地址表变得不同。因此,即使在进行分支预测时和在进行计算之后分支目的地的高阶地址是不同的,仍存在与各自的高阶地址相关联的代码H32C0DE相同的可能性(图8中的S7)。
[0151]在此情况下,高阶地址切换确定单元22B不能检测到分支目的地地址不符。因此,基于错误预测的后续推测执行指令不能被取消。结果,出现分支到原始分支目的地地址以外的地址之后的处理继续进行的问题。在此情况下,高阶地址切换确定单元22B还将用于更新高阶地址表81、71的高阶地址表更新指示信号通知给另一线程,使得在更新高阶地址之后该另一线程不查阅高阶地址表。然后,高阶地址切换确定单元22B通过通知给该另一线程的高阶地址表更新指示信号来设置高阶地址转换无效信号保持电路22B4,并且产生高阶地址转换无效信号(图12)。如果高阶地址转换无效信号是“1”,则H32编码器7将代码H32C0DE强制转换为“100”。该转换使高阶地址切换确定单元22B的高阶地址表更新指示信号产生逻辑能够通过检测分支目的地地址不符来发出推测执行指令取消请求(图12)。因此,使得处理器I能够基于错误预测来取消后续的推测执行指令(图9中的S7-SA)。如果处理从取指重新开始,那么对于所关注的线程可以确保正确地址的取指。
[0152]如上所述,高阶地址转换无效信号保持电路22B4可以由I位锁存器配置而成,该I位锁存器通过来自另一线程的高阶地址表更新指示信号将值设置为“1”,并且通过来自本身线程的推测执行指令取消请求信号将该值复位为“O”。此外,如图11中所示,如果高阶地址转换无效信号是“ I ”,则H32解码器8始终检测为分支目的地地址不符。因此,可以避免在高阶地址转换无效信号保持电路22B4在另一线程中更新高阶地址表81、71等的情况下不能检测到由分支预测单元20预测的分支目的地地址与计算单元15计算出的分支目的地不符的状态。
[0153]如上所述,该工作例子已经例示了动态更换高阶地址表71、81的配置。然而,通过将特定的代码固定地分配给频繁出现的模式来混合动态的高阶地址模式和固定的高阶地址模式,可以实现更有效的分支预测。
[0154]此外,在该工作例子中,代码H32C0DE由3位信号来实现,然而,即使对于潜在的尺寸增大的程序出现一些数据和指令分配给64位地址空间时,通过扩展代码H32C0DE的位数以增加能够同时编码的地址模式,能够以较少的改变保持有效分支预测的性能。此外,在本工作例子中,以窄化到线程数为“2”的情况的方式进行描述,然而,由于该配置在线程之间共享高阶地址表,所以即使将来增加线程数时,也能够以几乎不变的控制实现相同的配置。然而,本实施例的配置当然还可以应用于线程数为“I”的处理器。在此情况下,如已经提到的,图12中的高阶地址转换无效信号保持电路22B4变得不必要。
[0155]当上述配置被实现时,处理器I在运行程序期间动态地将指令地址的高阶地址与高阶地址编码成的代码H32C0DE之间的关联关系存储在高阶地址表71、81中,将该高阶地址转换为代码H32C0DE,并且可以有效地实现分支预测单元20等的处理。
[0156]此外,处理器I可以解决运行程序期间由于动态更新高阶地址表71、81而出现的问题。也就是说,更新高阶地址表的定时被限制到推测执行取消请求的出现定时,从而可以检测到作为计算结果给出的分支目的地地址与进行分支预测时给出的分支目的地地址不符。
[0157]此外,处理器I将未被寄存在高阶地址表71中的高阶地址编码为一个代码,例如,“100”,从而使未被寄存的高阶地址能够被一致地处理。此外,处理器I将未被寄存在高阶地址表81中的代码H32C0DE解码回程序计数器值的高阶地址,从而例如可以抑制指令高速缓冲存储器24的条目被填充。
[0158]此外,当处理器I采用SMT方法时,高阶地址更新指示信号被通知给正在执行另一个线程的高阶地址切换确定单元22B,从而可以防止在一个线程中更新高阶地址表71、81影响另一个线程。
[0159]根据该处理器,对于64位地址中的高阶地址,通过使用比该高阶地址的位数少的位数表达该高阶地址,可以实现信息处理。
[0160]附图标记列表
[0161]I 处理器
[0162]3 存储器
[0163]5 互联控制单元
[0164]7 H32 编码器
[0165]8 H32 解码器
[0166]11取指控制单元
[0167]12指令缓冲器
[0168]13指令解码器
[0169]14指令发送控制单元
[0170]15计算单元
[0171]16操作数高速缓冲存储器
[0172]17寄存器
[0173]18指令完成控制单元
[0174]19程序计数器控制单元
[0175]20分支预测单元
[0176]21指令地址缓冲器
[0177]22分支控制单元
[0178]22A分支保留站[0179]22B高阶地址确定单元
[0180]23分支历史更新单元
[0181]24指令高速缓冲存储器
[0182]25次级高速缓冲存储器
[0183]71、81高阶地址表。
【权利要求】
1.一种处理器,包括: 取指单元,其在重复指令处理的所述处理器的取指阶段,从被定义为指令存储源的指令地址取得指令,所述指令处理包括取得所述指令的所述取指阶段和执行所述指令的执行阶段; 关联关系存储单元,其寄存正在经历所述指令处理的指令的指令地址的高阶位域和所述指令地址的所述高阶位域被编码成的高阶地址信息之间的关联关系; 编码单元,其基于所述关联关系将包含在所述指令地址中的高阶位域编码成所述高阶地址信息;以及 解码单元,其根据所述高阶地址信息和所述关联关系来解码出所述高阶位域。
2.根据权利要求1所述的处理器,还包括切换确定单元,在正在经历所述指令处理的指令是分支指令的情况下,当关于所述分支指令的分支目的地地址和所述分支指令的分支源地址中的至少一个的关联关系未被寄存在所述关联关系存储单元中并且所述分支指令分支跳转到所述高阶地址的变化范围内的分支目的地时,所述切换确定单元取消对所述分支指令的分支预测,以及当关于所述分支指令的分支目的地地址的关联关系未被寄存在所述关联关系存储单元中并且所述分支指令分支跳转到所述高阶地址的变化范围内的分支目的地时,所述切换确定单元更新所述关联关系。
3.根据权利要求1或2所述的处理器,其中所述编码单元产生这样的代码:所述代码指示关联关系未被寄存的指令地址的高阶位域的未寄存状态。
4.根据权利要求1至3中任一项所述的处理器,还包括程序计数器,所述程序计数器指示由所述取指单元取得的指令的指令地址, 其中关于关联关系未被寄存的高阶地址信息,所述解码单元根据所述程序计数器指示的指令地址解码出所述高阶位域。
5.根据权利要求1至4中任一项所述的处理器,其中所述关联关系存储单元以在线程之间共享的方式存储所述关联关系, 所述处理器还包括高阶地址转换无效信号指示单元,当在第一线程中更新所述关联关系时,在从第二线程中的取指阶段直到重新进行指令处理的时间段期间,所述高阶地址转换无效信号指示单元使所述编码单元执行当所述高阶地址的关联关系未被寄存时要执行的处理,以及使所述解码单元执行当所述高阶地址信息的关联关系未被寄存时要执行的处理。
6.一种处理器的控制方法,包括: 取指步骤,在重复指令处理的处理器的取指阶段,从被定义为指令存储源的指令地址取得指令,所述指令处理包括取得所述指令的所述取指阶段和执行所述指令的执行阶段; 寄存步骤,将正在经历所述指令处理的指令的指令地址的高阶位域和所述指令地址的所述高阶位域被编码成的高阶地址信息之间的关联关系寄存在关联关系存储单元中; 编码步骤,基于所述关联关系将包含在所述指令地址中的高阶位域编码成所述高阶地址信息; 解码步骤,基于所述关联关系根据所述高阶地址信息解码出所述高阶位域;以及 分支预测步骤,基于历史信息来预测由所述取指单元取得的指令是否是分支指令,以存储正在经历所述指令处理的所述分支指令的分支目的地地址相关联的所述高阶地址信息和低阶位域。
【文档编号】G06F9/38GK103853528SQ201310532943
【公开日】2014年6月11日 申请日期:2013年10月31日 优先权日:2012年12月3日
【发明者】铃木崇志 申请人:富士通株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1