微指令缓存资源的调度方法、装置、程序产品以及芯片与流程

文档序号:29122817发布日期:2022-03-04 22:52阅读:182来源:国知局
微指令缓存资源的调度方法、装置、程序产品以及芯片与流程

1.本发明涉及集成电路领域,更具体地涉及一种微指令缓存资源的调度方法、装置、计算机程序产品以及芯片。


背景技术:

2.中央处理器(cpu)架构主要分为两类,分别是精简指令集系统和复杂指令集系统。x86架构、arm架构、mips架构、ia64架构是目前较为常见的处理器架构。
3.微指令缓存(miro operation cache,oc)作为一种重要部件,被广泛应用在现有的处理器架构中。oc用来缓存指令译码后的微指令信息,通过取指地址索引并命中oc中存放的微指令时,会从oc中读取该微指令。同时,当oc未命中时,有相应的训练方法,将微指令训练到oc中。
4.同步多线程技术(simultaneous multi-threading,smt)是一种在一个cpu的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。随着smt技术的发展,其对oc容量的要求越来越高,主要原因在于每个线程的指令是不同的,例如当多个线程中都包含循环指令段时,多个线程之间的指令会不断抢占对方的oc容量资源,这样就会导致oc的命令率降低。但是,受到处理器的面积、主频等因素的限制,oc的容量不能一直呈线性增长。因此,在smt中,如何在有限的oc容量下充分提高oc的命中率,成为了一个亟待解决的技术问题。


技术实现要素:

