处理器和指令码生成设备的制造方法

文档序号:10569712阅读:139来源:国知局
处理器和指令码生成设备的制造方法
【专利摘要】本申请涉及处理器和指令码生成设备。在包括指令预取缓冲器以从存储器预取具有连续地址的指令组的处理器中,降低了发生总线比所需更多地被指令预取占用的情况的概率。处理器包括指令获取地址发生器,其控制将被预取到指令预取缓冲器中的指令的地址和量。指令获取地址发生器包括存储指令的指令预取量的表,以使得指令预取缓冲器与处理执行单元中出现的分支的分支目的地地址相关联地执行预取。当处理执行单元中出现分支时,指令获取地址发生器使得指令预取缓冲器预取与包括所出现分支的分支目的地地址的所关注的分支目的地地址相对应的指令预取量的指令。
【专利说明】处理器和指令码生成设备
[0001]相关申请的交叉引用
[0002]这里通过参考并入2015年2月26日提交的日本专利申请第2015-036296号的全部公开内容,包括说明书、附图和摘要。
技术领域
[0003]本发明涉及处理器和指令码生成设备,其中指令码生成设备根据以高级语言描述的程序生成可由处理器执行的指令码。具体地,本发明可以通过诸如微计算机的处理器(其具有指令高速缓存和预取功能)以及通过使用该处理器的系统适当地使用。
【背景技术】
[0004]在包括指令高速缓存的处理器中,广泛地采用预取功能,以防止处理能力由于将在高速缓存未命中之后执行的高速缓存填充引起的劣化。预取功能预测处理器将在未来执行的指令,并且在高速缓存未命中发生之前预先将指令读取到预取缓冲器(诸如指令高速缓存)中。提出了各种预取功能,从简单的预取功能(在与当前正在执行的指令的地址连续的地址处读取指令)到高性能预取功能(伴随分支预测)。
[0005]专利文献I公开了一种处理器,其包括FIFO(先入先出)类型的预取缓冲器,并且基于由指令解码器计算的指令的字数针对指令的每个单元执行预取。其特征在于,可以通过降低当通过预取功能将指令读取到预取缓冲器中时发生的总线仲裁的频率来增加整个系统总线效率。
[0006](专利文献I)日本未审查专利申请公开第Hei2(1990)-242337号

【发明内容】

