处理器的预取训练方法、处理装置、处理器和计算设备与流程

文档序号:29700844发布日期:2022-04-16 14:24阅读:81来源:国知局
处理器的预取训练方法、处理装置、处理器和计算设备与流程

1.本公开的一些实施例处理器的技术领域,具体地,涉及一种处理器的预取训练方法、处理装置、处理器和计算设备。


背景技术:

2.在中央处理器(central processing unit,cpu)架构中,程序指令与数据一般存储在诸如动态随机存取存储器(dynamic random access memory,dram)的内存中。通常,cpu的核心(core)的运行频率高于内存的运行频率,因此,cpu从内存直接获取数据需要等待诸如上百个cpu时钟周期,这将会造成cpu由于无法继续处理相关指令或数据而产生空转,造成性能损失。因此,现代高性能cpu通常设置有多级缓存(cache)架构,以存储最近被访问的数据。同时,针对多级缓存架构,还可以利用预取器来识别cpu访问数据的规律,提前地将可能被访问的数据预取到多级缓存架构的其中一级缓存中,以使得cpu能更快速地从缓存中读取数据。


技术实现要素:

3.本公开的一些实施例提供了一种处理器的预取训练方法、处理装置、处理器和计算设备,用于提高预取效率以及预取准确性。
4.根据本公开的一方面,提供了一种处理器的预取训练方法,包括:对第一微指令进行拆分以得到n个子请求,其中,n为大于1的正整数;将n个子请求经微指令处理流水线的处理;以及将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练。
5.根据本公开的一些实施例,微指令处理流水线连续地处理n个子请求。
6.根据本公开的一些实施例,存储地址根据对齐数据宽度被划分为多个对齐数据范围,对第一微指令进行拆分以得到n个子请求包括:基于第一微指令的地址、第一微指令所对应的访问数据宽度以及对齐数据宽度,将第一微指令拆分成n个子请求。
7.根据本公开的一些实施例,基于第一微指令的地址、第一微指令所对应的访问数据宽度以及对齐数据宽度,将第一微指令拆分成n个子请求包括:基于第一微指令的地址确定第一微指令所对应的当前对齐数据范围;基于第一微指令所对应的访问数据宽度,确定第一微指令所访问的数据是否超出当前对齐数据范围;以及在确定超出的情况下,将第一微指令拆分成n个子请求。
8.根据本公开的一些实施例,合并属性包括用于指示是否命中缓存的合并缓存命中特征,其中,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列包括:将n个子请求中的每个子请求在微指令处理流水线中经处理获得的缓存命中特征进行合并以得到合并缓存命中特征,并将合并缓存命中特征写入地址输入队列。
9.根据本公开的一些实施例,缓存命中特征包括命中缓存和不命中缓存,其中,在n个子请求中的至少一个子请求的缓存命中特征为不命中缓存的情况下,合并缓存命中特征
为不命中缓存,在n个子请求中的每个子请求的缓存命中特征均为命中缓存的情况下,合并缓存命中特征为命中缓存。
10.根据本公开的一些实施例,合并属性还包括第一微指令的地址以及第一微指令所对应的访问数据宽度。
11.根据本公开的一些实施例,第一微指令为具有访存操作的微指令,由第一微指令拆分得到的n个子请求为具有访存操作的子请求,其中,将n个子请求经微指令处理流水线的处理包括:利用微指令处理流水线根据n个子请求中的每个子请求进行数据访存处理。
12.根据本公开的一些实施例,该训练预取方法还包括:将第二微指令经微指令处理流水线的处理;以及将第二微指令的属性写入地址输入队列,以使得预取器基于第二微指令的属性进行预取训练。
13.根据本公开的另一方面,还提供了一种执行预取训练的处理装置,包括:拆分单元,配置成对第一微指令进行拆分以得到n个子请求,其中,n为大于1的正整数;处理单元,配置成将n个子请求经微指令处理流水线的处理,并将n个子请求的属性合并后得到的合并属性写入用于预取单元的地址输入队列,以使得预取单元基于合并属性进行预取训练。
14.根据本公开的一些实施例,处理装置还包括预取单元,预取单元配置成基于合并属性进行预取训练。
15.根据本公开的一些实施例,微指令处理流水线连续地处理n个子请求。
16.根据本公开的一些实施例,存储地址根据对齐数据宽度被划分为多个对齐数据范围,为了得到n个子请求,拆分单元配置成:基于第一微指令的地址、第一微指令所对应的访问数据宽度以及对齐数据宽度,将第一微指令拆分成n个子请求。
17.根据本公开的一些实施例,为了得到n个子请求,拆分单元配置成:基于第一微指令的地址确定第一微指令所对应的当前对齐数据范围;基于第一微指令所对应的访问数据宽度,确定第一微指令所访问的数据是否超出当前对齐数据范围;以及在确定超出的情况下,将第一微指令拆分成n个子请求。
18.根据本公开的一些实施例,合并属性包括用于指示是否命中缓存的合并缓存命中特征,其中,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列包括:将n个子请求中的每个子请求在微指令处理流水线中经处理获得的缓存命中特征进行合并以得到合并缓存命中特征,并将合并缓存命中特征写入地址输入队列。
19.根据本公开的一些实施例,缓存命中特征包括命中缓存和不命中缓存,其中,在n个子请求中的至少一个子请求的缓存命中特征为不命中缓存的情况下,合并缓存命中特征为不命中缓存,在n个子请求中的每个子请求的缓存命中特征均为命中缓存的情况下,合并缓存命中特征为命中缓存。
20.根据本公开的一些实施例,合并属性还包括第一微指令的地址以及第一微指令所对应的访问数据宽度。
21.根据本公开的一些实施例,第一微指令为具有访存操作的微指令,由第一微指令拆分得到的n个子请求为具有访存操作的子请求,其中,为了将n个子请求经微指令处理流水线的处理,处理单元配置成:利用微指令处理流水线根据n个子请求中的每个子请求进行数据访存处理。
22.根据本公开的一些实施例,处理单元还配置成将第二微指令经微指令处理流水线
的处理,并将该第二微指令的属性写入地址输入队列,以使得预取器基于第二微指令的属性进行预取训练。
23.根据本公开的又一方面,还提供了一种处理器,包括:微指令处理队列,其中,微指令处理队列包括多个微指令,多个微指令中的第一微指令被拆分以得到n个子请求,其中,n为大于1的正整数;微指令处理流水线,配置成对n个子请求进行处理,并将n个子请求的属性合并后得到的合并属性写入地址输入队列;以及预取器,配置成基于地址输入队列中的合并属性进行预取训练。
24.根据本公开的又一方面,还提供了一种计算设备,包括:处理器;和存储器,其中,存储器中存储有计算机可读代码,计算机可读代码在由处理器运行时,执行如上所述的处理器的预取训练方法。
25.本公开一些实施例提供的处理器的预取训练方法、处理装置、处理器和计算设备,对于由第一微指令拆分得到的n个子请求,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练,从而避免使用拆分后得到的子请求的属性写入地址输入队列。由此,本公开一些实施例能够对拆分后的子请求的属性进行合并,并将合并后的属性写入地址输入队列,即,恢复初始的微指令级属性,简化地址输入队列的写入资源,避免地址输入队列的资源浪费,并使得简化预取器的预取训练过程,更有利于预取器基于初始的微指令级属性来发现数据预取规律,提升预取准确性,还能够提高预取效率并进一步提升处理器的运行效率。
附图说明
26.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
27.图1示出了处理器中指令的处理流程的示意图;
28.图2示出了微架构级微指令拆分的示意性图;
29.图3示出了根据本公开一些实施例的预取训练方法的示意性流程图;
30.图4示出了根据本公开一些实施例的地址输入队列写入过程示意图;
31.图5示出了根据本公开一些实施例的执行预取训练的处理装置的示意性框图;
32.图6示出了根据本公开一些实施例的处理器的示意性框图;
33.图7示出了根据本公开一些实施例的计算设备的示意性框图;
34.图8示出了根据本公开一些实施例的计算设备架构示意图。
具体实施方式
35.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
36.此外,如本公开和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一
个”、“一种”和/或“该”等词并非特指单数,也可包括复数。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。除非另有定义,本文中使用的所有术语具有与本公开所属领域的普通技术人员共同理解的相同含义。
37.处理器(诸如,cpu)核心(core)的运行频率远远高于dram内存的运行频率(可以理解的是,cpu中可以包括一个或多个核心),由此,处理器核心从内存直接获取数据与程序指令需要等待上百个处理器的时钟周期。为了避免直接地从内存访问数据所带来的时间延迟,通常配置有多级缓存。缓存可以是指数据访问速度较快的高速存储器,其先于内存与处理器进行数据交换,缓存的设置使得计算机系统能够发挥出更高的性能。可以理解的是,处理器可以是上述cpu,也可以是其他类型的处理器,诸如,图形处理器(graphics processing unit,gpu)等,对此不作限制。
38.总的来说,处理器读取数据的顺序是先缓存后内存。当处理器需要访问某一数据时,首先在缓存中进行查找,如果数据存在于缓存中,则立即读取并发送给处理器进行处理,如果数据并未存在于缓存中,则从访问速率相对较慢的内存中读取数据并发送给处理器进行处理,同时把这个数据所在的数据块调入缓存,从而使得在后续阶段处理器对整块数据的读取都从缓存中进行,而不必再调用内存。这样的读取机制使得处理器读取缓存的命中率比较高,也就是说处理器下一次要读取的数据较大概率都存在于缓存中,只有少部分需要从内存中读取。这大大节省了处理器直接读取内存的时间,也使得处理器读取数据时基本无需等待。
39.数据预取是进一步提升处理器运行效率的关键技术之一。由于缓存只能保存最近被访问过的数据,当处理器需要读取从未被访问的数据或是由于缓存大小限制而被替换出缓存的数据时,处理器仍然需要等待数十甚至上百个时钟周期以从内存读取数据,这将造成性能损失。通过分析以往访问规律,预取器能够针对触发预取的请求地址生成合适的预取请求地址,以提前地将可能被使用的数据预取到缓存中,从而减少处理器等待数据的时钟周期,并提升处理器整体性能。
40.图1示出了处理器中指令的处理流程的示意图。其中,关于处理器描述的步骤可以理解为处理器的核心所涉及的步骤。指令可以是用于指示处理器执行某种操作的命令,其由一串二进制数组成。作为示例,该指令可以是具有访存操作的指令,即,用于访问或存储数据的指令,例如,访存指令(load/store)。下文中,将以指令为具有访存操作的指令作为一种具体示例来描述根据本公开的一些实施,可以理解的是,也可以是其他类型的指令。
41.如图1所示,首先进行取指,并将取出的指令传递至译码单元。接着,由译码单元将指令翻译为处理器内部执行的微指令。具体的,在这种翻译过程中,指令与微指令之间可能是一对一,也可能是一对多。也就是说,译码单元可能将一个指令翻译为一个微指令,也可能翻译为多个微指令。例如,该指令可以是指具有访存操作的指令,则译码单元翻译得到的微指令为具有访存操作的微指令。
42.接着,微指令在经过地址计算之后,将进入处理队列。其中,在微指令为具有访存
操作的微指令的情况下,此处的处理队列为访存处理队列。具体的,处理队列中的微指令被挑选出来进入微指令处理流水线(例如,访存处理流水线),以基于缓存进行数据访问。为了进一步地提高处理器的数据访问速率、缩短数据处理时间,提出利用预取器来从历史访问的地址序列中寻找规律,并基于此规律,进行数据预取,即提前预测未来可能的访问地址,并基于该地址进行数据缓存。
43.预取器是独立于处理队列和流水线的结构,其输入来自于流水线中正在处理的微指令的属性。微指令的属性将首先被写入地址输入队列,然后由预取器从该地址输入队列中取出相关信息,一方面用来训练预取器,即,用来发现地址序列中的数据访问规律,另一方面用来基于已经发现的数据访问规律产生预测地址,产生的预测地址可以用来提前从下一级缓存或者内存中把数据搬移到本级数据缓存。预取器发现地址序列中的数据访问规律的过程可以称为训练过程(或者也可以称为测试过程),而基于训练过程产生的规律进行数据预取的过程可称为预取过程。在处理器的运行阶段,该训练过程与预取过程是持续、并行进行的。
44.具体的,上述属性可以包括写入地址输入队列的例如微指令的地址,还可以包括该微指令的大小、缓存命中特征等,其中,该微指令的大小表示为该访微指令所对应处理的数据宽度。具体的,缓存命中特征可以是在流水线中执行后获得的结果,即,是否命中缓存。例如,如果该微指令所对应的数据存在于缓存中则表示为命中(hit),如果不存在于缓存中则表示为不命中(miss),由此,也可以将缓存命中特征这种属性称为动态属性。
45.在相关技术中,进入处理队列中微指令在被挑选出来进入微指令处理流水线时,可能根据被进一步拆分为两个或更多个子请求,这种拆分过程可以称为微架构级拆分,经过拆分得到的子请求将分别经过流水线处理,并将各自的属性写入地址输入队列。
46.图2示出了微架构级微指令拆分的示意性图。在图2中,以地址为0x38的微指令为例,其所对应的数据宽度为256b(bit),在该微指令为具有访存操作的微指令的情况下,表示需要对以0x38存储位置为起始点开始的256b数据进行访存过程。在图2的示例中,该微指令在进入流水线之前被拆分为两个子请求,其中,第一子请求的第一地址为0x38并且其所对应的数据宽度为64b,第二子请求的第二地址为0x40并且其所对应的数据宽度为192b,类似地,第一地址0x38和第二地址0x40表示要访问的数据的起始地址。这两个子请求将经过两级流水线的处理,并分别将其各自的属性写入地址输入队列以进行预取训练。对于图2中示出的地址分别为0x138、0x238、0x338的微指令,其拆分过程可以与地址为0x38的微指令类似。
47.由此,上述微架构级指令拆分过程使得一个微指令的信息将分两次进入流水线,每个进入流水线的子请求的属性都会写入预取器的地址输入队列,触发预取器的训练和预测,这打破了拆分之前的微指令原有的地址规律,不利于预取器发现数据访问规律以进行准确预取,降低了预取器的准确性。此外,拆分后得到的多个子请求的属性将分别写入地址输入队列,例如原有一个微指令将占用地址输入队列中的一项,在拆分成两个子请求的情况下将占用地址输入队列中的两项,这浪费了地址输入队列的资源。
48.基于以上内容,本公开的一些实施例提供一种处理器的预取训练方法,用于提高预取效率以及预取准确性,避免地址输入队列的资源浪费,并进一步提升处理器的运行效率。
49.图3示出了根据本公开一些实施例的预取训练方法的示意性流程图,以下将结合图3来描述根据本公开实施例的预取训练方法的实现过程。
50.如图3所示,首先,在步骤s101,对第一微指令进行拆分以得到n个子请求。n为大于1的正整数,例如,n可以等于2,即将微指令拆分为2个子请求,这对应于以上结合图2描述的拆分情形,又例如,n还可以大于2,即将微指令拆分为多于2个子请求。下文的具体描述中,将以n等于2为例进行描述。对于此步骤s101,可以发生在图1中处理队列的微指令进入流水线的过程中。作为示例,第一微指令可以是具有访存操作的微指令,由此,由该微指令拆分得到的n个子请求可以是具有访存操作的子请求。
51.接着,在步骤s102,将n个子请求经微指令处理流水线的处理。在微指令为具有访存操作的微指令,子请求为具有访存操作的存子请求的情况下,将n个子请求经微指令处理流水线的处理可以理解为利用微指令处理流水线根据n个子请求中的每个子请求进行数据访存处理。
52.根据本公开的一些实施例,微指令处理流水线可以连续地处理上述n个子请求。以图2所示的拆分成两个子请求为例,拆分得到的第一子请求和第二子请求要进入两级流水线分别进行处理,并且通常是连续地进入流水线,也就是说流水线的某一周期处理第一子请求,下一周期处理第二子请求。在另一些实施例中,微指令处理流水线也可以不连续地处理上述拆分得到的子请求,在此不作限制。此外,对于得到的n个子请求,还可以分别增加标识信息,用于指示此n个子请求对应于拆分前的第一微指令,以在后续步骤中进行属性合并。
53.如图3所示,在步骤s103,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练。对于得到的n个子请求,例如可以分别增加标识信息,用于指示此n个子请求对应于拆分前的第一微指令,以进行属性合并。将在下文详细描述获得合并属性的过程。
54.在根据本公开一些实施例的预取训练方法中,对于由第一微指令拆分得到的n个子请求,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练,从而避免直接将拆分后得到的子请求的属性写入地址输入队列。由此,本公开一些实施例能够恢复初始的微指令级属性,减少地址输入队列的资源占用,避免地址输入队列的资源浪费,并使得简化预取器的预取训练过程,更有利于预取器基于初始的微指令级属性来发现数据预取规律,提升预取准确性,还能够提高预取效率并进一步提升处理器的运行效率。进一步地,根据本公开一些实施例提供的预取训练方法并不对现有预取器及处理器架构产生影响,便于在现有处理器中广泛应用实现。
55.根据本公开的一些实施例,上述将微指令拆分为两个或多个子请求情形可以是由例如访存对齐机制引起的。具体的,存储地址或者称为地址空间可以划分为多个固定大小的对齐数据范围(也可以表示为对齐块),例如,可以根据对齐数据宽度将地址空间划分为多个对齐数据范围。作为示例,对齐数据宽度可以是32字节,对于此情形的地址空间,0-31字节为一个对齐数据范围,32-63字节为一个对齐数据范围,64-95字节为一个对齐数据范围,以此类推。如果一个微指令所对应的数据宽度可以完整的落在某一对齐数据范围中,则称为是对齐的,如果一个微指令所对应的数据宽度跨越了两个或多个对齐数据范围,则称为是非对齐的。在处理器的处理过程中,非对齐的微指令将进一步被拆分为两个或多个子
请求,以分别处理部分数据,避免跨对齐数据范围之间的访问。作为其他示例,上述将微指令拆分为两个或多个子请求情形也可以是由其他因素引起的,在此不作限制。
56.根据本公开的一些实施例,对第一微指令进行拆分以得到n个子请求包括:基于第一微指令的地址、第一微指令所对应的访问数据宽度以及对齐数据宽度,将第一微指令拆分成n个子请求。拆分过程具体可以包括:基于第一微指令的地址确定第一微指令所对应的当前对齐数据范围;基于第一微指令所对应的访问数据宽度,确定第一微指令所访问的数据是否超出当前对齐数据范围;以及在确定超出的情况下,将第一微指令拆分成n个子请求。
57.结合图2所示出的示例,假设微指令的地址为0x38,所对应的数据宽度为256b,这可能使得产生非对齐访问的情形。基于此,可以依据微指令的地址0x38确定该微指令所对应的当前对齐数据范围,然后,基于微指令所对应的访问数据宽度256b,确定微指令所访问的数据是否超出上述确定的当前对齐数据范围(32字节),即,是否存在非对齐访问的情形。接着,在确定超出的情况下,将微指令拆分成n个子请求。例如,微指令所访问的数据有64b对应于当前对齐数据范围,剩余的192b位于下一对齐数据范围,由此,可以将该微指令拆分成两个子请求,其中,第一子请求的地址与微指令的地址相同(0x38),所对应的数据宽度为64b,第二子请求的地址为0x40,所对应的数据宽度为192b。通过将微指令拆分为两个子请求,能够使得避免流水线进行非对齐的数据访问。
58.但是,在微指令由于诸如上述非对齐访问等因素而进行了微架构级划分的情况下,经过不同级流水线处理的子请求将分别写入地址输入队列以进行预取过程,这不利于预取器从拆分前的微指令级属性来发现数据访问规律。这是由于拆分得到的n个子请求的属性等信息并非处理器初始期望访问的信息,由此使得非对齐访问等其他因素扰乱了原有的数据访问规律,造成了地址输入队列的资源浪费也增加了预取器的预测复杂性,不可避免地降低了预取准确性。
59.针对以上情形,根据本公开一些实施例提供的预取训练方法提出将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练。这改变了地址输入队列的信息写入机制。
60.图4示出了根据本公开一些实施例的地址输入队列写入过程示意图。在图4所示的示例中,微指令拆分得到两个子请求,分别为第一子请求和第二子请求。接着,微指令处理流水线可以连续地处理上述两个子请求,即,拆分得到的第一子请求和第二子请求要进入两级流水线分别进行处理,并且通常是连续地进入流水线。例如,第m级流水线首先基于第一子请求进行数据访问并得到第一属性,接着,第一子请求的处理流入第m+1级流水线,并由第m级流水线基于第二子请求进行数据访问并得到第二属性。在经流水线处理后,可以将第一子请求和第二子请求的属性进行合并以得到合并属性并将合并属性写入地址输入队列。基于此,拆分前的微指令的信息仅对地址输入队列写入一次,避免了资源浪费。
61.根据本公开的一些实施例,上述合并属性可以包括第一微指令的地址以及第一微指令所对应的访问数据宽度。此部分属性在微指令进入流水线处理之前即可以获得,例如,该微指令的地址可以是0x38,所对应的访问数据宽度是256b,也就是说,将拆分前的微指令级的属性用于进行预取训练,保留了拆分前的数据访问规律。
62.根据本公开的一些实施例,上述合并属性还可以包括用于指示是否命中缓存的合
并缓存命中特征。如上文所描述的,在经过流水线处理后,可以确定进行处理的子请求是否命中缓存,如果该请求所对应的数据存在于缓存中则表示为命中(hit),如果不存在于缓存中则表示为不命中(miss),由此,也可以将缓存命中特征这种属性称为动态属性。
63.根据本公开的一些实施例,得到合并缓存命中特征可以包括:将n个子请求中的每个子请求在微指令处理流水线中经处理获得的缓存命中特征进行合并以得到合并缓存命中特征,并将合并缓存命中特征写入地址输入队列。
64.具体的,在n个子请求中的至少一个子请求的缓存命中特征为不命中缓存的情况下,合并缓存命中特征为不命中缓存,在n个子请求中的每个子请求的缓存命中特征均为命中缓存的情况下,合并缓存命中特征为命中缓存。例如,假设上述第一子请求的缓存命中特征为命中而第二子请求的缓存命中特征为不命中,则可以理解的是,拆分前的微指令并未命中缓存。由此,此通过合并得到的合并缓存命中特征用于指示拆分前的微指令是否命中缓存的情形,由此将拆分前的微指令级的动态属性用于进行预取训练,保留了拆分前的数据访问规律。
65.作为另一示例,上述合并属性可以包括用于指示是否合并miss特征的属性,例如称为合并miss特征属性。这是由于cache之间以及cache/dram之间每次传输的粒度是cacheline,例如cacheline可以具有64字节。如果多个请求的地址落在同一个64字节的范围内,那么后面miss请求的特征可以被合并到第一个miss请求的特征上,并由第一个miss请求负责取回这条cacheline。在此情形中,合并miss特征属性可以是为第一子请求经微指令处理流水线处理得到的miss特征属性与第二子请求经微指令处理流水线处理得到的miss特征属性进行合并后得到合并miss特征属性。作为又一示例,上述合并属性可以包括上述缓存命中特征与miss特征属性两者。作为其他示例,上述合并属性还可以是用于进行预取训练的其他信息,在此不再一一列举。
66.此外,对于并未由于诸如访存对齐等因素而进一步拆分为子请求的微指令,根据本公开一些实施例的预取训练方法还可以包括:将第二微指令经微指令处理流水线的处理;以及将第二微指令的属性写入地址输入队列,以使得预取器基于第二微指令的属性进行预取训练。也就是说,对于未进行拆分的微指令,能够直接地将该微指令的属性写入地址输入队列并用于预取训练,而不进行上述合并过程。
67.通过上述以拆分前的微指令级的合并属性来进行预取训练的方案,能够减少地址输入队列的资源占用,避免地址输入队列的资源浪费,并使得简化预取器的预取训练过程,更有利于预取器基于初始的微指令级属性来发现数据预取规律,提升预取准确性,还能够提高预取效率并进一步提升处理器的运行效率。
68.利用根据本公开实施例的预取训练方法,能够提高预取准确性,而数据预取进行的越准确越能使得处理器所需要的数据尽可能地包括在缓存中,从而避免直接访问内存所需要的过长的等待时间并避免处理器空转。因此,利用根据本公开实施例的预取训练方法,能够提高处理器的运行效率。
69.根据本公开的另一方面,还提供了一种执行预取训练的处理装置。图5示出了根据本公开一些实施例的执行预取训练的处理装置的示意性框图。利用根据本公开一些实施例的执行预取训练的处理装置,能够提高预取器的预取效率以及预取准确性,从而能够灵活地响应处理器对于数据预取的需求,进一步提升处理器的运行效率。
70.如图5所示,执行预取训练的处理装置1000可以包括拆分单元1010和处理单元1020。根据本公开的一些实施例,拆分单元1010可以配置成:对第一微指令进行拆分以得到n个子请求,其中,n为大于1的正整数。例如,第一微指令可以是具有访存操作的微指令。n为大于1的正整数,例如,n可以等于2,即将第一微指令拆分为2个子请求,这对应于以上结合图2描述的拆分情形,又例如,n还可以大于2,将微指令拆分为多于2个子请求。
71.处理单元1020可以配置成将n个子请求经微指令处理流水线的处理,并将n个子请求的属性合并后得到的合并属性写入用于预取单元的地址输入队列,以使得预取单元基于合并属性进行预取训练。
72.根据本公开的一些实施例,微指令处理流水线可以连续地处理上述n个子请求。以图2所示的拆分成两个子请求为例,拆分得到的第一子请求和第二子请求要进入两级流水线分别进行处理,并且通常是连续地进入流水线,也就是说流水线的某一周期处理第一子请求,下一周期处理第二子请求。
73.如图5所示,根据本公开一些实施例的处理装置还可以包括预取单元1030。预取单元1030可以配置成基于合并属性进行预取训练。例如,预取单元1030可以实现为处理器中的预取器。
74.根据本公开的一些实施例,存储地址根据对齐数据宽度被划分为多个对齐数据范围,为了得到上述n个子请求,拆分单元1010可以配置成:基于第一微指令的地址、第一微指令所对应的访问数据宽度以及对齐数据宽度,将第一微指令拆分成n个子请求。
75.进一步地,为了得到n个子请求,拆分单元1010可以配置成:基于第一微指令的地址确定第一微指令所对应的当前对齐数据范围;基于第一微指令所对应的访问数据宽度,确定第一微指令所访问的数据是否超出当前对齐数据范围;以及在确定超出的情况下,将第一微指令拆分成n个子请求。
76.根据本公开的一些实施例,合并属性包括用于指示是否命中缓存的合并缓存命中特征,其中,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列包括:将n个子请求中的每个子请求在微指令处理流水线中经处理获得的缓存命中特征进行合并以得到合并缓存命中特征,并将合并缓存命中特征写入地址输入队列。
77.根据本公开的一些实施例,缓存命中特征包括命中缓存和不命中缓存,其中,在n个子请求中的至少一个子请求的缓存命中特征为不命中缓存的情况下,合并缓存命中特征为不命中缓存,在n个子请求中的每个子请求的缓存命中特征均为命中缓存的情况下,合并缓存命中特征为命中缓存。
78.根据本公开的一些实施例,合并属性还包括第一微指令的地址以及第一微指令所对应的访问数据宽度。
79.根据本公开的一些实施例,第一微指令为具有访存操作的微指令,由第一微指令拆分得到的n个子请求为具有访存操作的子请求,其中,为了将n个子请求经微指令处理流水线的处理,处理单元1020可以配置成:利用微指令处理流水线根据n个子请求中的每个子请求进行数据访存处理。
80.根据本公开的一些实施例,处理单元1020还可以配置成将第二微指令经微指令处理流水线的处理,并将该第二微指令的属性写入地址输入队列,以使得预取器基于第二微指令的属性进行预取训练。
81.关于执行预取训练的处理装置1000执行的步骤的具体实现过程可以参照以上结合附图描述的根据本公开一些实施例的预取训练方法,在此不再重复描述。
82.利用根据本公开一些实施例的执行预取训练的处理装置,对于由第一微指令拆分得到的n个子请求,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练,从而避免使用拆分后得到的子请求的属性写入地址输入队列。由此,本公开一些实施例能够对拆分后的子请求的属性进行合并,并将合并后的属性写入地址输入队列,即,恢复初始的微指令级属性,简化地址输入队列的写入资源,避免地址输入队列的资源浪费,并使得简化预取器的预取训练过程,更有利于预取器基于初始的微指令级属性来发现数据预取规律,提升预取准确性,还能够提高预取效率并进一步提升处理器的运行效率。并且,提出的预取训练方法并不对现有预取器及处理器架构产生影响,便于在现有处理器中广泛应用实现。
83.根据本公开的又一方面,还提供了一种处理器,图6示出了根据本公开一些实施例的处理器的示意性框图。
84.如图6所示,处理器2000可以包括微指令处理队列2010、微指令处理队列2020以及预取器2030。具体的,微指令处理队列2010中包括有多个微指令,多个微指令中的第一微指令被拆分以得到n个子请求,其中,n为大于1的正整数。接着,微指令处理流水线2020可以配置成对n个子请求进行处理,并将n个子请求的属性合并后得到的合并属性写入地址输入队列。预取器2030可以配置成基于地址输入队列中的合并属性进行预取训练。可以理解的是,处理器2000还可以包括诸如存储器等其他未示出的器件,在此不再一一列举。根据本公开实施例的处理器2000,能够实现结合图3所描述的预取训练方法从而能够提高预取效率以及预取准确性,其具体实现过程可以参照上文,在此不再重复。
85.根据本公开的又一方面,还提供了一种计算设备。图7示出了根据本公开一些实施例的计算设备的示意性框图。
86.如图7所示,计算设备3000可以包括处理器3010以及存储器3020。根据本公开实施例,存储器3020中存储有计算机可读代码,该计算机可读代码当由处理器3010运行时,可以执行如上所述的预取训练方法。
87.处理器3010可以根据存储在存储器3020中的程序执行各种动作和处理。具体地,处理器3010可以是一种集成电路芯片,具有信号的处理能力。上述处理器可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,可以是x86架构或者是arm架构等。处理器3010能够实现或者执行本公开实施例中公开的各种方法、步骤及逻辑框图。
88.存储器3020存储有计算机可执行指令代码,该指令代码在被处理器3010执行时用于实现根据本公开实施例的预取训练方法。存储器3020可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(rom)、可编程只读存储器(prom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)或闪存。易失性存储器可以是随机存取存储器(ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、双倍数据速率同步动态随机存取存储器(ddrsdram)、增强型同步动态随机存取存储器(esdram)、同步连接动态随机存取存
储器(sldram)和直接内存总线随机存取存储器(dr ram)。应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
89.通过执行根据本公开的一些实施例的预取训练方法,处理器3010能够实现对于由微指令拆分得到的n个子请求,将n个子请求的属性合并后得到的合并属性写入用于预取器的地址输入队列,以使得预取器基于合并属性进行预取训练,从而避免使用拆分后得到的子请求的属性写入地址输入队列。由此,能够恢复初始的微指令级属性,简化地址输入队列的写入资源,避免地址输入队列的资源浪费,并使得简化预取器的预取训练过程,更有利于预取器基于初始的微指令级属性来发现数据预取规律,提升预取准确性,还能够提高预取效率并进一步提升处理器的运行效率。
90.根据本公开实施例的预取训练方法也可以借助于图8所示的计算设备架构4000来实现。如图8所示,计算设备4000可以包括总线4010、一个或多个cpu(核心)4020、只读存储器(rom)4030、随机存取存储器(ram)4040、连接到网络的通信端口4050、输入/输出4060、硬盘4070等。计算设备架构4000中的存储设备,例如rom 4030或硬盘4070可以存储本公开提供的预取训练方法的处理和/或通信使用的各种数据或文件以及cpu所执行的程序指令。计算设备架构4000还可以包括用户界面4080,用于接收用户输入信息以及指令。当然,图8所示的架构只是示例性的,在实现不同的设备时,根据实际需要,可以省略图8示出的计算设备中的一个或多个组件。
91.此外,根据本公开的其他方面还可以提供一种非暂时性计算机可读存储介质。该计算机可读存储介质上可以存储有指令,指令例如是计算机可读指令。当计算机可读指令在由处理器运行时,可以执行参照以上附图描述的预取训练方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。根据本公开的其他方面还可以提供一种计算机程序产品,该计算机程序产品包括计算机可读指令,该计算机可读指令存储在计算机可读存储介质中。处理器可以从计算机可读存储介质读取该计算机可读指令,处理器执行该计算机可读指令,使得执行上述各个实施例中描述的预取训练方法。
92.本领域技术人员能够理解,本公开所披露的内容可以出现多种变型和改进。例如,以上所描述的各种设备或组件可以通过硬件实现,也可以通过软件、固件、或者三者中的一些或全部的组合实现。
93.此外,虽然本公开对根据本公开的实施例的系统中的某些单元做出了各种引用,然而,任何数量的不同单元可以被使用并运行在客户端和/或服务器上。单元仅是说明性的,并且系统和方法的不同方面可以使用不同单元。
94.本公开中使用了流程图用来说明根据本公开的实施例的方法的步骤。应当理解的是,前面或后面的步骤不一定按照顺序来精确的进行。相反,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中。
95.本领域普通技术人员可以理解上述方法中的全部或部分的步骤可通过计算机程序来指令相关硬件完成,程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本公开并不限制于任何特定形式的硬件和软件的结合。
96.除非另有定义,这里使用的所有术语具有与本公开所属领域的普通技术人员共同
理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
97.以上是对本公开的说明,而不应被认为是对其的限制。尽管描述了本公开的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本公开的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本公开范围内。应当理解,上面是对本公开的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本公开由权利要求书及其等效物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1