多线程处理器的线程取指调度方法、系统和多线程处理器的制造方法

文档序号:6505821阅读:196来源:国知局
多线程处理器的线程取指调度方法、系统和多线程处理器的制造方法
【专利摘要】本发明实施例涉及处理器【技术领域】,公开了一种多线程处理器的线程取指调度方法、系统和多线程处理器。其中,该方法包括:为第一线程进行取指;判断当前取到的指令是否包括第一类指令,如果是,暂停为所述第一线程在所述第一类指令之后的取指;所述第一类指令为能改变指令流且无法预知目标地址的指令。实施本发明实施例,可以节省处理器功耗,提高取指单元为其它线程取指的机会。
【专利说明】多线程处理器的线程取指调度方法、系统和多线程处理器

【技术领域】
[0001]本发明涉及处理器【技术领域】,具体涉及一种多线程处理器的线程取指调度方法、系统和多线程处理器。

【背景技术】
[0002]多线程处理器可以让同一个处理器上的多个线程同步执行并共享处理器上的运算和访存资源,可最大限度的实现多发射、乱序的处理,提高处理器运算资源的利用率,缓和由于同个线程内指令的数据依赖或访存缺失带来的延时。
[0003]由于有多个线程需要执行,因此,多线程处理器前端需要选择合适的调度策略选择如何轮流为线程取指,如:某个处理器有16个硬件线程,每个时钟周期取指单元只能选择为其中的I个线程为其取指。为某个线程取指令指的是把该线程的指令从1-Cache(Instruct1n Cache,指令缓存)中取出来,放入该线程对应的指令缓冲队列(Instruct1nBuffer, IB)中。
[0004]目前线程取指调度策略通常有:轮询或固定优先级的线程取指调度策略。
[0005]轮询是指:每个周期固定的给某个线程取指,所有线程轮流被选中,例如对于有16个线程的处理器(线程编号为O?15),我们可以轮流的选择线程O — I — 2 — 3……15 — 0……。如果某个时钟内被选择的线程的IB满了,则暂停为该线程取指,取指单元(Instruct1n Fetch Unit, IFU)在该周期为空操作。作为优化,现有很多的多线程处理器会检测每个线程的状态,每次都从能够为其取指的线程中进行轮询,这样选出来的线程IB就不是满的,取指单元可以为其进行取指。
[0006]固定优先级指:不同线程具有不同的优先级权重,若多个线程同时准备好,则只选择其中优先级最高的线程为其服务。该优先级权重的衡量方法有很多,如:线程IB中指令越少优先级越高、线程被停顿越久优先级越高等。
[0007]现有技术中,每个硬件线程都有独立的IB,取指单元通过检测不同线程的状态,采用轮询或固定优先级的方法挑选出一个已准备好的线程(即该线程IB可以填入新的指令,且该线程无ITLB miss(指令旁路转换缓冲缺失,Instruct1n Translat1n Lookup Buffermiss)或1-Cache miss (指令缓存缺失)等)并为该线程取指,从1-Cache取出指令后放入该线程的IB中。
[0008]在大多数指令集中,有这么一类指令很特殊,它们在执行时,需要其后面所有的指令都停顿住,直到该指令执行完成,该线程后面的指令才能发射执行,我们就称这类指令带Barrier (拦截)语义。这类指令中有很大一部分指令在执行时会改变指令流(即下一条指令的PC地址)而无法对该指令流向进行预测,因此,该指令执行完后需要把其后面的指令清除,重新从正确的PC处开始取指,该线程才能继续执行。
[0009]多线程处理器执行到某个线程中的会改变指令流而无法对该指令流向进行预测的指令(例如ARM(Advanced RISC Machines,先进精简指令集机器)中的ISB(Instruct1nSynchronizat1n Barrier,指令同步壁鱼)、HVC (Hypervisor Call,超级管理程序调用)、SVC (Supervisor Call,操作系统调用)、SMC (Secure Monitor Call,安全监控程序调用)等指令)时,该指令从IB中发射出去后,剩余的指令会被阻塞在IB中,直到执行该指令的模块标识该指令执行完毕。然后将发起清空该线程IB的请求,前端线程取指单元重新为该线程取指。
[0010]现有技术中的上述调度取指方法存在以下缺点:该方法为线程调度取指的方式较单一,且某个线程在取到这类会改变指令流而无法对该指令流向进行预测的指令后,如果它的优先级较高且它的IB仍然能填入新的指令,则取指单元将继续为该线程进行取指,但由于该类指令的特性,该线程继续取到的指令最终将会被清除掉,属于无效的取指,这样既浪费了功耗,也降低了取指单元为其它线程取指的机会。