5.针对以上问题,本公开提供了一种微指令缓存资源的调度方法、装置、计算机程序产品以及芯片。利用本公开提供微指令缓存资源的调度方法可以在oc容量相对有限的前提下,保证smt中的各个线程有效地利用oc资源,提高smt中各个线程的oc命中率,同时,在smt情况下,兼顾ic取指通道和oc取指通路的平衡性,提高了取指效率。
6.根据本公开的第一方面,提出了一种微指令缓存资源的调度方法,所述微指令缓存资源由多个线程共享,所述调度方法包括:对于所述多个线程中的每个线程,获取所述线程对微指令缓存资源的使用参数和所述线程的指令特性中的至少一个;根据获取到的每个线程的所述使用参数和所述指令特性中的至少一个,动态地配置每个所述线程对所述微指令缓存资源的使用,其中,所述使用参数指示所述线程对微指令缓存资源的使用性能。
7.在一些实施例中,其中所述使用参数包括以下至少一项:每个所述线程的指令缓存资源的取指次数,其中所述指令缓存资源的取指次数为在对微指令缓存资源进行训练的情况下,通过指令缓存资源的取指的微指令个数;每个所述线程的微指令缓存资源的取指次数,其中所述微指令缓存资源的取指次数为进入为微指令缓存资源取指模式时,通过微指令缓存资源进行取指的微指令个数;每个所述线程的微指令缓存资源的停止训练取指次数,其中所述微指令缓存资源的停止训练取指次数为在停止对微指令缓存资源进行训练的情况下,通过指令缓存资源进行取指的微指令的个数;根据所述指令缓存资源的取指次数、所述微指令缓存资源的取指次数、所述停止训练取指次数中的至少两项确定的参数。
8.在一些实施例中,其中所述指令特性包括以下至少一项:每个所述线程是否存在循环指令;每个所述线程中循环指令的循环体大小及循环次数。
9.在一些实施例中,其中配置所述线程对微指令缓存资源的使用包括以下中的至少一项:重新分配所述线程的微指令缓存资源训练次数阈值;向所述线程发送退出指令,所述退出指令用于指示停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指停止;向所述线程发送等待退出指令,所述等待退出指令用于指示继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。
10.在一些实施例中,还包括:响应于满足预设条件,向每个所述线程发送再平衡命令,其中所述再平衡命令用于将每个所述线程的微指令缓存资源的训练次数阈值恢复至默认值。
11.在一些实施例中,其中所述使用性能的等级包括高性能、中性能、低性能,所述指令特性的等级包括高循环特性、中循环特性、低循环特性,以及所述根据获取到的所述使用性能和所述指令特性,动态地配置每个所述线程对微指令缓存资源的使用,包括:根据所述使用性能的等级和所述指令特性的等级,采用预设的仲裁算法,对所述线程对微指令缓存资源的使用进行配置。
12.在一些实施例中,其中所述多个线程为四个线程,所述预设的仲裁算法包括:若所述四个线程中至少两个线程的所述使用性能为高性能,则保持所述四个线程的微指令缓存资源的训练次数阈值。
13.在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中只有一个线程的所述使用性能为高性能,则根据具有非高性能的另外三个线程的指令特性重新分配所述三个线程的微指令缓存资源训练次数阈值,同时保持具有高性能的所述线程的微指令缓存资源训练次数阈值;或者,若所述四个线程中只有一个线程的所述使用性能为高性能且无法确定另外三个线程的指令特性,将所述另外三个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述另外三个线程中的另一个线程确定为通过微指令缓存资源读取微指令。
14.在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中所有线程的使用性能均为非高性能,则根据四个所述线程的指令特性重新分配所述四个线程的微指令缓存资源训练次数阈值或者,平均分配所述四个线程对微指令缓存资源和指令缓存资源的使用;或者若所述四个线程中所有线程的使用性能均为非高性能且无法确定所述四个线程中的指令特性,将所述四个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述四个线程中的另外两个线程确定为通过微指令缓存资源读取微指令。
15.在一些实施例中,其中所述使用参数为所述微指令缓存资源的取指次数和/或根据所述指令缓存资源取指次数、所述微指令缓存资源取指次数、所述停止训练取指次数中的至少两项确定的,所述获取所述线程对微指令缓存资源的使用参数包括:响应于当某一线程的所述微指令缓存资源训练次数大于最小训练次数阈值时,获取所有线程的所述使用参数;或者,在固定时间间隔,获取所有线程的所述使用参数。
16.根据本公开的第二方面,提出了一种线程监测方法,所述线程为共享微指令缓存资源的多个线程中的任一线程,所述线程具有对应的训练次数计数器、指令缓存资源取指次数计数器、微指令缓存资源取指次数和停止训练后取指次数计数器,所述训练次数计数
器用于记录所述线程的微指令缓存资源的训练次数,所述指令缓存资源取指个数计数器用于记录所述线程在对微指令缓存资源进行训练的情况下,通过指令缓存资源读取的微指令个数,所述微指令缓存资源取指次数计数器用于记录所述线程在微指令缓存资源取指模式下,通过微指令缓存资源读取的微指令个数,所述停止训练后取指次数计数器用于记录停止训练微指令缓存资源后从指令缓存资源中读取的微指令个数,所述线程监测方法包括:监测所述线程的微指令缓存资源的训练次数、指令缓存资源的取指次数、微指令缓存资源的取指次数和微指令缓存资源停止训练后的取指次数;根据用于所述线程的指令缓存资源的取指次数、微指令缓存资源的取指次数和微指令缓存资源停止训练后的取指次数,确定所述线程的微指令缓存资源的使用参数;以及向调度中心提供所述线程的使用参数,以供所述调度中心动态地配置每个所述线程对所述微指令缓存资源的使用。而,微指令缓存资源的训练次数用来保证上述使用性能参数的有效性。
17.在一些实施例中,还包括:检测所述线程的指令特性;以及向调度中心提供所述线程的指令特性,以供所述调度中心基于所述使用性能参数和指令特性动态地配置每个所述线程对所述微指令缓存资源的使用。
18.在一些实施例中,其中,所述检测所述线程的指令特性包括:监测所述线程是否具有循环指令、计算所述循环指令的循环体大小及循环次数、统计所述循环体的循环次数是否高于设定阈值。
19.在一些实施例中,还包括:在所述线程的微指令缓存资源的训练次数超出所述线程的微指令缓存资源训练次数阈值的情况下,响应于接收到退出指令,停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指。
20.在一些实施例中,还包括:响应于接收到等待退出指令,继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。
21.根据本公开的第三方面,提出了一种微指令缓存资源的调度装置,所述微指令缓存资源由多个线程共享,所述调度装置包括:获取模块,其被配置为对于所述多个线程中的每个线程,获取所述线程对微指令缓存资源的使用参数和所述线程的指令特性中的至少一个;配置模块,其被配置为根据获取到的每个线程的所述使用参数和所述指令特性中的至少一个,动态地配置每个所述线程对所述微指令缓存资源的使用,其中,所述使用参数指示所述线程对微指令缓存资源的使用性能。
22.在一些实施例中,其中所述使用参数包括以下至少一项:每个所述线程的指令缓存资源的取指次数,其中所述指令缓存资源取指次数为在对微指令缓存资源进行训练的情况下,通过指令缓存资源进行取指的微指令个数;每个所述线程的微操作微指令缓存资源的取指次数,其中所述微指令缓存资源的取指次数为进入为微指令缓存资源取指模式时,通过微指令缓存资源进行取指的微指令个数;每个所述线程的微指令缓存资源的停止训练取指次数,其中所述微指令缓存资源的停止训练取指次数为在停止对微指令缓存资源进行训练的情况下,通过指令缓存资源进行取指的微指令个数;根据所述指令缓存资源的取指次数、所述微指令缓存资源的取指次数、所述停止训练取指次数中的至少两项确定的性能指标。
23.在一些实施例中,其中所述指令特征包括以下至少一项:每个所述线程是否存在
循环指令;每个所述线程中循环指令的循环体大小及循环次数。
24.在一些实施例中,其中配置所述线程对微指令缓存资源的使用包括以下中的至少一项:重新分配所述线程的微指令缓存资源训练次数阈值;向所述线程发送退出指令,所述退出指令用于指示停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指;向所述线程发送等待退出指令,所述等待退出指令用于指示继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。
25.在一些实施例中,还包括:再平衡模块,其被配置为响应于满足预设条件,向每个所述线程发送再平衡命令,其中所述再平衡命令用于将每个所述线程的微指令缓存资源的训练次数阈值恢复至默认值。
26.在一些实施例中,其中所述使用性能的等级包括高性能、中性能、低性能,所述指令特性的等级包括高循环特性、中循环特性、低循环特性,以及所述配置模块进一步配置为:根据所述使用性能的等级和所述指令特征的等级,采用预设的仲裁算法,对所述线程对微指令缓存资源的使用进行配置。
27.在一些实施例中,其中所述多线程为四个线程,所述预设的仲裁算法包括:若所述四个线程中至少两个线程的所述使用性能为高性能,则保持所述四个线程的微指令缓存资源的训练次数阈值。
28.在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中只有一个线程的所述使用性能为高性能,则根据具有非高性能的另外三个线程的指令特性重新分配所述三个线程的微指令缓存资源训练次数阈值,同时保持具有高性能的所述线程的微指令缓存资源训练次数阈值;或者,若所述四个线程中只有一个线程的所述使用性能为高性能且无法确定另外三个线程的指令特性,将所述另外三个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述另外三个线程中的另一个线程确定为通过微指令缓存资源读取微指令。
29.在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中所有线程的使用性能均为非高性能,则根据四个所述线程的指令特性重新分配所述四个线程的微指令缓存资源训练次数阈值或者,平均分配所述四个线程的微指令缓存资源训练次数阈值;或者若所述四个线程中所有线程的使用性能均为非高性能且无法确定所述四个线程中的指令特性,将所述四个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述四个线程中的另外两个线程确定为通过微指令缓存资源读取微指令。
30.在一些实施例中,其中所述使用参数为所述微指令缓存资源的取指次数和/或根据所述指令缓存资源的取指次数、所述微指令缓存资源的取指次数、所述停止训练取指次数中的至少两项确定的,所述获取模块进一步被配置为:响应于当某一个线程的所述微指令缓存资源训练次数大于最小训练次数阈值时,获取所有线程的所述使用参数;或者,在固定时间间隔,获取所有线程的所述使用参数。
31.根据本公开的第四方面,提供了一种计算机程序产品,其特征在于,所述程序包括程序代码指令,用于在所述程序由处理器执行时实现根据本公开第一方面中任一项所述的微指令缓存资源的调度方法以及/或者根据本公开第二方面中任一项所述的线程监测方法。
32.根据本公开的第五方面,提供了一种芯片,包括处理器、存储器和总线,其中所述
operation cache,oc)中取出微指令(经过译码之后的指令)。示例性地,取指路径选择器1可以根据是否命中oc微标签(micro-tags)来选择是进入“oc取指”通路还是“ic取指”通路进行取指操作。具体地,若命中oc微标签,则进入“oc取指”通路;若没有微标签,则进入“ic取指”通路。
47.若进入“ic取指”通路,则首先根据该物理地址在指令缓存(instructions cache,ic)中查找指令数据,当命中ic或者从l2、l3或者memory中取回数据后,从指令缓存中取出指令数据。在复杂指令集的处理器架构下,首先需要对指令的长度进行译码,然后,对指令信息进行译码。在对指令进行译码后,可以将译码后的指令信息(例如微指令)存放在oc中(图1-1中未示出)。在对该指令进行译码后,同时,将译码后的指令信息输入至取指路径选择器2,从而分配到相应的执行部件。
48.若进入“oc取指”通路,则首先根据该物理地址从微指令缓存中查找译码后的指令信息,查找到译码后的指令信息后可以从微指令缓存中取出该译码后的指令信息并将其输入至取指路径选择器2,从而分配到相应的执行部件。
49.取指路径选择器2从“ic取指”通路和“oc取指”通路中选通一路,按照微指令的顺序,将选通的一路的微指令输入至微指令队列。最后,将微指令分配到对应的执行部件。
50.图1-2示出了应用根据本公开实施例的微指令缓存资源的调度方法的系统架构图。如图1-2所示,线程1、线程2、线程3、线程4都有属于自己的用于记录oc训练次数的计数器。在本文中,对于线程上的一个指令,若采用ic取指并同时将该指令的译码信息(例如微指令)存放在oc的过程记为该线程对oc进行了一次训练操作。当oc训练一些次数后,线程在oc中的取指效果仍不理想,该线程对oc的训练次数将会被缩减,甚至,阶段性的保持该线程在ic取指模式。当oc训练一些次数后,线程在oc中的取指效果比较好时,将线程保持在oc取指模式,同时,适当提高该线程对oc的训练次数。因此,调度管理可以通过调节线程的记录oc训练次数的训练次数计数器的阈值来对线程的oc使用进行调度和配置。
51.线程1、线程2、线程3、线程4会有属于自己的oc使用性能监测机制。根据这四个线程的oc使用性能、各个线程中执行指令特性(包括是否存在循环体、循环体大小及循环次数)(将在下文中予以详细描述)、各个线程中训练次数计数器的数值,当一定事件(例如线程的oc使用性能高过设定的最高阈值,或者线程的oc使用性能低于设定的最低阈值)发生时或者每隔固定的时间段,动态地调整若干或全部线程的oc训练次数阈值(将在下文中予以详细描述)。图2示出了根据本公开实施例的一种微指令缓存资源的调度方法的流程示意图。该调度方法200包括:
52.步骤s201:对于多个线程中的每个线程,获取线程对微指令缓存资源的使用参数和线程的指令特性中的至少一个。
53.本实施例中,微指令缓存资源指的是上文中描述的oc资源或oc容量资源。这里的多个线程可以是smt技术中的多个线程。在smt技术中,对每个线程上的指令的取指过程可以是图1-1示出的针对指令的取指过程。换句话说,针对每个线程上的指令可以进行ic取指或者oc取指。由上文的描述可知,若针对线程上的指令采用ic取指,则在ic中取出指令后,需要将该指令进行译码并将译码后的指令信息(例如微指令)存放在oc中。
54.本实施例中,线程对微指令缓存资源的使用参数指示所述线程对微指令缓存资源的使用性能,可以通过线程指令缓存资源取指次数和微指令缓存资源取指次数来获得。可
选地,使用参数包括每个线程的微指令缓存资源的取指次数,微指令缓存资源的取指次数为进入微指令缓存资源取指模式时,通过微指令缓存资源进行取指的微指令个数。例如,某个线程上共读取10条微指令,其中有6条微指令通过oc路径读取,4条微指令通过ic路径读取,那么这里的6条通过oc路径读取的微指令个数可以作为该线程的使用参数。除了可以将线程上oc取指个数作为使用参数之外,还可以将线程上oc读取微指令个数占所有读取微指令个数的比例作为使用参数。仍以前述的某个线程上共读取10条微指令为例,可以将6次oc路径读取的微指令数目/10次读取的微指令总数作为该线程的使用参数。
55.可选地,使用参数还可以包括每个线程的指令缓存资源的取指次数,其中指令缓存资源的取指次数为在对微指令缓存资源进行训练的情况下,通过指令缓存资源取指的微指令个数。例如,某个线程上共读取10条微指令,其中有6条微指令通过oc路径读取,4条微指令通过ic路径读取,那么这里的4条通过ic读取的微指令个数可以作为该线程的使用参数。除了可以将线程上的ic取指个数作为使用参数之外,还可以将线程上ic读取微指令个数占所有读取微指令个数的比例作为使用参数。仍以前述的某个线程上共读取10条微指令为例,可以将4条ic读取的微指令数目/10条读取的微指令总数作为该线程的使用参数。
56.可选地,使用参数还可以包括每个线程的微指令缓存资源的停止训练取指次数,其中微指令缓存资源的停止训练取指次数为在停止对微指令缓存资源进行训练的情况下,通过指令缓存资源取指的微指令个数。下面结合图1对这里的停止训练取指次数进行说明,在一些针对线程上的指令进行ic取指的场景中,由于该线程上的oc资源的使用性能差(例如较低的oc命令率)或者无法对oc资源进行使用(例如oc容量已填满),此时在线程上进行ic取指时,若仍要将译码后的指令信息(例如微指令)存放在oc中,则会进一步降低oc资源的利用率,此时可以强制停止对oc的训练操作(即停止在ic取指的路径中将译码后的指令信息存放在oc中)。每个线程上的oc资源的停止训练取指次数也可以作为使用参数。例如,某个线程上共读取10条微指令,其中有6条微指令通过oc路径读取,4条微指令为停止对oc资源进行训练的ic路径读取,那么这里的4条停止oc训练后通过ic路径读取的微指令数目可以作为该线程的使用参数。除了可以将线程上的oc资源的停止训练取指次数作为使用参数之外,还可以将线程上的oc资源的停止训练取指次数占所有取指次数的比例作为使用参数。在前述的4条微指令为停止对oc资源进行训练后通过ic路径读取例子中,可以将4条停止对oc资源进行训练的ic读取的微指令数目/10次读取的微指令总数作为该线程的使用参数。
57.在一些可选的实施例中,考虑到复杂指令系统计算机(complex instruction set computer,cisc)架构处理器下,指令长度的不确定情况,在该示例中,可以统一在译码和oc取指之后,填入微指令队列时,统计上文描述的线程的微指令缓存资源的取指次数、线程的指令缓存资源的取指次数、线程的微指令缓存资源的停止训练取指次数这三项使用参数。
58.仍可选地,使用参数可以包括根据前述ic取指次数、oc取指次数、oc停止训练取指次数中的至少两项确定的参数。示例性,若ic取指次数为x,oc取指次数为y,那么可以将f=f(x,y)作为使用参数,例如f=y/(x+y)。同理,若ic取指个数为x、oc取指次数为y、oc停止训练取指次数为z,那么可以将f=f(x,y,z)作为使用参数,例如f=y/(x+y+z)。
59.在本实施例中,线程上的指令特性可以包括线程上是否存在循环指令和/或该循环指令的循环体大小和循环次数。循环指令的格式为:“loop标号”,并且在cx(计数寄存器)
中存放loop指令的循环次数。处理器执行loop指令时分两步走,第一步:(cx)=(cx-1),第二步:判断cx中的值,若不为0转至标号处执行程序,为0则向下执行。例如,若检测到线程上存在循环指令(例如检测到“loop”),则可以用一位比特值“1”指示;若没有检测到线程上存在循环指令(例如没有检测到“loop”),则可以用一位比特值“0”指示。在本实施例中,可以采用现有技术中的分支预测技术来预测循环指令的循环体大小和循环次数。分支预测的方法包括静态预测和动态预测,静态预测方法包括预测永不转移、预测永远转移、预测后向转移等,动态预测方法可以根据同一条转移指令过去的转移情况来预测未来的转移情况。
60.步骤s202:根据获取到的每个线程的使用参数和指令特性中的至少一个,动态地配置每个线程对微指令缓存资源的使用。
61.如上所述,每个线程的使用参数指示该线程对oc资源的使用性能,例如使用参数可以指示高的oc资源的使用性能、低的oc资源的使用性能等。另外,当线程中的指令具有多次循环的循环指令时,也会对oc资源的使用产生影响,例如若线程中具有热循环指令段(hot loop),则其可能会抢占其他线程的oc容量资源,进而影响其他线程对oc资源的使用性能。因此,本文描述的使用参数和/或指令特性可以作为为每个线程分配oc资源的基础。例如,若某个线程的oc资源的使用性能是高的,则可以为该线程配置更多的oc资源的使用时间。
62.可选地,配置线程对微指令缓存资源的使用包括重新分配线程的微指令缓存资源训练次数阈值。如上文描述的,针对线程中的指令的每次取指操作包括ic取指和oc取指,在未存在强制停止oc训练的情况下,当该线程通过ic取指并通过译码电路时,对oc进行一次写操作,则认为进行了一次oc训练,对应的oc训练计数器加1。在线程运行之前,可以为每个线程分配初始oc训练次数阈值,然后根据线程运行过程中获取到的使用参数和指令特性中的至少一个,对初始oc训练次数阈值进行调整(例如,增加oc次数训练阈值、减少oc训练次数阈值、保持oc训练次数阈值等)。这里的oc训练次数阈值是用来分配oc资源的使用时间的参数,例如若线程的当前oc训练次数小于等于oc训练次数阈值,需要比较该线程的oc使用性能和其他线程的oc使用性能,从而选择继续保持该线程对oc资源的使用或者减小该线程对oc资源的使用;若线程的当前oc训练次数大于oc训练次数阈值,则需要减少该线程对oc的使用次数,甚至,中断该线程对oc资源的使用。中断oc资源的使用,该线程的训练计数器将被置位到最小阈值,并且,因为oc不被训练,该训练技术将不会再累加,直到收到再平衡指令。
63.可选地,配置线程对微指令缓存资源的使用包括向线程发送退出指令。在本实施例中,这里的退出指令用于指示停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指。如上文结合图1-1所描述的,对于ic取指,在对指令进行译码后,需要将译码后的指令信息(例如微指令)存放在oc中。在本实施例中,可以向线程发送退出指令,其中,在译码阶段,该退出指令可以强制停止将译码后的指令信息(例如微指令)存放在oc中的操作。也就是说,在ic取指中应用退出指令后的取指路径(结合图1-1描述)为:首先根据指令的物理地址在ic中查找指令数据,查找到指令之后可以从ic中取出指令;在复杂指令集架构下,需要对该指令的长度进行译码,然后将该指令进行译码;在对该指令进行译码后,直接将译码后的指令信息(例如微指令)输入至取指路径选择器2,而无需将译码后的指令信息(例如微指令)存放在oc中。
64.仍可选地,配置线程对微指令缓存资源的使用包括向线程发送等待退出指令。在本实施例中,等待退出指令用于指示继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。如上文结合图1-1所描述的,对于ic取指,在对指令进行译码后,需要将译码后的指令信息(例如微指令)存放在oc中。也就是说,在未强制停止oc训练的情况下,对于ic取指,一次对oc的写操作即对应完成了一次oc训练。在本实施例中,可以向线程发送等待退出指令,其中,该等待退出指令用于指示线程循环地等待(例如检测)上文描述的退出指令。在一次循环中,若等待到退出指令,则执行退出指令;若未等待到退出指令,则进行取指操作(例如ic取指或oc取指),并进行下一次循环。在未等待到退出指令时,若该线程进入了ic取指,则继续将译码后的指令信息(例如微指令)存放在oc中。
65.可选地,配置线程对微指令缓存资源的使用包括以下三种方式的任意组合:(一)重新分配线程的微指令缓存资源训练次数阈值;(二)向线程发送退出指令;(三)向线程发送等待退出指令。
66.利用本公开实施例提供的微指令缓存资源的调度方法可以在oc容量相对有限的前提下,保证smt中的各个线程有效地利用oc资源,提高smt中各个线程的oc命中率,同时,阶段性的强制某些线程进入ic取指,既能保证其他线程充分利用oc资源,又能有效平衡ic取指路径和oc取指路径,从而提高取指效率。
67.图3示出了根据本公开实施例的另一种微指令缓存资源的调度方法的流程示意图。该调度方法300包括:
68.步骤s301:对于多个线程中的每个线程,获取线程对微指令缓存资源的使用参数和线程的指令特性中的至少一个。
69.步骤s302:根据获取到的每个线程的使用参数和指令特性中的至少一个,动态地配置每个线程对微指令缓存资源的使用。
70.步骤s301和s302与步骤s201和s202基本相同,在此不再赘述。
71.步骤s303:响应于满足预设条件,向每个线程发送再平衡命令。
72.在本实施例中,再平衡命令用于将每个线程的微指令缓存资源的训练次数阈值恢复至默认值,同时,每个线程的微指令缓存资源训练计数器、指令缓存资源取指计数器、微指令缓存资源取指计数器、停止训练取指计数器都将初始化为默认值(不同线程的默认值是相同的)。如上文所描述的,在线程运行之前,可以为每个线程分配初始oc训练次数阈值,然后根据线程运行过程中获取到的使用参数和指令特性中的至少一个,对初始oc训练次数阈值进行调整。微指令缓存资源的训练次数阈值(即oc训练次数阈值)的默认值可以是初始oc训练次数阈值。这里的预设条件可以是预设时间段,即经过预设时间段后,可以向每个线程发送再平衡命令以将每个线程的oc训练次数阈值恢复至初始oc训练次数阈值。
73.本实施例中,通过在预设条件下将每个线程的oc训练次数阈值恢复至默认值,可以缓解对线程的oc使用时间的不当分配,增加对现有oc使用仲裁算法的修正能力,消除调度中心阶段性仲裁的消极效果,最终,提高oc资源的利用率。
74.在一些可选的实施例中,线程对微指令缓存资源的使用性能的等级包括高性能、中性能、低性能,线程上的指令特性的等级包括高循环特性、中循环特性、低循环特性,上述步骤s202包括:根据使用性能的等级和指令特性的等级,采用预设的仲裁算法,对线程对微
指令缓存资源的使用进行配置。以四线程的smt技术(以下简称“smt 4”)例,根据每个线程的使用性能的等级,可以将smt 4的oc使用性能组合如下表1:
[0075][0076]
表1
[0077]
在上述表中,“h”表示“高性能”,“m”表示“中性能”,“l”表示“低性能”。同理,根据每个线程上的指令特性,可以将smt 4的指令特性组合成n个情形(n为大于等于1的整数)。在本实施例中,可以针对oc使用性能的不同情形(例如情形1-情形14)和指令特性的不同情形设置相应的仲裁规则,并根据该仲裁规则对oc资源的使用进行配置。例如,针对oc使用性能为情形1而指令特性为任一情形,设置其对应的仲裁规则为保持各个线程的当前oc训练次数阈值。在本实施例中,oc的使用性能的等级划分的标准根据所划分的对象而有所不同。例如若对由oc训练次数和oc取指次数确定的使用参数进行等级划分,可以为该使用参数值设定不同的区间,每个取值区间分别对应高性能、中性能、低性能中的一个。示例性,若使用参数为
[0078]
则可以按照如下表2的方式进行等级划分:
[0079][0080]
表2
[0081]
在本实施例中,线程上的指令特性的等级划分标准可以多样的。具体而言,指令特定的等级可以根据循环指令的循环体大小来确定,而循环指令的循环体大小可以通过多种方式进行比对。例如可以将循环体大小与循环体尺寸的第一阈值和第二阈值进行比较(其中,第一阈值大于第二阈值),若循环体大小大于第一阈值,并且循环体的循环次数大于设定阈值,则指令特性为高循环特性;若循环体大小介于第一阈值和第二阈值之间,并且循环体的循环次数大于设定阈值,则指令特性为中循环特性;若循环体小于第二阈值,或者,循环体的循环次数小于设定阈值,则指令特性为低循环体。本公开实施例还提供了一种如下表3的方式对指令特性进行等级划分的标准:
[0082][0083][0084]
表3
[0085]
在一些可选的实施例中,其中多个线程为四个线程,预设的仲裁算法包括:若四个线程中至少两个线程的使用性能为高性能,则保持四个线程的微指令缓存资源的训练次数阈值。以表1为例,若smt 4的oc使用性能为情形1、情形2、情形3、情形4、情形5,则不管smt 4的指令特征如何,均保持各个线程的当前oc训练次数阈值。
[0086]
在一些可选的实施例中,其中预设的仲裁算法还包括:若四个线程中只有一个线程的使用性能为高性能,则根据具有非高性能的另外三个线程的指令特性重新分配三个线程的微指令缓存资源训练次数阈值,同时保持具有高性能的线程的微指令缓存资源训练次数阈值。以表1为例,若smt 4的oc使用性能为情形6、情形7、情形8、情形9,则根据线程2、线
程3、线程4的指令特性重复分配这三个线程的当前oc训练次数阈值。示例性地,针对情形6,如果3个m对应的线程中,包含指令循环特性为高和指令循环特性为中或者低的线程,那么,将指令循环特性为非高的线程的当前oc训练次数阈值减少并将减少值增加到指令循环特性为高的线程上,具体的增减比例参照循环体的大小;如果3个m对应的线程,指令的循环特性均为高,此时,则选择固定的线程(例如线程2),减少该线程的当前oc训练次数阈值给额外的两个线程,具体的增减比例参照循环体的大小。或者,将该固定线程(例如线程2)的当前oc训练次数阈值减少为0,强制其进入ic取指;其他情况,将放弃本次仲裁机会,继续按照上一次配置的oc训练次数阈值进行设定。在另一些示例中,预设的仲裁算法还包括:若所述四个线程中只有一个线程的所述使用性能为高性能且无法确定另外三个线程的指令特性,将所述另外三个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述另外三个线程中的另一个线程确定为通过微指令缓存资源读取微指令。在该示例中,当另外三个线程的指令特性不明显时,可以阶段性地固定其中的两个线程通过ic取指,其中的另一个线程通过oc取指。由此,可以保证两条取指路径的平衡,提高取指效率。
[0087]
针对情形7,如果l线程指令循环特性为高,并且2个m对应的线程指令循环特性为非高,则挑选m对应的两个线程之一,减少其当前oc训练次数阈值到l对应的线程上,增减比例参照l对应线程的循环体大小;如果2个m线程包含指令循环性能为高的线程,则减少l对应的线程的当前oc训练次数阈值到相应的线程上,具体增减参照循环体大小;其他情况,将放弃本次仲裁机会。
[0088]
针对情形8,如果m对应的线程指令循环特性为高,l对应的两个线程分为指令循环特性为高和指令循环特性为非高,那么,则从固定的指令循环特性为非高的线程(例如,线程4)上减少当前oc训练次数阈值到m对应的线程和指令循环特性为高的l对应的线程上(例如线程2);如果m对应的线程指令循环特性为低,并且,l对应的两个线程中分为指令循环特性为高和指令循环特性为非高的,那么则从l对应的其指令循环特性为非高的线程中减少当前oc训练次数阈值到l对应的且指令循环特性为高的线程上,具体减少比例依据循环体大小;如果m对应的线程指令循环特性为低,l对应的两个线程的指令循环特性均为高,那么,此时减少m对应的线程的当前oc训练次数阈值给两个l对应的线程;其他情况,将放弃本次仲裁机会。
[0089]
针对情形9,如果3个l对应的线程中存在指令循环特性为高和指令循环特性为非高的情况,那么,则固定一个指令循环特性为高的线程(例如线程3),从固定指令循环特性为非高的线程(例如线程4)中减少当前oc训练次数阈值到指令循环特性为高的线程上,具体增减参照循环体的大小,或者,强制该线程(例如线程4)从进行ic取指;如果3个l对应的线程指令循环特性均为非高,那么尝试减少两个l线程的当前oc训练次数阈值给另外一个l对应的线程,这样,让这2个l对应的线程尽快走ic取指路径,保证ic取指与oc取指路径的平衡;其他情况,放弃本次仲裁机会。
[0090]
在一些可选的实施例中,其中多个线程为四个线程,预设的仲裁算法包括:若四个线程中所有线程的使用性能均为非高性能,则根据四个线程的指令特性重新分配四个线程的微指令缓存资源训练次数阈值或者,平均分配四个线程对微指令缓存资源和指令缓存资源的使用。以表1为例,若smt4的oc使用性能为情形10、情形11、情形12、情形13、情形14,则根据线程1、线程2、线程3、线程4的指令特性重复分配这四个线程的当前oc训练次数阈值。
示例性地,其中平均分配四个线程对微指令缓存资源和指令缓存资源的使用包括强制某两个线程经过ic通道取指(停止对应线程对oc的训练),剩余两个线程经过oc通道取指,从而保证两条取指通道的平衡。
[0091]
示例性地,针对情形10,包含指令循环特性为高的线程数目大于或者等于2,并且,存在指令循环特性为非高的线程,则从指令循环特性为非高的线程上减少当前oc训练次数阈值到指令循环特性为高的线程上;如果4个线程指令循环特性为高,则以“循环体的大小”来确定需要提升的2个或者3个线程,从循环体最小的线程上减少当前oc训练次数阈值到选定的待提高线程上;其他情况,放弃本次仲裁机会。
[0092]
针对情形11,3个m对应的线程存在指令循环特性为高,并且l对应的线程对应的指令循环特性为非高,则减少l对应线程的当前oc训练次数阈值到3个m中对应的包含循环体的线程,或者,l对应的线程将强制进入ic取指路径;3个m对应的线程指令循环特性均为非高,并且l对应的线程指令循环特性为高,则选定3个m中选定一个线程,减少其当前oc训练次数阈值到l对应的线程上;4个线程指令循环特性均为非高,则尝试减少l线程的当前oc训练次数阈值到三个m线程,同时,l强制进入ic取指模式;其他情况,放弃本次仲裁机会。
[0093]
针对情形12,两个l对应的线程指令循环特性均为低,并且m中存在指令循环特性为非低的线程,则从两个l对应的线程上均匀的减少当前oc训练次数阈值到两个m上面;其他情况,放弃本轮的仲裁机会。
[0094]
针对情形13,m对应的线程指令循环特性为非低,并且3个l线程中存在指令循环特性为低的线程,此时,减少该线程当前oc训练次数阈值到m对应的线程上;4个线程的指令循环特性均为低,则挑选两个oc性能为l的两个线程,并且强制其进入ic取指模式(停止对应线程对oc的训练);m线程的指令循环特性为低,3个l线程中存在指令循环特性为高的线程(例如线程4),则首先从l对应的指令循环特性为非高的线程上减少当前oc训练次数阈值到该线程(例如线程4);其他的情况,将放弃本次仲裁。
[0095]
针对情形14,如果4个线程中存在指令循环特性为非低的线程数据大于0,并且存在指令循环特性为低的线程,减少为指令循环特性为低的线程的当前oc训练次数阈值到指令循环特性为非低的线程上;如果未存在指令循环特性为非低的线程,则放弃本轮仲裁。
[0096]
在另一些可选的实施例中,其中多个线程为四个线程,预设的仲裁算法包括:若所述四个线程中所有线程的使用性能均为非高性能且无法确定所述四个线程中的指令特性,将所述四个线程中的两个线程确定为通过指令缓存资源读取微指令以及将所述四个线程中的另外两个线程确定为通过微指令缓存资源读取微指令。在该示例中,当四个线程的指令特性不明显时,可以阶段性地固定其中的两个线程通过ic取指,另外的两个线程通过oc取指。由此,可以保证两条取指路径的平衡,提高取指效率。
[0097]
在一些可选的实施例中,使用参数为微指令缓存资源取指次数和/或根据指令缓存资源取指次数、微指令缓存资源取指次数、停止训练取指次数中的至少两项确定的,获取线程对微指令缓存资源的使用参数包括:响应于当某一线程的微指令缓存资源训练次数大于最小训练次数阈值,获取所有线程的使用参数,或者,在固定时间间隔,获取所有线程的所述使用参数。在本实施例中,可以为使用参数设置oc最小训练次数阈值,当线程的当前oc训练次数大于该最小训练次数阈值时,可以认为获取的使用参数是有效的。例如,使用参数为(oc取指次数/(ic取指次数+oc取指次数))。考虑到oc的效果需要一定的训练时间,因此
可以针对该使用参数设置oc最小训练次数阈值,当oc训练次数大于oc最小训练次数阈值时,获取该使用参数。
[0098]
在本实施例中,通过对使用参数设置阈值,可以增加使用参数的有效性,进而为线程对oc资源的使用做出更为准确地配置。
[0099]
图4出了根据本公开实施例的一种线程监测方法的流程示意图。
[0100]
在步骤s401:监测线程的微指令缓存资源的训练次数、微指令缓存资源的取指次数、指令缓存资源的取指次数和微指令缓存资源停止训练后的取指次数。
[0101]
本实施例中,线程为共享微指令缓存资源的多个线程中的任一线程,线程具有对应的训练次数计数器、微指令缓存资源取指次数计数器、指令缓存资源取指计数器和停止训练后取指次数计数器,训练次数计数器用于记录线程的微指令缓存资源的训练次数,微指令缓存资源取指次数计数器用于记录线程进入微指令缓存资源取指模式时,通过微指令缓存资源进行取指的微指令个数,指令缓存资源取指次数计数器用于记录线程在对微指令缓存资源进行训练的情况下,通过指令缓存资源取指的微指令个数,停止训练后取指次数计数器用于记录停止训练微指令缓存资源后通过指令缓存资源取指的微指令个数。微指令缓存资源指的是上文中描述的oc资源或oc容量资源。这里的共享微指令缓存资源的多个线程可以是smt技术中的多个线程。在smt技术中,对每个线程上的指令的取指过程可以是图1-1示出的针对指令的取指过程。换句话说,针对每个线程上的指令可以进行ic取指或者oc取指。由上文的描述可知,若针对线程上的指令采用ic取指,则在ic中取出带有指令信息的原始数据后,需要将该指令进行译码并将译码后的指令信息(例如微指令)存放在oc中。在本文中,对于线程上的一个指令,若采用ic取指并同时将该指令的译码信息(例如微指令)存放在oc的过程记为该线程对oc进行了一次训练操作。这里的微指令缓存资源停止训练后的取指次数可以是上文描述的每个线程上的oc资源的停止训练取指次数。
[0102]
可选地,训练次数计数器、微指令缓存资源取指次数计数器、指令缓存资源取指次数计数器和停止训练后取指次数计数器可以采用递增的方式增加数值。例如,若监测到线程上的指令的取指过程为ic取指,当针对oc的每次写操作,则训练次数计数器的数值加1;在写入微指令队列时,若监测到线程上的一个指令的取指过程为oc取指,则微指令缓存资源取指次数计数器加1;在写入微指令队列时,若监测到线程上的一个指令的取指过程为ic取指,则指令缓存资源取指计数器加1;在写入微指令队列时,若监测到线程上的一个指令的取指过程为停止对oc资源进行训练下通过ic取指,则停止训练后取指次数计数器加1。
[0103]
步骤s402:根据用于线程的指令缓存资源的取指次数、微指令缓存资源的取指次数和微指令缓存资源停止训练后的取指次数,确定线程的微指令缓存资源的使用参数。
[0104]
在本实施例中,可以将指令缓存资源的取指次数计数器的数值作为ic取指次数,将微指令缓存资源的取指次数计数器的数值作为oc取指次数,将停止训练后取指次数计数器的数值作为oc资源的停止训练取指次数,并根据ic取指次数、oc取指次数和oc资源的停止训练取指次数确定线程的oc使用参数。示例性,若ic的取指次数为x,oc取指次数为y,oc停止训练取指次数为z,那么可以将f=f(x,y,z)作为使用参数,例如f=y/(x+y+z)。
[0105]
步骤s403:向调度中心提供线程的使用参数,以供调度中心动态地配置每个线程对微指令缓存资源的使用。
[0106]
在本实施例中,可以向多线程的调度中心(例如smt技术的调度中心)发送根据步
骤s402确定的使用参数。调度中心根据接收到的该使用参数动态地配置每个线程对微指令缓存资源的使用。调度中心配置对oc的使用的方法和步骤已在本文上述的步骤s202予以详细描述,这里不再赘述。
[0107]
利用本公开实施例提供的线程监测方法可以在oc容量相对有限的前提下,保证smt中的各个线程有效地利用oc资源,提高smt中各个线程的oc命中率。
[0108]
在一些可选的实施例中,该线程监测方法400还包括:检测线程的指令特性;以及向调度中心提供线程的指令特性,以供调度中心基于使用性能和指令特性动态地配置每个线程对微指令缓存资源的使用。本实施例中的线程的指令特性以及对其的检测方法已在本文上述的步骤201予以详细描述,这里不再赘述。在本实施例中,可以向多线程的调度中心(例如smt技术的调度中心)发送线程的指令特性。调度中心根据接收到的该线程的指令特性动态地配置每个线程对微指令缓存资源的使用。调度中心配置对oc的使用的方法和步骤已在本文上述的步骤s202予以详细描述,这里不再赘述。
[0109]
在一些可选的实施例中,检测线程的指令特性包括:监测线程是否具有循环指令、计算循环指令的循环体大小、统计循环体的循环次数是否高于设定阈值。此处的步骤已在本文上述的步骤201予以详细描述,这里不再赘述。
[0110]
在一些可选的实施例中,在线程的微指令缓存资源的训练次数超出线程的微指令缓存资源训练次数阈值的情况下,响应于接收到退出指令,停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指。此处的步骤已在本文上述的步骤202以详细描述,这里不再赘述。
[0111]
在一些可选的实施例中,响应于接收到等待退出指令,继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。此处的步骤已在本文上述的步骤202以详细描述,这里不再赘述。
[0112]
图5-1示出了根据本公开实施例的另一种线程监测方法的流程示意图。本实施例中,线程为共享微指令缓存资源的多个线程中的任一线程,线程具有对应的训练次数计数器、指令缓存资源取指次数计数器和微指令资源取指次数计数器,训练次数计数器用于记录线程的微指令缓存资源的训练次数,指令缓存资源取指次数计数器用于记录线程通过指令缓存资源读取的微指令个数,微指令缓存资源取指次数计数器用于记录线程通过微指令缓存资源读取的微指令个数。如图5-1所示:
[0113]
步骤s510:判断所述线程的微指令缓存资源的训练次数是否小于oc训练次数阈值,若是则进入步骤s520,若否则进入步骤s560;
[0114]
步骤s520:判断是否接收到用于指示停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指的退出指令,若是则进入步骤s560,若否则同时进入步骤s530和步骤s540;
[0115]
步骤s530:在译码阶段,判断是否进行oc训练,如果是,则在填写oc时后,将训练次数计数器加1。在通过译码或者oc取指之后,填入微指令队列时,统计每条指令的来源,如果微指令来自于oc,则微指令缓存资源计数器加1并进入步骤s550;如果微指令来自于ic,则指令缓存资源计数器加1并进入步骤s550;
[0116]
步骤s540:监测所述线程是否存循环指令并计算所述循环指令的循环体大小,并将监测结果上报;
[0117]
步骤s550:响应于所述训练次数计数器的数值大于最小训练次数阈值,根据所述指令缓存资源取指次数计数器的数值和所述微指令缓存资源取指次数计数器的数值,确定所述线程的微指令缓存资源的使用参数,并将所述使用参数上报;
[0118]
步骤s560:判断是否接收到用于指示继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令的等待退出指令,若否则强制停止对微指令缓存资源进行训练,并上报本次事件,若是则进入步骤s570;
[0119]
步骤s570:判断是否接收到强制停止对微指令缓存资源进行训练的退出指令,若是则强制停止对微指令缓存资源进行训练,并上报本次事件,若否则继续执行步骤s570。
[0120]
图5-2示出了根据本公开实施例的又一种线程监测方法的流程示意图。
[0121]
图5-2示出的具体操作流程如下:
[0122]
(1)开始后,线程将自身的oc训练次数计数器初始化为0,将oc训练次数与控制中心设定的oc训练次数阈值进行比较;
[0123]
(2)如果oc训练次数《=oc训练次数阈值,则跳入步骤(3);
[0124]
(3)判断是否接收到从线程调度控制中心发送的退出指令,如果未接收到退出指令,则监测两部分信息,进行第一部分的分支循环体监测和信息上报,进入步骤(5),并且进行第二部分的使用参数收集和信息上报,进入步骤(6);如果接收到退出指令则停止oc训练,并强制进入到ic取指模式;
[0125]
(4)如果oc训练次数》oc训练次数阈值,则进入步骤(9);
[0126]
(5)在本步骤进行分支循环体监测,目前,在分支预测部件,现有技术已经有方法监测是否存在循环体以及循环体的大小,在本步骤中,收集从分支预测部件发送来的是否存在循环体及循环体的大小,并将以上信息上报给线程调度控制中心,为线程调度控制中心对oc资源的配置提供依据;
[0127]
(6)在本步骤及步骤(7)(8)将进行oc使用参数收集和信息上报,监测本线程是否进入oc取指模式,在译码阶段,针对每次写到oc容器的操作,oc训练次数计数器加1,在ic或者oc取指之后,写入微指令队列时,统计微指令的来源,如果微指令来自于oc取指路径,则微指令缓存资源取指次数计数器加1,如果否,则指令缓存资源取指次数计数器加1;
[0128]
(7)为oc使用参数设置阈值(该阈值认为是oc能够达到效果的最小训练次数阈值),当oc训练次数》最小训练次数阈值时,这时候认为从oc统计拿到的使用参数是有效的;
[0129]
(8)将上述的oc使用参数发送给线程调度控制中心;控制中心能够总览所有线程的性能结果,并结合线程上报的分支循环体信息进行配置;
[0130]
(9)判断本线程是否存在从线程调度控制中心发送的等待退出指令,如果有,则不会停止oc训练,直到接收到线程调度中心发送的退出指令,才会停止oc训练并且强制本线程进入到ic取指模式。
[0131]
如图6所示,本公开实施例还提供了一种微指令缓存资源的调度装置600,所述微指令缓存资源由多个线程共享,所述调度装置600包括:获取模块601,其被配置为对于所述多个线程中的每个线程,获取所述线程对微指令缓存资源的使用参数和所述线程的指令特性中的至少一个;配置模块602,其被配置为根据获取到的每个线程的所述使用参数和所述指令特性中的至少一个,动态地配置每个所述线程对所述微指令缓存资源的使用,其中,所述使用参数指示所述线程对微指令缓存资源的使用性能。本实施例中的微指令缓存资源的
调度装置600是本文上述实施例提供的微指令缓存资源的调度方法对应的装置实施例,在此不再赘述(下同)。
[0132]
在一些实施例中,其中所述使用参数包括以下至少一项:每个所述线程的指令缓存资源的取指次数,其中所述指令缓存资源的取指次数为在对微指令缓存资源进行训练的情况下,通过指令缓存资源取指的微指令个数;每个所述线程的微指令缓存资源的取指次数,其中所述微指令缓存资源的取指次数为进入为微指令缓存资源取指模式时,通过微指令缓存资源取指的微指令个数;每个所述线程的微指令缓存资源的停止训练取指次数,其中所述微指令缓存资源的停止训练取指次数为在停止对微指令缓存资源进行训练的情况下,通过指令缓存资源取指的微指令个数;根据所述指令缓存资源取指次数、所述微指令缓存资源取指次数、所述停止训练取指次数中的至少两项确定的性能指标。
[0133]
在一些实施例中,其中所述指令特征包括以下至少一项:每个所述线程是否存在循环指令;每个所述线程中循环指令的循环体大小及循环次数。
[0134]
在一些实施例中,其中配置所述线程对微指令缓存资源的使用包括以下中的至少一项:重新分配所述线程的微指令缓存资源训练次数阈值;向所述线程发送退出指令,所述退出指令用于指示停止对微指令缓存资源进行训练、并通过指令缓存资源进行取指;向所述线程发送等待退出指令,所述等待退出指令用于指示继续对微指令缓存资源进行训练、并等待用于停止对微指令缓存资源进行训练并对指令缓存资源进行取指的退出指令。
[0135]
在一些实施例中,还包括:再平衡模块,其被配置为响应于满足预设条件,向每个所述线程发送再平衡命令,其中所述再平衡命令用于将每个所述线程的微指令缓存资源的训练次数阈值恢复至默认值,另外,计数器恢复至默认值,例如,微指令缓存取指计数器等。
[0136]
在一些实施例中,其中所述使用性能的等级包括高性能、中性能、低性能,所述指令特性的等级包括高循环特性、中循环特性、低循环特性,以及所述配置模块进一步配置为:根据所述使用性能的等级和所述指令特征的等级,采用预设的仲裁算法,对所述线程对微指令缓存资源的使用进行配置。
[0137]
在一些实施例中,其中所述多线程为四个线程,所述预设的仲裁算法包括:若所述四个线程中至少两个线程的所述使用性能为高性能,则保持所述四个线程的微指令缓存资源的训练次数阈值。
[0138]
在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中只有一个线程的所述使用性能为高性能,则根据具有非高性能的另外三个线程的指令特性重新分配所述三个线程的微指令缓存资源训练次数阈值,同时保持具有高性能的所述线程的微指令缓存资源训练次数阈值。
[0139]
在一些实施例中,其中所述预设的仲裁算法还包括:若所述四个线程中所有线程的使用性能均为非高性能,则根据四个所述线程的指令特性重新分配所述四个线程的微指令缓存资源训练次数阈值或者,平均分配所述四个线程对微指令缓存资源和指令缓存资源的使用。
[0140]
在一些实施例中,其中所述使用参数为所述微指令缓存资源的取指次数和/或根据所述微指令缓存资源的取指次数、所述指令缓存资源的取指次数、所述停止训练取指次数中的至少两项确定的,所述获取模块进一步被配置为:响应于当某一线程的所述微指令缓存资源训练次数大于最小训练次数阈值时,获取所有线程的所述使用参数,或者,在固定
时间间隔,获取所有线程的所述使用参数。
[0141]
本公开实施例还提供了一种计算机程序产品,其特征在于,所述程序包括程序代码指令,用于在所述程序由处理器执行时实现根据本公开中任一项所述的微指令缓存资源的调度方法以及/或者根据本公开中任一项所述的线程监测方法。
[0142]
本公开实施例还提供了一种芯片,包括处理器、存储器和总线,其中所述处理器包括根据本公开中任一项所述的调度装置。
[0143]
本技术使用了特定词语来描述本技术的实施例。如“第一/第二实施例”、“一实施例”、和/或“一些实施例”意指与本技术至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本技术的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
[0144]
此外,本领域技术人员可以理解,本技术的各方面可以通过若干具有可专利性的种类或情况进行说明和描述,包括任何新的和有用的工序、机器、产品或物质的组合,或对他们的任何新的和有用的改进。相应地,本技术的各个方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。此外,本技术的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。
[0145]
除非另有定义,这里使用的所有术语(包括技术和科学术语)具有与本发明所属领域的普通技术人员共同理解的相同含义。还应当理解,诸如在通常字典里定义的那些术语应当被解释为具有与它们在相关技术的上下文中的含义相一致的含义,而不应用理想化或极度形式化的意义来解释,除非这里明确地这样定义。
[0146]
上面是对本发明的说明,而不应被认为是对其的限制。尽管描述了本发明的若干示例性实施例,但本领域技术人员将容易地理解,在不背离本发明的新颖教学和优点的前提下可以对示例性实施例进行许多修改。因此,所有这些修改都意图包含在权利要求书所限定的本发明范围内。应当理解,上面是对本发明的说明,而不应被认为是限于所公开的特定实施例,并且对所公开的实施例以及其他实施例的修改意图包含在所附权利要求书的范围内。本发明由权利要求书及其等效物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1