[0007]本发明的发明人针对专利文献I的调研提出了以下新的问题。
[0008]当代替FIFO类型的预取缓冲器而对指令高速缓存执行指令预取时,占用总线的时段变得更长,因为一次读取大量的指令。FIFO类型的预取缓冲器以字为单位来执行指令预取,其中一个字具有一个或两个字节。相反,指令高速缓存中的作为高速缓存填充的单位的高速缓存线(通常制成与条目大小一致)例如为128字节。如果包括指令高速缓存的处理器被配置为使得可以在每当执行一个高速缓存线的指令和发生高速缓存未命中时执行高速缓存填充,则由于等待高速缓存填充而导致的性能劣化是显著的。因此,执行推测性指令预取来预先读取多条线是有效的。这里,通过固定值或寄存器设定值给出执行指令预取的计数,即为其执行高速缓存填充的线的数量。在不伴随分支预测的情况下,针对与当前正在执行的指令的地址连续的地址的指令,执行多条线的指令预取。此时,明显地,如果采用固定的指令预取计数,则存在其中发生对没有实际执行的指令的推测性指令预取的情况。例如,当假设在伴随高速缓存未命中的一条线的高速缓存填充之后以固定方式执行两条线的指令预取时,即使在执行包括在第一线中的指令且不执行随后指令的同时出现分支的情况下,也不抵消两条线的随后指令预取而是执行这两条线的随后指令预取。为了执行两条线的随后指令预取,将占用执行高速缓存填充的总线并且将保持等待获得用于获取分支目的地地址的指令的总线权利。
[0009]不仅在指令预取缓冲器配置有高速缓存存储器的情况下可能发生这种问题,而且类似地在采用FIFO类型的预取缓冲器的情况下也可能发生这种问题。
[0010]以下解释这种问题的解决方案。根据本发明的说明书和附图的描述,本发明的其他问题和新特征将变得清楚。
[0011]根据本申请的一个实施例如下所述。
[0012]S卩,处理器包括指令预取缓冲器以从存储器预取具有连续地址的指令组,还包括指令获取地址发生器以控制将被预取至指令预取缓冲器的指令的地址和指令预取量。指令获取地址发生器包括表以存储指令的指令预取量,以使得指令预取缓冲器与处理执行单元中出现的分支的分支目的地地址相关联地执行预取。当处理执行单元中出现分支时,指令获取地址发生器使得指令预取缓冲器预取与包括所出现分支的分支目的地地址的所关注分支目的地地址相对应的指令预取量的指令。
[0013]如下简要解释通过上述一个实施例得到的效果。
[0014]可以抑制降低发生总线比所需更多地被指令预取占用的情况的可能性。
【附图说明】
[0015]图1是示出根据典型实施例的处理器的结构的实例的框图;
[0016]图2是示出整个处理器的结构的实例的框图;
[0017]图3是示出比较实例的处理器中的指令获取地址发生器的结构的框图;
[0018]图4是示出根据典型实施例的处理器的指令获取地址发生器的结构的实例的框图;
[0019]图5是示出具有全相联存储器的指令预取计数表的结构的实例的概念图;
[0020]图6是示出具有集相联存储器的指令预取计数表的结构的实例的概念图;
[0021]图7是示出根据实施例1的指令获取地址发生器的结构的实例的框图;
[0022]图8是示意性示出对指令预取计数表进行表写入的过程的解释图;
[0023]图9是示意性示出从指令预取计数表中对指令获取计数进行表读取的过程的解释图;
[0024]图10是示意性示出比较实例的处理器的操作的实例的定时图;
[0025]图11是示意性示出根据典型实施例的处理器的操作的实例的定时图;
[0026]图12是示出根据实施例1的指令获取地址发生器的结构(与分支预测组合)的另一实例的框图;
[0027]图13是示出根据实施例2的处理器和安装在其中的指令获取地址发生器的结构的实例的框图;
[0028]图14是示出根据实施例3的指令获取地址发生器的结构的实例的框图;
[0029]图15是示出根据实施例4的指令获取地址发生器的结构的实例的框图;
[0030]图16是示出根据实施例5的指令获取地址发生器的结构的实例的框图;
[0031]图17是示出根据实施例6的指令获取地址发生器的结构的实例的框图;
[0032]图18是示出在根据实施例6的指令获取地址发生器中安装的指令预取计数表的相联存储器的条目的结构的实例的解释图;
[0033]图19是示意性示出根据实施例7的指令码生成设备的结构的实例的解释图;
[0034]图20是示意性示出由链接器生成的可执行文件的实例的解释图;以及
[0035]图21是示意性示出由链接器生成的指令预取计数信息的实例的解释图。
【具体实施方式】
[0036]1.实施例的概述
[0037]首先,解释本申请中公开的典型实施例的概况。关于典型实施例的概况解释中的圆括号中参考的附图的标号仅示出了附加该标号的部件的概念中包括的内容。
[0038](I)〈指令预取量管理表〉
[0039]本申请中公开的典型实施例是处理器(100),其包括:指令预取缓冲器(20),从存储器(40)中预取具有连续地址的指令组;处理执行单元(30),从指令预取缓冲器中读取指令并执行指令;以及指令获取地址发生器(11) ο结构如下。
[0040]指令获取地址发生器设置有表(I,2,3),该表存储指令的指令预取量以使得指令预取缓冲器与处理执行单元中出现的分支的分支目的地地址相关联地执行预取。当在处理执行单元中出现分支时,指令获取地址发生器参照该表来计算与所出现的分支的分支目的地地址相对应的指令预取量,并且使指令预取缓冲器预取所计算的指令预取量的指令,包括所关注的分支目的地地址的指令(4-7)。
[0041]根据该结构,可以抑制降低发生总线(41)比所需更多地被指令预取占用的情况的可能性。
[0042](2)〈动态表〉
[0043]在段落I中,当在处理执行单元中出现分支时,指令获取地址发生器基于在所出现的分支的分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写与表(2)的所关注分支目的地地址相对应的指令预取量。
[0044]根据该结构,基于实际发生的分支来学习指令预取量;因此,可以以更高的精度预测适当的指令预取量。
[0045](3)〈静态表〉
[0046]在段落I中,当处理执行单元执行指定的指令时,在表(3)中写入分支目的地地址和对应的指令预取量。
[0047]根据该结构,关于没有频繁发生的例外情况的处理(诸如中断),当难以期望如段落2中动态地计算指令预取量时,或者当难以期望保持动态计算的指令预取量直到它接下来被参考时(当其溢出时),可以确定地提供适合的指令预取量。通过程序的离线分析或者通过诸如操作系统的软件,还可以适当地计算指令预取量。
[0048](4)〈静态表+动态表〉
[0049]在段落3中,表被定义为静态表(3)。指令获取地址发生器还设置有动态表(2)以存储指令的指令预取量,从而使得指令预取缓冲器与处理执行单元中出现的分支的分支目的地地址相关联地执行预取。当处理执行单元中出现分支时,指令获取地址发生器基于在所出现分支的分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写与动态表的所关注分支目的地地址相对应的指令预取量。当处理执行单元中出现分支时,指令获取地址发生器参照静态表和动态表中的至少一个来计算与所出现分支的分支目的地地址相对应的指令预取量(15),并且使得指令预取缓冲器预取所计算的指令预取量的指令,包括所关注分支目的地地址的指令(4-7)。
[0050]根据该结构,可以适当地使用根据段落2的具有学习功能的动态表(2)和根据段落3的静态表(3)。例如,由于例外情况的处理(诸如中断处理)不会频繁发生,所以如果利用动态表管理伴随这些例外情况处理的分支目的地地址,则可能在频繁发生的分支学习的处理中覆写和淘汰(溢出)分支目的地地址。因此,进行配置使得使用静态表来管理与伴随例外情况处理的分支目的地地址相对应的指令预取量,并且使得即使实际上发生例外情况处理的分支,也可以不在动态表中写入此时的指令预取量。根据该结构,使用静态表来管理伴随不频繁发生的例外情况处理的分支目的地地址而不溢出,并且利用基于实际发生的分支学习的动态表来管理频繁发生的分支;因此,可以分别针对静态表和动态表预取适当的指令预取量的指令。
[0051](5)〈动态表+分支预测单元〉
[0052]在段落2中,指令获取地址发生器进一步包括分支预测单元(19)。当处理执行单元中出现分支并且分支预测单元进行的分支预测成功时,指令获取地址发生器停止向表中重写与所关注分支目的地地址相对应的指令预取量。
[0053]根据该结构,可以抑制动态表中条目的不必要的占用。当分支预测成功时,总线不被比所需更多地占用,因为基于分支预测来执行指令预取。因此,不需要使用动态表。
[0054](6)〈指令预取计数表〉
[0055]本申请中公开的典型实施例是处理器(100),其包括指令高速缓存(20)、处理执行单元(30)和指令获取地址发生器(11)。该结构如下。
[0056]指令高速缓存保持由每条线规定数量的指令码组成的多条线,并且针对从指令获取地址发生器提供的每个指令预取请求地址来从存储器(40)中预取一条线的指令码。
[0057]处理执行单元从指令高速缓存中读取由规定数量的指令码组成的指令并执行指令。
[0058]指令获取地址发生器设置有指令预取计数表(I,2,3)以存储指令预取计数,从而使得指令高速缓存与处理执行单元中出现的分支的分支目的地地址相关联地执行预取。
[0059]当处理执行单元中出现分支时,指令获取地址发生器参照指令预取计数表来计算与包括所出现分支的分支目的地地址的指令预取请求地址相对应的指令预取计数。从所关注的指令预取请求地址开始继续并且在数量上对应于所计算的指令预取计数,指令获取地址发生器顺序地向指令高速缓存提供指令预取请求地址。
[0060]根据该结构,可以抑制降低发生总线(41)比所需更多地被指令预取占用的情况的可能性。
[0061 ] (7)〈动态指令预取计数表〉
[0062]在段落6中,当处理执行单元中出现分支时,指令获取地址发生器基于所出现分支的分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写指令预取计数表(2)中的与所关注分支目的地地址相对应的指令预取计数。
[0063]根据该结构,基于实际上发生的分支来学习指令预取计数;因此,可以以更高的精度预测适当的指令预取量。
[0064](8)〈根据地址差异计算指令预取计数〉
[0065]在段落7中,处理执行单元设置有分支请求单元(33),以在出现分支时向指令获取地址发生器提供所出现分支的分支源地址和分支目的地地址。
[0066]指令获取地址发生器保持所提供的分支目的地地址,并且基于通过从当紧接在所关注分支之后出现分支时提供的分支源地址中减去当前保持的分支目的地地址而得到的差异来重写保持在指令预取计数表中且对应于分支目的地地址的指令预取计数。
[0067]根据该结构,根据分支目的地地址和配置下一出现的分支的指令的地址(下一分支的分支源地址)之间的差异来计算指令预取计数。因此,可以正确地学习指令预取计数。
[0068](9)〈分支请求单元通过计数器计算指令预取计数〉
[0069]在段落7中,处理执行单元设置有分支请求单元(33)。
[°07°]当处理执行单元中出现分支时,分支请求单元向指令获取地址发生器提供所出现分支的分支源地址。
[0071]分支请求单元包括计数器(34)以在处理执行单元中出现分支时开始计数,并且对由处理执行单元执行的指令的地址超过与指令高速缓存的一条线相对应的地址边界的次数进行计数,并且分支请求单元根据分支间距离在紧接在所关注分支之后出现的分支的时间处向指令获取地址发生器提供计数值。
[0072]指令获取地址发生器保持所提供的分支目的地地址(12),并且基于紧接在所关注分支之后出现分支时提供的分支间距离来重写与所保持的分支目的地地址相对应的指令预取计数。
[0073]根据该结构,通过分支请求单元中的计数器(34)来计算指令预取计数。因此,可以通过小电路规模正确地学习指令预取计数。
[0074](10)〈指令获取地址发生器通过计数器计算指令预取计数〉
[0075]在段落7中,处理执行单元设置有分支请求单元(33)。
[0076]当处理执行单元中出现分支时,分支请求单元向指令获取地址发生器提供所出现分支的分支源地址。
[0077]指令获取地址发生器包括寄存器(112)以保持所提供的分支目的地地址,并且包括计数器(14)以在提供分支目的地地址时开始计数并且对将指令预取请求地址提供给指令高速缓存的次数进行计数。当在所关注分支之后提供下一分支目的地地址时,指令获取地址发生器根据与保持在寄存器中的分支目的地地址相对应的指令预取计数来将计数器的计数值写入指令预取计数表。
[0078]根据该结构,通过指令获取地址发生器中的计数器(14)来计算指令预取计数。因此,可以通过小于段落8的结构的电路规模来正确地学习指令预取计数。所计算(计数)的指令预取计数变得等于或大于通过段落9的结构计算(计数)的指令预取计数。因此,执行更多推测性的获取,并且增加指令高速缓存命中的概率。
[0079](11)〈静态指令预取计数表〉
[0080]在段落6中,当处理执行单元执行指定的指令时,分支目的地地址和对应的指令预取计数被写入指令预取计数表(3)。
[0081]根据该结构,关于不频繁发生的例外情况处理(诸如中断),当难以期望如段落7至段落10—样动态计算指令预取计数时,或者当难以期望保持动态计算的指令预取计数直到参考下一个时(当其溢出时),可以确定地提供适当的指令预取计数。还可以通过程序的离线分析或通过诸如操作系统的软件来适当地计算指令预取计数,并将其写入静态指令预取计数表。
[0082](12)〈静态指令预取计数表+动态指令预取计数表〉
[0083]在段落11中,指令预取计数表被定义为静态指令预取计数表(3)。
[0084]指令获取地址发生器还包括动态指令预取计数表(2),并且当处理执行单元中出现分支时,指令获取地址发生器基于所出现分支的分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写动态指令预取计数表中的与所关注分支目的地地址相对应的指令预取计数。
[0085]当处理执行单元中出现分支时,指令获取地址发生器参照静态指令预取计数表和动态指令预取计数表中的至少一个来计算与所出现分支的分支目的地地址相对应的指令预取计数(15)。指令获取地址发生器顺序地向指令高速缓存提供包括所出现分支的分支目的地地址的指令预取请求地址,并且指令预取请求地址从所关注的指令预取请求地址开始继续并且在数量上对应于所计算的指令预取计数(4-7)。
[0086]根据该结构,可以使得利用段落7的学习功能和段落11的静态指令预取计数表(其可以支持不频繁发生的例外情况处理)来适当地使用动态指令预取计数表,从而产生与段落4中一样的效果。
[0087](13)〈动态指令预取计数表+分支预测单元〉
[0088]在段落7至段落10的一个中,指令获取地址发生器还包括分支预测单元(19)。当处理执行单元中出现分支且分支预测单元进行的分支预测成功时,指令获取地址发生器停止对指令预取计数表的与所关注分支目的地地址相对应的指令预取量的重写。
[0089]根据该结构,可以抑制动态指令预取计数表中的条目的不必要的占用。原因如下。当分支预测成功时,总线不会比所需更多地被占用,因为基于分支预测来执行指令预取。因此,不需要使用动态指令预取计数表。
[0090](14)〈指令预取计数表是相联存储器〉
[0091]在段落6至段落13的一个中,指令预取计数表是相联存储器,其被提供有分支目的地地址并且输出对应的指令预取计数。
[0092]根据该结构,可以使用已知的相联存储器的设计资源来实施指令预取计数表,从而有利于设计。相联存储器可以是全相联类型或者集相联类型。
[0093](15)〈指令预取计数表是具有掩码的相联存储器〉
[0094]在段落14中,用作指令预取计数表的相联存储器包括多个条目,每个条目均由标签、掩码和指令预取计数组成。相联存储器输出存储在条目中的指令预取计数(当通过掩码抵消所输入的分支目的地地址的部分位时与标签一致)作为与所输入的分支目的地地址相对应的指令预取计数(18)。
[0095]根据该结构,可以抑制缩小用作指令预取计数表的相联存储器的电路规模(条目的数量)。这是因为输出同一指令预取计数的多个分支目的地地址可以统一寄存至一个条目。
[0096](16)〈指令码生成设备〉
[0097]本申请公开的典型实施例是指令码生成设备(50)以生成提供给处理器(100)的程序(61)的指令码,其中处理器(100)包括指令预取缓冲器(20)和指令获取地址发生器(11)。结构如下。
[0098]指令获取地址发生器设置有表(I,2,3)以存储指令的指令预取量,从而使得指令预取缓冲器与所出现分支的分支目的地地址相关联地执行预取。当出现分支时,指令获取地址发生器使得指令预取缓冲器预取与所关注分支目的地地址(包括所出现分支的分支目的地地址)相对应的指令预取量的指令。
[0099]指令码生成设备根据程序生成可执行指令码(64),并且基于分支指令的分支目的地地址与指令码中配置的下一分支指令的地址之间的差异来计算与所关注分支目的地地址相对应的指令预取量。
[0100]根据该结构,可以向指令码生成设备添加包括链接器(其生成可以被处理器执行的指令码)的功能,该功能为生成信息(分支目的地地址以及指令预取量或指令预取计数)用于写入段落3和4中描述的静态表或者段落11和12中描述的静态指令预取计数表。由指令码生成设备生成以关联分支目的地地址和指令预取量或指令预取计数的信息可以被写入段落I和2以及段落4和5中描述的动态表或者段落6至10和段落12至15中描述的动态指令预取计数表中作为初始值。
[0101](17)〈指令预取缓冲器是指令高速缓存〉
[0102]在段落16中,指令预取缓冲器是指令高速缓存(20),并且通过指令预取计数来指定指令预取量以将指令码预取至指令高速缓存的高速缓存线。
[0103]根据该结构,可以向处理器(其中利用高速缓存存储器来实施指令预取缓冲器)适当地提供指令预取计数作为指令预取量。
[0104](18)〈表是具有掩码的相联存储器〉
[0105]在段落17中,表是包括多个条目的相联存储器,每个条目均由标签、掩码和指令预取计数组成,并且相联存储器输出存储在条目中的指令预取计数(在通过掩码抵消所输入的分支目的地地址的部分位时与标签一致)作为与所输入的分支目的地地址相对应的指令预取计数。
[0106]指令码生成设备执行指令码的地址映射以在一些地址位公共的地址空间中配置具有对应指令预取计数的相同值的多个分支目的地地址。接下来,指令码生成设备通过将公共地址位定义为标签、将抵消其他地址位的位串定义为掩码以及将相同值定义为指令预取计数来包括将被提供给相联存储器的一个条目。
[0107]根据该结构,可以抑制缩小用作指令预取计数表的相联存储器的电路规模(条目的数量)。指令码生成设备可以生成信息以在一个条目中统一地寄存输出同一指令预取计数的多个分支目的地地址。
[0108](19)〈编译器+链接器〉
[0109]在段落16、段落17和段落18的一个中,指令码生成设备包括编译器(51)、库对象文件(63)和链接器(52)。编译器被提供有以高级语言描述的程序(61)并生成对象文件(62)。链接器根据由编译器生成的对象文件(62)和库对象文件生成可执行指令码(64)。链接器计算并输出与分支目的地地址相对应的指令预取量(65)。
[0110]根据该结构,计算与分支目的地地址相对应的指令预取量的功能包括在集成程序开发环境(包括常规的编译器和链接器)中,并且可以自动化并提供所关注的功能。
[0111]2、实施例的细节
[0112]更加详细地解释实施例。
[0113](实施例1)
[0114]〈指令预取量管理表〉
[0115]图1是示出根据典型实施例的处理器100的结构的实例的框图。处理器100包括指令获取单元10、指令预取缓冲器20、处理执行单元30和存储器40。指令预取缓冲器20和存储器40经由总线41相互耦合。指令预取缓冲器20经由总线41从存储器40预取具有连续地址的指令组。处理执行单元30从指令预取缓冲器20读取指令并执行指令。
[0116]尽管在图中未示出,但对于数据的加载/存储来说,优选地,处理执行单元30和存储器40可以通过同一存储器40和总线41相互耦合,或者它们可以通过其他存储器和其他总线(数据总线)相互耦合,而与指令无关。总线41可以是等级化的。尽管没有具体限制,但具有存储器包括在芯片上或者外部包括存储器的结构,例如,处理器100使用已知的CMOS(互补金属氧化物半导体场效应晶体管)集成电路制造技术而形成在单个半导体衬底(诸如硅)上。图1所示的信号是使用一条线或多条线的一位或多位的数字信号。然而,省略了总线标注。这些点类似地应用于本申请公开的其他实施例以及引用的其他框图。
[0117]指令获取单元10设置有指令获取地址发生器11。指令获取地址发生器11包括存储指令的指令预取量的表I以使指令预取缓冲器20与处理执行单元30中出现的分支的分支目的地地址相关联地执行预取。当处理执行单元30中出现分支时,所出现分支的分支目的地地址被提供给指令获取单元10的指令获取地址发生器11。指令获取地址发生器11参照表I读取与所提供的分支目的地地址相对应的指令预取量。通过生成指令预取请求地址的方法,指令获取地址发生器11使得指令预取缓冲器20从存储器40中预取所读取指令预取量的指令。
[0118]根据该结构,可以根据分支目的地地址适当地设置合适的指令预取量。因此,可以抑制降低发生总线41比所需更多地被指令预取占用的情况的概率。
[0119]图2是示出整个处理器100的结构的实例的框图。
[0120]指令预取缓冲器20通过高速缓存存储器来实现,并且包括数据阵列21、控制器22和总线请求缓冲器23(称为指令高速缓存单元20)。数据阵列配置有多个条目,并且每一个条目的高速缓存线为128字节并包括多个指令码。控制器22被称为高速缓存控制器。控制器22确定所请求的地址的指令码是否存储在数据阵列21中。当存储时,其是高速缓存命中并且指令码被提供给处理执行单元30。当没有存储时,其是高速缓存未命中并且包括地址的一条高速缓存线的指令码从存储器40被读取到数据阵列21中(以完成高速缓存填充)。在总线请求缓冲器23中缓冲伴随高速缓存未命中的数据到存储器40中的读取请求。无论何时获取到总线权利,总线请求缓冲器23都顺序地将缓冲的读取请求发布给总线41。
[0121]指令高速缓存单元20和存储器40经由主总线41耦合。根据主总线41的负载的幅度和所请求的访问频率,在指令高速缓存单元20和主总线41之间以及在主总线41和存储器40之间设置每一个都构成流水线的中继缓冲器42_1至42_4。通过主总线41的负载的幅度、所请求的访问频率(吞吐量)和时延来决定该中继缓冲器的级数和结构。
[0122]处理执行单元30包括指令解码器32、分支请求单元33和执行单元35。指令解码器32解码并解释从指令高速缓存20提供的指令的指令码,并根据指令控制分支请求单元33和执行单元35。执行单元35例如配置有负载/存储指令执行单元和架构执行单元。分支请求单元33根据执行单元35的计算结构执行条件分支和无条件分支,并向指令获取单元10发布分支目的地地址。通常,分支请求与分支目的地地址一起发布。
[0123]在实施例1中,指令获取地址发生器11包括表I,其存储指令的指令预取量,这使得指令预取缓冲器20 (指令高速缓存单元20)如上所述与分支目的地地址相关联地进行预取。因此,可以根据分支目的地地址适当地设置合适的指令预取量。
[0124]〈指令预取计数表〉
[0125]例如通过上述指令高速缓存单元20来实现指令预取缓冲器20,并且可以通过高速缓存填充的计数来指定指令预取量。以下,通过将其中指令预取量固定而与分支目的地地址无关的比较实例与其中根据分支目的地地址适当指定指令预取量的本实施例进行比较来进行解释。
[0126]图3是示出根据比较实例的处理器的指令获取地址发生器11的结构的实例的框图。指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址发生控制器4和指令预取计数设置寄存器9。当处理执行单元30中出现分支时,分支目的地地址和分支请求被提供给指令获取地址发生器11。所提供的分支目的地地址经由选择器6存储在触发器7中,并且被提供给用作指令预取缓冲器的指令高速缓存20。当分支目的地地址在指令高速缓存20中命中(高速缓存命中)时,读取对应的指令码并提供给处理执行单元30。当分支目的地地址在指令高速缓存20中没有命中时(高速缓存未命中),执行高速缓存填充并且读取对应的指令码并提供给处理执行单元30。
[0127]与此并行地由地址加法器5递增分支目的地地址,并且保持在触发器7中的值被更新。例如,递增量等效于一条高速缓存线,并且地址加法器5中的加法为0x10。这里,“OxYY”表示YY是十六进制表示法中的两个数字的数量(在本申请的说明书中是相同的)。从分支目的地地址递增的值被提供给指令高速缓存20作为指令预取请求地址,并且在高速缓存未命中的情况下从存储器40中预取。地址生成控制器4控制递增操作的重复。在比较实例中,与从指令预取计数设置寄存器9提供的指令预取计数一样多地重复递增,每次发布指令预取请求地址,并且通过指令高速缓存20执行对应于计数的指令预取。
[0128]图4是示出根据典型实施例的处理器100的指令获取地址发生器11的结构的实例的框图。这是通过指令高速缓存20实现指令预取缓冲器20的结构的实例,通过高速缓存填充的计数来指定指令预取量,并且通过指令预取计数表I实现图1的表I。指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址生成控制器4和指令预取计数表I。当处理执行单元30中出现分支时,分支目的地地址和分支请求被提供给指令获取地址发生器11。所提供的分支目的地地址经由选择器6被存储在触发器7中,并且被提供给指令高速缓存20。当分支目的地地址在指令高速缓存20中命中时,读取对应的指令码并将其提供给处理执行单元30。当它是高速缓存未命中时,执行高速缓存填充,然后读取对应的指令码并提供给处理执行单元30。
[0129]与上述处理并行地通过地址加法器5递增分支目的地地址,并且将存储在触发器7中的值更新。递增量等效于一条高速缓存线。从分支目的地地址递增的值被提供给指令高速缓存20作为指令预取请求地址,并且在高速缓存未命中的情况下从存储器40被预取。地址生成控制器4控制递增操作的重复。在图4所示结构的实例中,从指令预取计数表I中读取与由处理执行单元30提供的分支目的地地址相对应的指令预取计数并提供给地址发生控制器4。地址生成控制器4根据从指令预取计数表I提供的指令预取计数重复递增,每次发布指令预取请求地址,并使得指令高速缓存20执行与计数相对应的指令预取。
[0130]指令预取计数表I是相联存储器,其使用分支目的地地址参考对应的指令预取计数。指令预取计数表I的结构可以是一般的全相联或集相联的。
[0131]图5是示出具有全相联存储器的指令预取计数表I的结构的实例的概念图。指令预取计数表I配置有多个条目,每个条目均具有有效标志V、作为标签的分支目的地地址和对应的指令预取计数。
[0132]图6是示出具有集相联存储器的指令预取计数表的结构的实例的概念图。集相联存储器配置有(n+1)条路WAYO-WAYn,每条路都包括多个条目。每条路配置有索引为O-OxFF的256个条目,并且每个条目都配置有有效标志V、标签和指令预取计数。关于分支目的地地址,低阶的8位对应于索引,并且高阶位存储在阵列中作为标签。
[0133]图7是示出根据实施例1的指令获取地址发生器11的结构的实例的框图。指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址生成控制器4和指令预取控制器8。指令预取控制器8设置有指令预取计数表2、指令获取计数计算单元13和分支目的地地址保持寄存器12。指令预取计数表2具有表写入和表读取的功能。表写入是将分支目的地地址和对应的指令预取计数写入指令预取计数表2的条目中的功能。表读取是搜索与所输入的分支目的地地址一致的分支目的地地址并当其为高速缓存命中时读取对应的指令预取计数的功能。分支目的地地址保持寄存器12保持分支目的地地址作为分支目的地的头部处的指令被存储的地址。指令预取控制器8被提供有下一分支的分支源地址。下一分支的分支源地址是存储生成紧接在指定存储在分支目的地地址保持寄存器12中的分支目的地地址的分支之后的分支的分支指令的地址。指令获取计数单元13被提供有下一分支的分支源地址和保持在分支目的地地址保持寄存器12中的分支目的地地址,并针对指令预取计数表2执行表写入。指令预取计数表2读取与所输入的分支目的地地址相对应的预取计数,并将其提供给地址生成控制器4。在没有对应于分支目的地地址的条目的情况下,优选地采用设置类似于图15所述的选择器15的选择器并且由该选择器提供默认值的结构。通常,通过固定值或寄存器设置来给出默认值。地址生成控制器4、地址加法器5、选择器6和触发器7的结构和操作与上述参照图4的结构和操作相同;因此,省略对其的解释。
[0134]图8和图9是分别示意性示出指令预取计数表2的表写入的过程以及指令获取计数的表读取的过程的解释图。在图8和图9中,根据汇编语言的助记符示出配置将被执行的程序的指令,并且在每行的头列中示出存储每个指令的地址。在地址Ax处,配置具有标记TargetO作为分支目的地的分支指令br TargetO。在由标记TargetO作为分支目的地表示的地址Ay处,配置移动指令mov,并且在随后的地址Ay+1、Ay+2、…、Ay+d处,顺序地配置负载指令Id、加法指令add、...、跳转指令jump Targetl。地址Ay+d处的跳转指令jump Target I是标记Targetl的无条件分支指令。在由标记Targetl作为分支目的地表示的地址Az处,配置移动指令mo V ο
[0135]例如,指令预取计数表2的初始状态是空的,即没有写入任何内容的状态。当在执行来自地址Ax的分支指令br TargetO之后第一次出现分支时,由标记TargetO表示的地址Ay变成分支目的地地址,并且被存储在分支目的地地址保持寄存器12中。尽管在图8中没有示出,但在作为分支目的地地址的地址Ay处的表读取导致未命中,因为指令预取计数表2是空的。随后,从由标记TargetO表示的地址Ay顺序地执行指令,并且在地址Ay+d处出现跳变指令jump Targetl的标记Targetl的分支。此时,由标记Targetl作为分支目的地地址表示的地址Az以及生成分支作为下一分支的分支源地址的跳变指令jump Targetl的地址Ay+d被分别提供给指令获取地址发生器11。指令获取计数计算单元13被提供有下一分支的分支源地址Ay+d以及来自分支目的地地址保持寄存器12的分支目的地地址Ay,并计算分支间距离,其是差值(Ay+d_Ay = d)。指令获取计数计算单元13基于所计算的分支间距离来计算适当的指令预取计数,并以相关联的方式将提供的分支目的地地址Ay和计算的指令预取计数写入指令预取计数表2的条目中。
[0136]随后,再次执行地址Ax处的分支指令brTargetO。当出现用于第二次或随后的分支时,如图9所示,通过从指令预取计数表2的表读取来读取与由标记TargetO表示的分支目的地地址Ay相对应的指令预取计数,并且执行针对指令高速缓存20的指令预取。此时,如图8所示,计算与分支目的地地址Ay相对应的指令预取计数,使得生成下一分支的跳变指令jump Targetl的地址Ay+d处的指令可以被预取,并且可以不执行随后的不需要的预取。
[0137]图8和图9示出了无条件分支指令jumpTargetl。然而,当分支指令是条件分支指令时,针对配置实际生成分支的指令的地址,根据分支间距离计算指令预取计数,并且连续地执行表写入。根据该结构,基于实际出现下一分支的地址来适应性地学习与分支目的地地址相对应的指令预取计数。
[0138]图10和图11分别是示意性示出根据比较实例的处理器的操作的实例和根据典型实施例的处理器的操作的实例的定时图。水平轴示出了时间,并且垂直轴方向示意性示出了提供给指令高速缓存20的指令预取请求地址以及用于伴随指令预取的总线事务。
[0139]在图1O所示的比较实例的处理器中,当在时间11处发出分支目的地地址Ay作为指令预取请求地址时,在时间t2_t5的时段内执行包括地址Ay的一条线的指令预取(I)。随后,指令获取单元10请求固定计数的指令预取。在图10的实例中,请求两个或多个指令预取,并且分别在时间t3和t4处顺序地发出地址Ay+OxlO和地址Ay+0x20作为指令预取请求地址。本实例示出了对于每条高速缓存线将指令预取请求地址递增0x10,并进行发布。在指令预取请求地址Ay+OxlO和地址Ay+0x20的发布之后,分别在时间t5-t8的时段内执行包括地址Ay+0x10的指令预取(2)以及在时间t8-tl0的时段内执行包括地址Ay+0x20的指令预取(3)。与此并行地,假设由指令预取(I)预取的指令被执行,并且在时间t6处出现针对地址Az的分支请求。之后,分别在时间t6、t7和t9处顺序地发布地址Αζ、Αζ+0χ10和Az+0z20作为指令预取请求地址。然而,在时间t6处由指令预取(2)占用总线41;因此,当指令预取(3)结束并且总线被释放时,作为针对地址Az的指令预取的分支目的地指令获取保持等待直到时间tlO为止。因此,处理器被迫保持地址Az的指令的执行等待。
[0140]此外,在根据图11所示的典型实施例的处理器的操作的实例中,在时间tl处发布分支目的地地址Ay作为指令预取请求地址,并且在时间t2-t5的时段期间执行包括地址Ay的一条线的指令预取(I)。然而,在时间tl处发布分支目的地地址Ay作为指令预取请求地址之后,指令获取单元10请求适合于分支目的地地址Ay的计数的指令预取。在根据本申请的典型实施例的处理器中,当在指令预取(I)的范围内包括出现下一分支的地址(当引用图8和图9时为地址Ay+d)时,不发布随后的指令预取请求地址。即,在时间t3和t4处不发布指令预取请求地址。为此,当在时间t6处出现地址Az的分支请求时,总线处于空闲(IDLE)状态。因此,可以在时间t6之后的时间110处立即开始与在时间t6处的地址Az的分支之后发布的指令预取请求地址Az相对应的分支目的地指令获取。因此,伴随该分支的处理器的延迟时间变得可以与普通的高速缓存未命中相当,并且不会发生不必要的延迟时间。
[0141]如上所解释的,可以抑制降低发生总线41比所需更多地被指令预取占用的情况的概率。因此,通过停止最初不需要的指令预取(2)和(3),可以降低作为访问目的地的总线41和存储器40的操作功率。此外,如图7所示,通过配置具有指令高速缓存存储器的指令预取缓冲器以及通过包括基于实际出现的分支学习的指令预取计数表2,基于实际出现的分支学习指令预取计数。因此,可以以更高的精度预测适当的指令预取量。此外,根据分支目的地地址与配置下一出现的分支的指令的地址(下一分支的分支源地址)之间的差异来计算指令预取计数。因此,可以正确地学习指令预取计数。
[0142]图7示出了包括指令高速缓存存储器的指令预取缓冲器的实例。然而,不需要必须配置具有高速缓存存储器的指令预取缓冲器,并且简单的FIFO类型的预取缓冲器可以是足够的。图7示出了包括基于实际出现的分支学习指令预取计数表2的处理器的结构的实例。然而,计算与分支目的地地址相对应的适当指令预取计数的方法不限于图7所示的结构,而是例如可以由下面描述的实施例2或实施例3代替。此外,不基于实际出现的分支来学习,例如如实施例4-6中所示,可以采用不具有学习前提的静态表或者采用动态表和静态表的组入口 ο
[0143]〈动态指令预取计数表+分支预测单元〉
[0144]图12是示出作为根据实施例1的指令获取地址发生器11的结构的另一实例的具有分支预测的组合的实例的框图。除了图7所示的结构之外,指令获取地址发生器11包括分支预测单元19。分支预测是在确定分支是否实际出现之前通过指令获取单元10预测可能结果的技术,并且当预测出现分支时,推测性地获取关于分支目的地的指令。当分支预测成功时,经由选择器6和触发器7,预测的分支目的地地址被提供给指令高速缓存20作为指令预取请求地址。当分支预测成功时,不发生作为上述发布之一的不必要的推测性指令获取。因此,在对分支出现的分支预测结果正确的情况下,消除针对指令预取计数表2的写入,从而减少了条目的占用。
[0145]图12示出了根据图7所示实施例1的指令获取地址发生器11中结合分支预测单元19的结构的实例。然而,可以在根据以下描述的任意一个实施例的指令获取地址发生器11中类似地结合分支预测单元19。
[0146](实施例2)
[0147]〈分支请求单元通过计数器计算指令预取计数〉
[0148]图13是示出根据实施例2的处理器100以及安装在其中的指令获取地址发生器11的结构的实例的框图。根据图7所示实施例1的处理器100是其中指令获取地址发生器11计算与分支目的地地址相对应的指令预取计数的结构的实例。然而,在根据实施例2的处理器100中,在处理执行单元30中设置计算指令预取计数的电路。如图1的情况中那样,处理器100包括指令获取单元10、指令预取缓冲器20、处理执行单元30和存储器40,并且指令预取缓冲器20和存储器40经由总线41相互耦合。图13仅示出了包括在指令获取单元10中的指令获取地址发生器11、用作指令预取缓冲器20的指令高速缓存20以及处理执行单元30。在图中没有示出其他元件。
[0149]处理执行单元30包括指令队列31、指令解码器32和分支请求单元33。分支请求单元33包括边界外指令获取计数器34,并将分支请求、分支目的地地址和分支间距离提供给指令获取地址发生器11。分支请求单元33基于从指令解码器32提供的程序计数值PC和解码结果来输出分支请求和分支目的地地址。监控此时提供的程序计数值PC,并且通过边界外指令获取计数器34对超过指令获取边界而不出现分支的数量进行计数。这里,指令获取边界是指令高速缓存20的高速缓存线的地址边界。程序计数值PC随后被递增而不出现分支,并且等到出现下一分支时超过指令获取边界的计数是与所关注的分支目的地地址相对应的分支间距离,并且其用作适当的指令预取计数。当出现分支时,分支请求单元33输出分支的分支目的地地址和分支请求。此外,分支请求单元33输出边界外指令获取计数器34的计数值作为分支间距离,并且复位边界外指令获取计数器34。
[0150]如图7的情况中那样,指令获取地址发生器11包括触发器7、选择器6、地址加法器
5、地址生成控制器4和指令预取控制器8。指令预取控制器8设置有指令预取计数表2和分支目的地地址保持寄存器12,但是不设置有指令获取计数计算单元13。在分支出现时的表写入的情况下,保持在分支目的地地址保持寄存器12中的分支目的地地址和从处理执行单元30提供的分支间距离被写入指令预取计数表2中。
[0151]其他结构和操作与引用图7和其他附图的实施例1相同。因此,省略对其的解释。
[0152]根据该结构,通过分支请求单元33中的计数器34来计算指令预取计数。因此,指令获取地址发生器11中的指令获取计数计算单元13变得不需要;因此,可以通过小电路规模正确地学习指令预取计数。
[0153](实施例3)
[0154]〈指令获取地址发生器通过计数器计算指令预取计数〉
[0155]图14是示出根据实施例3的指令获取地址发生器11的结构的实例的框图。作为图13中的分支请求单元33中设置的边界外指令获取计数器34的替换,指令获取计数器14被设置在指令获取地址发生器11的指令获取控制器8中。通过出现分支时确认的分支请求来复位指令获取计数器14,并且对等到出现下一分支时由地址生成控制器4请求的指令获取请求地址的发布的次数进行计数。在分支出现时的表写入的情况下,保持在分支目的地地址保持寄存器12中的分支目的地地址和指令获取计数器14的计数值被写入指令预取计数表2中。
[0156]其他结构和操作与引用图7和其他附图的实施例1相同。因此,省略对其的解释。
[0157]在实施例2的结构的实例中,基于实际执行指令解码的指令的数量来计算分支间距离,并且计算将被学习的指令预取计数。相反,在实施例3的结构的实例中,基于发布指令预取请求的计数来计算将被学习的指令预取计数。由于在实际指令执行之前执行指令预取,所以通过实施例3的结构实例计算的指令预取计数与实施例2的情况相比可能增加。例如,在实施例3的结构实例中,当多次执行指令预取时,在实际包括在第一预取中的指令中出现分支。这是如上所述的情况。在实施例3的结构实例中,所请求的指令预取的数量变成将被学习的指令预取计数。然而,在实施例2的情况下,分支实际出现的第一次预取变成指令预取计数。以这种方式,与实施例2的情况相比,发生更多推测性获取请求,并且执行更多的推测性获取;因此,与实施例2的情况相比,指令尚速缓存命中的机会增加,并且可以提尚性能。
[0158](实施例4)
[0159]〈静态指令预取计数表〉
[0160]至此主要对包括动态指令预取计数表2的实施例进行解释,其中动态指令预取计数表2基于实际出现的分支计算分支间距离并且适应性地学习与分支目的地地址相对应的指令预取计数。然而,并不是图1所示的预取计数表I必须包括动态指令预取计数表2。
[0161]图15是示出根据实施例4的指令获取地址发生器11的结构的实例的框图。如图7的情况中那样,指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址生成控制器4和指令预取控制器8。指令预取控制器8设置有静态指令预取计数表3和选择器15来代替指令预取计数表2。然而,不同于图7,没有设置分支目的地地址保持寄存器12和指令获取计数计算单元13。通过数据总线访问来执行针对静态指令预取计数表3的表写入。即,通过处理执行单元30执行的存储指令等写入值。通过实际出现的分支的分支目的地地址,读取对应的指令预取计数,触发器7和选择器6以及地址加法器5被地址生成控制器4控制,并且读取的计数的指令预取请求被发布给指令高速缓存20。这些点与实施例1中解释的操作相同。在实际出现的分支的分支目的地地址在静态指令预取计数表3中没有命中的情况下,通过选择器15提供默认值。
[0162]根据该结构,指令获取地址发生器11不需要包括学习功能。以上电顺序,例如在预先计算每个分支目的地地址、对应的分支间距离和指令预取计数之后,基于将被执行的程序的可执行文件的离线分析的结果,分支目的地地址和对应的指令预取计数被写入静态指令预取计数表3中。可选地,还优选通过诸如操作系统的软件执行动态监控,以计算并写入适当的指令预取计数。
[0163](实施例5)
[0164]〈静态指令预取计数表1+动态指令预取计数表〉
[0165]优选地,适当地设置和使用动态指令预取计数表2和静态指令预取计数表3二者。
[0166]图16是示出根据实施例5的指令获取地址发生器11的结构的实例的框图。如图15的情况中那样,指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址生成控制器4和指令预取控制器8。指令预取控制器8设置有静态指令预取计数表3和选择器15,并且进一步设置有分支间距离检测单元17和动态指令预取计数表2。分支间距离检测单元17是计算适合于实际出现的分支的分支目的地地址的指令预取计数并执行动态指令预取计数表2的表写入的电路。分支间距离检测单元17可以是实施例1-3所示的电路或者其他分支间距离检测电路。选择器15从动态指令预取计数表2中读取的指令预取计数、静态指令预取计数表3中读取的指令预取计数或默认值中选择一个,并将其提供给地址生成控制器4。
[0167]在执行表写入的过程中,当与当前写入静态指令预取计数表3的标签一致的条目也被写入动态指令预取计数表2时,成为双重寄存。在这种情况下,可以进行控制以通过在表参考时以更高的优先级参考内容或者通过在写入动态指令预取计数表2时确认静态指令预取计数表3的标签来抑制重复写入。
[0168]例如通过软件预先为静态指令预取计数表3设置表的内容。在请求分支时,从动态指令预取计数表2和静态指令预取计数表3 二者中读取指令预取计数,并且选择器15选择其中一个。如果在任何指令预取计数表中都没有命中,则选择器15选择默认值。优选地,通过利用分支分类的算法(诸如常规分支/中断/例外情况)来控制选择器15进行的选择。如果中断或例外情况处理的分支不频繁出现,则将从动态指令预取计数表2中溢出关于分支目的地地址和对应指令预取计数的信息(伴随中断和例外情况处理)。然而,可以通过采用关于静态地获知分支间距离的静态指令预取计数表2的内容来更加有效地优化指令预取计数。
[0169]实施例1-3示出了动态指令预取计数表2的初始状态为空的模式。然而,还优选地采用如上所述的模式,其中静态地已知分支间距离的内容被写入作为上电时的初始状态。根据该结构,可以避免在动态指令预取计数表3学习之前总线41被关于分支的指令预取不必要地占用。
[0170](实施例6)
[0171]〈指令预取计数表是具有掩码的相联存储器〉
[0172]图17是示出根据实施例6的指令获取地址发生器11的结构的实例的框图。如图15的情况中那样,指令获取地址发生器11包括触发器7、选择器6、地址加法器5、地址生成控制器4和指令预取控制器8。然而,除指令预取控制器8和地址生成控制器4之外的元件在附图中没有示出。指令预取控制器8设置有静态指令预取计数表3、多个条目命中确定电路18和指令预取计数选择电路16。
[0173]图18是示出安装在根据实施例6的指令获取地址发生器11中的静态指令预取计数表3的相联存储器中的条目的结构实例的解释图。静态指令预取计数表3配置有多个条目,每个条目均包括有效标志V、标签(Tag)、对应指令预取计数和附加掩码(Mask)字段。
[0174]当在分支请求时输入分支目的地地址并参考静态指令预取计数表3时,针对每个条目设置的条目命中确定电路18生成具有分支目的地地址和掩码(Mask)字段的核对地址,并执行核对地址(ChkAddr)和标签(Tag)的一致性比较。即,在配置所输入的分支目的地地址的位中,部分位通过掩码(Mask)字段抵消(屏蔽)并且剩余有效位与标签进行比较。指令预取计数选择电路16选择存储在命中条目中的指令预取计数,并将其提供给地址生成控制器4 ο
[0175]输出同一指令预取计数的多个分支目的地地址可以统一寄存至一个条目。因此,可以抑制缩小静态指令预取计数表3的电路规模(条目的数量)。
[0176](实施例7)
[0177]〈指令码生成设备(编译器+链接器))
[0178]图19是示意性示出根据实施例7的指令码生成设备50的结构的实例的解释图。指令码生成设备50生成在实施例1-6中解释的处理器100执行的程序的指令码。尽管没有具体限制,但指令码生成设备50例如包括编译器51和链接器52。编译器51被提供有以高级语言描述的程序61,并生成对象文件62。链接器52根据由编译器51生成的对象文件62和保持在指令码生成设备50中的库对象文件63生成可执行指令码(可执行文件)64。
[0179]在实施例7中,指令码生成设备50还计算并输出静态指令预取计数信息65。例如,计算方法为分析对其执行地址映射的指令码。当包括在对象文件62中的每个例行程序被映射至地址空间中时,关于包括在例行程序中的分支指令,链接器52首先计算从分支目的地地址到配置另一分支指令的地址的距离作为分支间距离,并且基于分支间距离计算静态指令预取计数信息65。
[0180]所计算的静态指令预取计数信息65被写入安装在实施例4-6中解释的处理器中100中的静态指令预取计数表3。可选地,所计算的静态指令预取计数信息65可以被写入安装在实施例1-3和5中解释的处理器100中的动态指令预取计数表2作为初始值。
[0181]〈通过具有掩码的相联存储器与指令预取计数表协作〉
[0182]在如实施例6所解释的,静态指令预取计数表3配置有具有掩码(Mask)字段的相联存储器的情况下,优选地,指令码生成设备50具有以下功能以充分利用该特征。
[0183]图20是示意性示出由链接器52生成的可执行文件64的实例的解释图。当通过链接器52生成可执行文件64时,具有类似大小或相同的优化指令预取计数的多个例行程序被统一映射到彼此相邻的地址区域中。所示可执行文件64是其中在低阶地址处映射小尺寸例行程序且在高阶地址处映射大尺寸例行程序的实例。分别在地址0x0000、地址0x0010和地址0x0020处映射例行程序O(RoutineO)、例行程序I (Routinel)和例行程序2(Routine2)。例如,这些例行程序0-2(ROutine0-2)是小尺寸例行程序,其分支间距离小于16个地址且具有为I的适当指令预取计数。分别在地址0x0800和地址0x0840处映射例行程序20(Routine20)和例行程序21 (Routine21)。例如,这些例行程序20-21 (Routine20_21)是中尺寸例行程序,其分支间距离小于1024个地址并具有为4的适当指令预取计数。分别在地址0x1000和地址0x1800处映射例行程序50(Routine50)和例行程序51 (Routine51)。这些例行程序50-51(Routine50-51)是大尺寸例行程序,其分支间距离近似为2024个地址。
[0184]图21是示意性示出由链接器52生成的静态指令预取计数信息65的实例的解释图。通过可执行文件64的映射获取的上述指令预取计数被输出作为具有实施例6所示的标签(Tag)字段和掩码(Mask)字段的静态指令预取计数信息65。可以在开始程序执行时通过将静态指令预取计数信息65传输至实施例6所示的具有掩码(Mask)字段的静态指令获取计数表3来执行适当的指令预取。
[ΟΙ85] 具有标签(Tag) =0x00、掩码(Mask) = OxFC和指令预取计数=I的图21所示第一行处的条目在低阶2位处由掩码(Mask) = OxFC掩蔽,命中高阶为标签(Tag) = 0x00的分支目的地地址,并输出指令预取计数=1。在图20所示的实例中,例行程序(KRoutineO)、例行程序I(Routinel)和例行程序2(Routine2)的头部地址0x0000、0x0010和0x0020是对应的分支目的地地址,并且均满足上述条件。因此,它们命中图21所示第一行的条目,并且读取指令预取计数=I。具有标签(Tag) = 0x08、掩码(Mask) =0xF8和指令预取计数=4的图21所示第二行处的条目在低阶3位处由掩码(Mask) =0xF8掩蔽,命中高阶为标签(Tag) =0x08的分支目的地地址,并输出指令预取计数=4。在图20所示的实例中,例行程序20(Routine20)和例行程序21 (Routine21)的头部地址0x0800和0x0840是对应的分支目的地地址,并且均满足上述条件。因此,它们命中图21所示第二行的条目,并且读取指令预取计数=4。以这种方式,对于第一行的条目,对应于至少三个不同的分支目的地地址的指令预取计数被统一寄存,并且对于第二行的条目,对应于至少两个不同的分支目的地地址的指令预取计数被统一寄存。因此,可以抑制缩小静态指令预取计数表3的电路规模(条目的数量)。
[0186]当通过链接器52生成可执行文件64时,具有类似大小或相同的优化指令预取计数的例行程序被统一映射到相互相邻的地址空间中。因此,使得可寄存到一个条目中的例行程序的数量被最大化。
[0187]本实施例示出了其中生成指令预取计数信息65的功能被添加至链接器52的实例。这种功能可以设置为添加至常规链接器的插入软件,或者可以设置为其中输入通过常规链接器生成的可执行文件64的独立软件。
[0188]如上所述,基于实施例具体解释了由本发明人完成的本发明。然而,没有重点强调本发明不限于上述实施例,而是可以在不偏离精神的范围内进行各种变化。
[0189]例如,实施例1-6中引用的框图中的功能块的划分和功能块的命名仅是为了方便。因此,在不偏离整体精神的范围中,可以适当地统一、分离或重新组织功能块所实施的功能,并且结合于此改变名称。仅具有指令高速缓存、总线和存储器的结构被示为处理器100。然而,可以将结构变为多层级高速缓存存储器、不分离指令和数据的单一高速缓存以及层级总线架构,并且可以适当地安装一般安装在处理器中的其他功能块。
【主权项】
1.一种处理器,包括: 指令预取缓冲器,操作为从存储器预取具有连续地址的指令组; 处理执行单元,操作为从所述指令预取缓冲器中读取指令并执行所述指令;以及 指令获取地址发生器, 其中,所述指令获取地址发生器包括: 表,操作为存储指令的指令预取量,以使所述指令预取缓冲器与所述处理执行单元中出现的分支的分支目的地地址相关联地执行预取,并且 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器参考所述表来计算与所出现的分支的所述分支目的地地址相对应的指令预取量,并使所述指令预取缓冲器预取所计算的所述指令预取量的指令,包括所关注的分支目的地地址的指令。2.根据权利要求1所述的处理器, 其中,当在所述处理执行单元中出现分支时,所述指令获取地址发生器基于在所出现的分支的所述分支目的地地址与紧接在所关注的分支之后出现的分支的地址之间的差异来重写所述表的与所关注的分支目的地地址相对应的所述指令预取量。3.根据权利要求1所述的处理器, 其中,当所述处理执行单元执行指定指令时,所述分支目的地地址和对应的所述指令预取量被写入所述表中。4.根据权利要求3所述的处理器, 其中,所述表被定义为静态表, 其中,所述指令获取地址发生器还包括: 动态表,操作为存储指令的指令预取量,以使所述指令预取缓冲器与所述处理执行单元中出现的分支的分支目的地地址相关联地执行预取, 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器基于在所出现分支的分支目的地地址与紧接在所述关注分支之后出现的分支的地址之间的差异来重写所述动态表的与所关注的分支目的地地址相对应的所述指令预取量,并且 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器参照所述静态表和所述动态表中的至少一个来计算与所出现分支的所述分支目的地地址相对应的所述指令预取量,并且使所述指令预取缓冲器预取所计算的指令预取量的指令,包括所关注的分支目的地地址的指令。5.根据权利要求2所述的处理器, 其中,所述指令获取地址发生器还包括: 分支预测单元,并且 其中,当所述处理执行单元中出现分支且所述分支预测单元的分支预测成功时,所述指令获取地址发生器停止向所述表重写与所关注的分支目的地地址相对应的所述指令预取量。6.—种处理器,包括: 指令高速缓存; 处理执行单元;以及 指令获取地址发生器, 其中,所述指令高速缓存保持多条线,每条线包括预定数量的指令码,并且针对从所述指令获取地址发生器提供的每个指令预取请求地址从存储器中预取一条线的指令码, 其中,所述处理执行单元从所述指令高速缓存读取并执行包括预定数量的指令码的指令, 其中,所述指令获取地址发生器包括: 指令预取计数表,操作为存储指令预取计数,以使所述指令高速缓存与所述处理执行单元中出现的分支的分支目的地地址相关联地执行预取,并且 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器参照所述指令预取计数表来计算与包括所出现分支的所述分支目的地地址的指令预取请求地址相对应的指令预取计数,并且顺序地向所述指令高速缓存提供从所关注的指令预取请求地址开始继续并且数量上对应于所计算的指令预取计数的所述指令预取请求地址。7.根据权利要求6所述的处理器, 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器基于在所出现分支的所述分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写所述指令预取计数表的与所关注的分支目的地地址相对应的所述指令预取计数。8.根据权利要求7所述的处理器, 其中,所述处理执行单元包括: 分支请求单元,操作为当出现分支时向所述指令获取地址发生器提供所出现分支的分支源地址和分支目的地地址, 其中,所述指令获取地址发生器保持所提供的分支目的地地址,并且基于通过从紧接在所关注分支之后出现分支时提供的分支源地址中减去当前保持的分支目的地地址得到的差异来重写保持在所述指令预取计数表中且对应于所述分支目的地地址的指令预取计数。9.根据权利要求7所述的处理器, 其中,所述处理执行单元包括: 分支请求单元, 其中,当所述处理执行单元中出现分支时,所述分支请求单元向所述指令获取地址发生器提供所出现分支的所述分支源地址, 其中,所述分支请求单元包括: 计数器,操作为在所述处理执行单元中出现分支时开始计数,并且操作为对由所述处理执行单元执行的指令的地址超过与所述指令高速缓存的一条线相对应的地址边界的次数进行计数, 其中,所述分支请求单元向所述指令获取地址发生器提供紧接在所关注分支之后出现分支时的时间处的计数值作为分支间距离,并且 其中,所述指令获取地址发生器保持所提供的分支目的地地址,并且基于当紧接在所关注分支之后出现分支时提供的所述分支间距离来重写与所保持的所述分支目的地地址相对应的所述指令预取计数。10.根据权利要求7所述的处理器, 其中,所述处理执行单元包括: 分支请求单元, 其中,当所述处理执行单元中出现分支时,所述分支请求单元向所述指令获取地址发生器提供所出现分支的所述分支源地址, 其中,所述指令获取地址发生器包括: 寄存器,操作为保持所提供的分支目的地地址;以及 计数器,操作为在提供所述分支目的地地址时开始计数,并且操作为对将指令预取请求地址提供给所述指令高速缓存的次数进行计数,并且 其中,所述指令获取地址发生器将在所关注分支之后提供下一分支目的地地址时的所述计数器的计数值写入所述指令预取计数表作为与保持在所述寄存器处的分支目的地地址相对应的指令预取计数。11.根据权利要求6所述的处理器, 其中,当所述处理执行单元执行指定指令时,所述分支目的地地址和对应的所述指令预取计数被写入所述指令预取计数表中。12.根据权利要求11所述的处理器, 其中,所述指令预取计数表被定义为静态指令预取计数表, 其中,所述指令获取地址发生器还包括: 动态指令预取计数表, 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器基于在所出现分支的所述分支目的地地址与紧接在所关注分支之后出现的分支的地址之间的差异来重写所述动态指令预取计数表的与所关注的分支目的地地址相对应的所述指令预取计数, 其中,当所述处理执行单元中出现分支时,所述指令获取地址发生器参照所述静态指令预取计数表和所述动态指令预取计数表中的至少一个来计算与所出现分支的所述分支目的地地址相对应的所述指令预取计数,并且顺序地向所述指令高速缓存提供包括所出现分支的所述分支目的地地址的指令预取请求地址,并且所述指令预取请求地址从所关注的指令预取请求地址开始继续并且在数量上对应于所计算的指令预取计数。13.根据权利要求7所述的处理器, 其中,所述指令获取地址发生器还包括: 分支预测单元,并且 其中,当所述处理执行单元中出现分支且所述分支预测单元的分支预测成功时,所述指令获取地址发生器停止重写所述指令预取计数表的与所关注的分支目的地地址相对应的所述指令预取量。14.根据权利要求6所述的处理器, 其中,所述指令预取计数表是提供有所述分支目的地地址且输出对应的指令预取计数的相联存储器。15.根据权利要求14所述的处理器, 其中,用作所述指令预取计数表的所述相联存储器包括: 多个条目,每一个条目都包括标签、掩码和指令预取计数,并且其中,所述相联存储器输出存储在条目中的当所输入的所述分支目的地地址的部分位通过所述掩码被抵消时与所述标签一致的指令预取计数,作为与所输入的所述分支目的地地址相对应的指令预取计数。16.—种指令码生成设备,操作为生成提供给处理器的程序的指令码,所述处理器包括指令预取缓冲器和指令获取地址发生器, 其中,所述指令获取地址发生器包括: 表,操作为存储指令的指令预取量,以使所述指令预取缓冲器与所出现分支的分支目的地地址相关联地执行预取, 其中,当出现分支时,所述指令获取地址发生器使得所述指令预取缓冲器预取与所关注的分支目的地地址相对应的所述指令预取量的指令,包括所出现分支的所述分支目的地地址,并且 其中,所述指令码生成设备根据所述程序生成可执行指令码,并且基于在分支指令的所述分支目的地地址与所述指令码中配置的下一分支指令的地址之间的差异来计算与所关注的分支目的地地址相对应的所述指令预取量。17.根据权利要求16所述的指令码生成设备, 其中,所述指令预取缓冲器是指令高速缓存,并且所述指令预取量由指令预取计数指定,以将所述指令码预取至所述指令高速缓存的高速缓存线。18.根据权利要求17所述的指令码生成设备, 其中,所述表是相联存储器,所述相联存储器包括: 多个条目,每一个条目都包括标签、掩码和指令预取计数,并且输出存储在条目中的当所输入的所述分支目的地地址的部分位通过所述掩码被抵消时与所述标签一致的指令预取计数,作为与所输入的所述分支目的地地址相对应的指令预取计数,并且 其中,所述指令码生成设备执行所述指令码的地址映射,以在其中一些地址位是公共的地址空间中配置具有对应指令预取计数的相同值的多个分支目的地地址,并且通过将公共地址位定义为标签、将抵消其他地址位的位串定义为掩码以及将所述相同值定义为指令预取计数,来包括将被提供给所述相联存储器的一个条目。19.根据权利要求16所述的指令码生成设备, 其中,所述指令码生成设备被提供有以高级语言描述的程序,并且包括: 编译器,用于生成对象文件; 库对象文件;以及 链接器,操作为根据由所述编译器生成的所述对象文件和所述库对象文件生成可执行指令码,并且 其中,所述链接器计算并输出与分支目的地地址相对应的指令预取量。
【文档编号】G06F9/34GK105930136SQ201610101924
【公开日】2016年9月7日
【申请日】2016年2月24日
【发明人】山下源, 龟井达也
【申请人】瑞萨电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1