【发明内容】

[0011]本发明实施例所要解决的技术问题是提供一种多线程处理器的线程取指调度方法、系统和多线程处理器,用于克服现有技术中存在的无效取指问题。
[0012]本发明实施例提供一种多线程处理器的线程取指调度方法,包括:
[0013]为第一线程进行取指;
[0014]判断当前取到的指令是否包括第一类指令,如果是,暂停为所述第一线程在所述第一类指令之后的取指;所述第一类指令为能改变指令流且无法预知目标地址的指令。
[0015]相应的,本发明实施例还提供一种多线程处理器的线程取指调度系统,包括:
[0016]取指单元,用于为第一线程进行取指;
[0017]第一判断单元,用于判断当前取到的指令是否包括第一类指令;所述第一类指令为能改变指令流且无法预知目标地址的指令;
[0018]所述取指单元,还用于当所述第一判断单元的判断结果为否时,暂停为所述第一线程在所述第一类指令之后的取指。
[0019]相应的,本发明实施例还提供一种多线程处理器,所述多线程处理器包括如上所述的多线程处理器的线程取指调度系统。
[0020]本发明实施例中提供的多线程处理器的线程取指调度方法、系统和多线程处理器可以在为一个线程取到第一类指令之后,暂停对该线程的取指,这样可以克服现有技术中存在的无效取指的缺点,节省处理器功耗,同时由于暂停为第一线程取指,也提高了取指单元为其它线程取指的机会,进而提升多线程处理器的处理效率。

【专利附图】

【附图说明】
[0021]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0022]图1是本发明实施例提供的一种提供的多线程处理器的线程取指调度方法的流程第一示意图;
[0023]图2是本发明实施例提供的一种提供的多线程处理器的线程取指调度方法的流程第二示意图;
[0024]图3是本发明实施例提供的一种提供的多线程处理器的线程取指调度系统的结构第一不意图;
[0025]图4是本发明实施例提供的一种提供的多线程处理器的线程取指调度系统的结构第二示意图。

【具体实施方式】
[0026]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0027]本发明实施例中提供了一种多线程处理器的线程取指调度方法、系统和多线程处理器,其核心思想是在为某个线程取到第一类指令时,暂停为该线程的取指,这样可以克服现有技术中的无效取指问题。以下分别进行详细说明。
[0028]本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的对象、顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0029]请参见图1,图1是本发明实施例提供的多线程处理器的线程取指调度方法的流程示意图。如图1所示,本发明实施例提供的多线程处理器的线程取指调度方法可以包括以下内容:
[0030]101、为第一线程进行取指。
[0031]该实施例中,第一线程并不特指某一个特别的线程,可以指代任意一个线程。
[0032]该实施例中,取指单元可以采用预先设定的策略(例如轮询或固定优先级的策略)为当前的线程进行取指,将取到的指令放入该线程的IB中,每次根据终端指向Cache Line(缓存线)位置的不同取回来的指令数目可能有所差异,通常是O?4条。
[0033]102、判断当前取到的指令是否包括第一类指令,如果是,执行步骤103,否则返回步骤101。
[0034]其中,第一类指令为能改变指令流且无法预知目标地址的指令。
[0035]103、暂停为上述第一线程在上述第一类指令之后的取指。
[0036]优选地,如果取指单元一次取回多个指令,其中包括第一类指令,则在将第一类指令放入该第一线程的IB之后,可不将第一类指令之后的其它指令放入该第一线程的IB,第一类指令之后的指令可被丢弃处理。
[0037]上述实施例提供的多线程处理器的线程取指调度方法可以在为一个线程取到第一类指令之后,暂停对该线程的取指,这样可以克服现有技术中存在的无效取指的缺点,节省处理器功耗,同时由于暂停为第一线程取指,也提高了取指单元为其它线程取指的机会,进而提升多线程处理器的处理效率。
[0038]在本发明的一些实施例中,如图2所示,在上述的101之前,该方法还可以包括:
[0039]201、在指令进入指令缓存区(1-Cache)之前,对指令进行预译码,将其中的第一类指令打上标记。
[0040]需要说明的是,具体的,至于在第一类指令上打上何种标记,可以预先设定,本领域技术人员可以根据实际情况进行合适的设定,在此不予具体的限制。
[0041]这样,如图2所示,上述步骤102可具体包括:判断当前取到的指令是否包括带标记的指令,如果是执行步骤103,否则返回步骤101。
[0042]在本发明的一些实施例中,上述步骤103可以包括:
[0043]将上述第一线程的ready (准备好)标识置为无效;和/或
[0044]降低上述第一线程的取指调度优先级。
[0045]对于取指单元采用轮询的策略为各线程取指的情况,将第一线程的ready标识置为无效之后,则取指单元不会再为第一线程取指;
[0046]对于取指单元采用固定优先级的策略为各线程取指的情况,在将第一线程的优先级降低之后,则取指单元则会先为其它优先级高的线程进行取指,优选地,可将第一线程的优先级降至最低级。
[0047]在本发明的一些实施例中,在上述103之后,该方法还可包括:
[0048]202、判断上述第一类指令是否执行完毕,如果是,执行步骤203,否则返回步骤202。
[0049]203、将第一线程的ready标识置为有效和/或将提高上述第一线程的取指调度优先级。
[0050]对于取指单元采用轮询的策略为各线程取指的情况,将第一线程的ready标识置为有效之后,则取指单元可以再为第一线程取指;
[0051]对于取指单元采用固定优先级的策略为各线程取指的情况,在将第一线程的优先级提高之后,则取指单元则可优先为优先级高的第一线程进行取指,优选地,可将第一线程的优先级恢复至降低之前的优先级,或者将第一线程的优先级提高至最高级。
[0052]下面通过具体的实例来描述本发明提供的多线程处理器的线程取指调度方法:
[0053]ARM中的ISB指令就是本发明中所述的能改变指令流且无法预知目标地址的指令,本发明对ISB指令调度的方法如下:
[0054]步骤一:预译码(pre-decode)模块检测到ISB指令,把该指令的标识位(ISB bit)置I (打上标记);
[0055]步骤二:取指单元(IFU)中含有两个组(group),上面组优先级高,下面的组优先级低,每个组内采用轮询的方法选取准备好的线程。在该时钟周期选择了准备好的线程I ;
[0056]步骤三:在为线程I取指时,发现了一条ISB指令;
[0057]步骤四:IFU把ISB指令放入该线程I的IB后,该周期不会再将ISB后续的指令放入该线程I的IB,并将线程I的ready标识清除(即将ready标识置为无效),即认为该线程I没准备好;
[0058]步骤五:执行ISB的模块(1-Cache维护模块)在执行完ISB指令后,通知IFU,让其恢复线程I的ready标识(即是将线程I的ready标识置为有效);
[0059]步骤六:IFU置位线程I的ready位,且此时线程I的IB为空,满足高优先级的条件,进入高优先级的组等待IFU为其取指。
[0060]请参考图3,图3是本发明提供的多线程处理器的线程取指调度系统的结构示意图。如图3所示,本发明提供的多线程处理器的线程取指调度系统包括:
[0061]取指单元301,用于为第一线程进行取指;
[0062]第一判断单元302,用于判断当前取到的指令是否包括第一类指令;其中,第一类指令为能改变指令流且无法预知目标地址的指令;
[0063]取指单元301,还用于当第一判断单元302的判断结果为否时,暂停为上述第一线程在上述第一类指令之后的取指。
[0064]需要说明的是,该实施例中,第一线程并不特指某一个特别的线程,可以指代任意一个线程。
[0065]该实施例中,取指单元可以采用预先设定的策略(例如轮询或固定优先级的策略)为当前的线程进行取指,将取到的指令放入该线程的IB中,每次根据终端指向Cache Line(缓存线)位置的不同取回来的指令数目可能有所差异,通常是O?4条。
[0066]优选地,如果取指单元一次取回多个指令,其中包括第一类指令,则在将第一类指令放入该第一线程的IB之后,可不将第一类指令之后的其它指令放入该第一线程的IB,第一类指令之后的其它指令可被丢弃处理。
[0067]上述实施例提供的多线程处理器的线程取指调度方法可以在为一个线程取到第一类指令之后,暂停对该线程的取指,这样可以克服现有技术中存在的无效取指的缺点,节省处理器功耗,同时也提高了取指单元为其它线程取指的机会。
[0068]在本发明的一些实施例中,如图4所示,该系统还可包括:
[0069]预译码单元303,用于在指令进入指令缓存之前,对指令进行预译码,将其中的第一类指令打上标记。
[0070]需要说明的是,具体的,至于在第一类指令上打上何种标记,可以预先设定,本领域技术人员可以根据实际情况进行合适的设定,在此不予具体的限制。
[0071]在本发明的一些实施例中,第一判断单元302可具体用于通过判断当前取到的指令是否包括带标记的指令来进行当前取到的指令是否包括第一类指令的判断。
[0072]在本发明的一些实施例中,取指单元301可具体采用如下的方法来实现暂停对上述第一线程在上述第一类指令之后的取指:
[0073]取指单元301将上述第一线程的准备好ready标识置为无效;和/或
[0074]取指单元301降低上述第一线程的取指调度优先级。
[0075]对于取指单元采用轮询的策略为各线程取指的情况,将第一线程的ready标识置为无效之后,则取指单元不会再为第一线程取指;
[0076]对于取指单元采用固定优先级的策略为各线程取指的情况,在将第一线程的优先级降低之后,则取指单元则会先为其它优先级高的线程进行取指,优选地,可将第一线程的优先级降至最低级。
[0077]在本发明的一些实施例中,如图4所示,该系统还可包括:
[0078]第二判断单元304,用于判断上述第一类指令是否执行完毕;
[0079]取指单元301还可用于当第二判断单元304的判断结果为是时,将上述第一线程的ready标识置为有效和/或提高上述第一线程的取指调度优先级。
[0080]对于取指单元采用轮询的策略为各线程取指的情况,将第一线程的ready标识置为有效之后,则取指单元可以再为第一线程取指;
[0081]对于取指单元采用固定优先级的策略为各线程取指的情况,在将第一线程的优先级提高之后,则取指单元则可为优先级高的第一线程进行取指,优选地,可将第一线程的优先级恢复至降低之前的优先级,或者将第一线程的优先级提高至最高级。
[0082]本发明还提供一种多线程处理器,该处理器包括上述实施例描述的多线程处理器的线程取指调度系统,具体内容可参考上述实施例的描述,在此不予赘述。
[0083]本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random AccessMemory, RAM)、磁盘或光盘等。
[0084]以上对本发明实施例所提供的多线程处理器的线程取指调度方法、系统和多线程处理器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种多线程处理器的线程取指调度方法,其特征在于,包括: 为第一线程进行取指; 判断当前取到的指令是否包括第一类指令,如果是,暂停为所述第一线程在所述第一类指令之后的取指;所述第一类指令为能改变指令流且无法预知目标地址的指令。
2.根据权利要求1所述的方法,其特征在于,在所述采用预先设置的策略为第一线程进行取指之前,所述方法还包括: 在指令进入指令缓存之前,对指令进行预译码,将其中的第一类指令打上标记。
3.根据权利要求2所述的方法,所述判断当前取到的指令是否包括第一类指令包括: 判断所述当前取到的指令是否包括带有标记的指令。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述暂停对所述第一线程在所述第一类指令之后的取指包括:将所述第一线程的准备好ready标识置为无效和/或将降低所述第一线程的取指调度优先级。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括: 判断所述第一类指令是否执行完毕,如果是,将所述第一线程的准备好ready标识置为有效和/或将提高所述第一线程的取指调度优先级。
6.一种多线程处理器的线程取指调度系统,其特征在于,包括: 取指单元,用于为第一线程进行取指; 第一判断单元,用于判断当前取到的指令是否包括第一类指令;所述第一类指令为能改变指令流且无法预知目标地址的指令; 所述取指单元,还用于当所述第一判断单元的判断结果为否时,暂停为所述第一线程在所述第一类指令之后的取指。
7.根据权利要求6所述的系统,其特征在于,所述系统还包括: 预译码单元,用于在指令进入指令缓存之前,对指令进行预译码,将第一类指令打上标记。
8.根据权利要求7所述的系统,其特征在于,所述第一判断单元具体用于判断所述当前取到的指令是否包括带有标记的指令。
9.根据权利要求6至8任一项所述的系统,其特征在于,所述取指单元具体用于当所述第一判断单元的判断结果为否时,将所述第一线程的准备好ready标识置为无效和/或降低所述第一线程的取指调度优先级。
10.根据权利要求9所述的系统,其特征在于,所述系统还包括: 第二判断单元,用于判断所述第一类指令是否执行完毕; 所述取指单元还用于当所述第二判断单元的判断结果为是,将所述第一线程的准备好ready标识置为有效和/或提高所述第一线程的取指调度优先级。
11.一种多线程处理器,其特征在于,所述多线程处理器包括如权利要求6-10任一项所述的多线程处理器的线程取指调度系统。
【文档编号】G06F9/48GK104298552SQ201310295546
【公开日】2015年1月21日 申请日期:2013年7月15日 优先权日:2013年7月15日
【发明者】李晔, 侯锐, 冯煜晶, 王曦爽 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1