CN112579278B - 用于同步多线程的中央处理单元、方法、设备及存储介质 - Google Patents
用于同步多线程的中央处理单元、方法、设备及存储介质 Download PDFInfo
- Publication number
- CN112579278B CN112579278B CN202011572966.4A CN202011572966A CN112579278B CN 112579278 B CN112579278 B CN 112579278B CN 202011572966 A CN202011572966 A CN 202011572966A CN 112579278 B CN112579278 B CN 112579278B
- Authority
- CN
- China
- Prior art keywords
- thread
- threads
- executed
- prioritized
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
本公开提供了用于同步多线程(SMT)的中央处理单元、方法、设备及存储介质。该中央处理单元包括:优先化线程调度寄存器,设置有优先化线程调度寄存器值;以及中央处理单元核,在该中央处理单元核上同步运行多个线程,其中,该中央处理单元核被配置为:基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率,并且基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程。本公开的中央处理单元可以实现预设的线程调度和/或优先化线程调度。
Description
技术领域
本公开涉及同步多线程,并且更具体地,涉及用于同步多线程的中央处理单元、方法、设备及存储介质。
背景技术
现代CPU核内部一般有多个流水阶段,比如分支预测(Branch prediction)、指令提取(Instruction fetch)、指令解码(Decode)、指令分发与重命名(Dispatch andRename)、指令执行(Execute),指令退出(Retire)等。为了支持高运行频率,每一个流水阶段又可能包含多个流水级。同步多线程(Simultaneous Multi-Threading,SMT)的一个重要特点是在同一个时钟周期,同一个指令执行流水级内的指令可以来自多个线程;而在其他流水阶段,往往一个时钟只选择、处理一个线程的指令。因此,在这些阶段,就需要从多个线程中选择一个来传递到下一个流水阶段,这叫做线程调度。线程调度的选择对SMT整体性能、功耗、线程之间的公平性有重要影响。
发明内容
需要一种优化的SMT技术,以实现预设的线程调度和/或优先化线程调度。
本公开的实施例的一方面公开了一种用于同步多线程的中央处理单元,包括:优先化线程调度寄存器,设置有优先化线程调度寄存器值;以及中央处理单元核,在该中央处理单元核上同步运行多个线程,其中,该中央处理单元核被配置为:基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率,并且基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程。
例如,根据本公开的实施例提供的中央处理单元,其中,该中央处理单元核被配置为通过以下步骤来基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率:基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数,其中该多个线程各自被执行的预设次数与该多个线程中的所有线程被执行的预设次数的总和之间的比值分别为该多个线程中的相应线程被执行的概率;并且其中该中央处理单元核被配置为通过以下步骤来基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程:基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程。
例如,根据本公开的实施例提供的中央处理单元,该中央处理单元核被配置为通过以下步骤来基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数:将该优先化线程调度寄存器值设置为分别对应于该多个线程的多个数值,并且将该多个数值中的各个数值分别设置为该多个线程中的相应线程被执行的预设次数;或者将该优先化线程调度寄存器值设置为单个数值并将该单个数值设置为该多个线程中的优先化线程被执行的预设次数,并且设置至少一个系统默认数值并将该至少一个系统默认数值中的各个系统默认数值分别设置为该多个线程中的至少一个非优先化线程中的相应非优先化线程被执行的预设次数,其中该至少一个系统默认数值中的各个数值均小于该单个数值。
例如,根据本公开的实施例提供的中央处理单元,其中,该中央处理单元核被配置为通过以下步骤来基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程:执行该多个线程中的第一线程;判断该第一线程被执行的次数是否为该第一线程的相应预设次数;以及响应于该第一线程被执行的次数为该第一线程的相应预设次数,执行第二线程。
例如,根据本公开的实施例提供的中央处理单元,其中,该中央处理单元核被配置为通过以下第一方式或第二方式来判断该第一线程被执行的次数是否为该第一线程的相应预设次数:其中,该第一方式包括:对该第一线程被执行的次数进行计数,该计数包括:设置该第一线程被执行的次数的计数值的初始值为0,响应于执行一次该第一线程,将该计数值加1,并且响应于该计数值大于或等于该第一线程的相应预设次数,判断出该第一线程被执行的次数为该第一线程的相应预设次数;其中,该第二方式包括:对该第一线程被执行的次数进行计数,该计数包括:设置该第一线程被执行的次数的计数值的初始值为该第一线程的相应预设次数,响应于执行一次该第一线程,将该计数值减1,并且响应于该计数值小于或等于0,判断出该第一线程被执行的次数为该第一线程的相应预设次数。
例如,根据本公开的实施例提供的中央处理单元,还包括:响应于该第一线程被执行的次数不为该第一线程的相应预设次数,继续执行该第一线程。
例如,根据本公开的实施例提供的中央处理单元,其中,该多个线程各自被执行的概率不完全相等。
本公开的实施例的另一方面公开了一种用于同步多线程的方法,包括:在优先化线程调度寄存器中设置优先化线程调度寄存器值,该优先化线程调度寄存器包括在中央处理单元中;基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率,以及基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程,其中,该多线程在中央处理单元核上执行,并且该中央处理单元核包括在该中央处理单元中。
例如,根据本公开的实施例提供的方法,其中,基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率包括:基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数,其中该多个线程各自被执行的预设次数与该多个线程中的所有线程被执行的预设次数的总和之间的比值分别为该多个线程中的相应线程被执行的概率;并且其中基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程:基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程。
例如,根据本公开的实施例提供的方法,其中,基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数包括:将该优先化线程调度寄存器值设置为分别对应于该多个线程的多个数值,并且将该多个数值中的各个数值分别设置为该多个线程中的相应线程被执行的预设次数;或者将该优先化线程调度寄存器值设置为单个数值并将该单个数值设置为该多个线程中的优先化线程被执行的预设次数,并且设置至少一个系统默认数值并将该至少一个系统默认数值中的各个系统默认数值分别设置为该多个线程中的至少一个非优先化线程中的相应非优先化线程被执行的预设次数,其中该至少一个系统默认数值中的各个数值均小于该单个数值。
例如,根据本公开的实施例提供的方法,其中,基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程包括:执行该多个线程中的第一线程;判断该第一线程被执行的次数是否为该第一线程的相应预设次数;以及响应于该第一线程被执行的次数为该第一线程的相应预设次数,执行第二线程。
例如,根据本公开的实施例提供的方法,其中,判断所述第一线程被执行的次数是否为所述第一线程的相应预设次数包括以下第一方式或第二方式包括:其中,该第一方式包括:对该第一线程被执行的次数进行计数,该计数包括:设置该第一线程被执行的次数的计数值的初始值为0,响应于执行一次该第一线程,将该计数值加1,并且响应于该计数值大于或等于该第一线程的相应预设次数,判断出该第一线程被执行的次数为该第一线程的相应预设次数;其中,该第二方式包括:对该第一线程被执行的次数进行计数,该计数包括:设置该第一线程被执行的次数的计数值的初始值为该第一线程的相应预设次数,响应于执行一次该第一线程,将该计数值减1,并且响应于该计数值小于或等于0,判断出该第一线程被执行的次数为该第一线程的相应预设次数。
例如,根据本公开的实施例提供的方法,还包括:响应于该第一线程被执行的次数不为该第一线程的相应预设次数,继续执行该第一线程。
例如,根据本公开的实施例提供的方法,其中,该多个线程各自被执行的概率不完全相等。
本公开的实施例的又一方面公开了一种用于同步多线程的设备,包括:存储器,存储计算机程序指令;以及处理器,执行所述存储器存储的计算机程序指令,使得所述处理器执行上述的方法。
本公开的实施例的再一方面公开了一种计算机存储介质,其上存储有指令,所述指令可由处理器执行,以执行上述的方法。
本公开的实施例可以实现预设的线程调度和/或优先化线程调度。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对本公开实施例的附图作简单地介绍。明显地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1示出了根据本公开的实施例的支持混合模式SMT或全静态分割SMT的CPU核示意图。
图2示出了根据本公开的实施例的单线程(Single Thread,ST)下静态分割FIFO资源分割的示意图。
图3示出了根据本公开的实施例的在FIFO(first in first out,先入先出队列)中插入一个新条目的算法的示意图。
图4示出了根据本公开的实施例的在FIFO中取出一个条目的算法的示意图。
图5示出了根据本公开的实施例的SMT2下静态分割FIFO资源分割示意图。
图6示出了根据本公开的实施例的用于同步多线程的中央处理单元的示意图。
图7示出了根据本公开的实施例的优先化SMT(Prioritized SMT)下静态分割FIFO的资源分割示意图。
图8示出了根据本公开的实施例的用于同步多线程的方法的流程图。
图9示出了根据本公开的实施例的用于同步多线程的中央处理单元的示意图。
图10示出了根据本公开的实施例的用于同步多线程的方法的流程图。
图11示出了根据本公开的实施例的用于调度多个线程的方法的流程图。
图12示出了根据本公开的实施例的多个线程各自被执行的预设次数来执行多个线程中的相应线程的流程图。
图13示出了根据本公开的实施例的优先化轮询(Prioritized Round Robin)线程调度算法的流程图。
图14示出了根据本公开的实施例的用于同步多线程的中央处理单元的示意图。
图15示出了根据本公开的实施例的用于同步多线程的设备的示意图。
图16示出了根据本公开的实施例的计算机存储介质的示意图。
具体实施方式
现在将详细参考本发明的具体实施例,在附图中例示了本发明的示例。尽管将结合具体实施例描述本发明,但将理解,不是想要将本发明限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本发明的精神和范围内包括的变更、修改和等价物。应注意,本文描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。
为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
注意,接下来要介绍的示例仅是具体的示例,而不作为限制本发明的实施例必须为示出和描述的具体的外形、硬件、连接关系、步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。
为了更好的理解本公开,贯穿本公开使用的术语“中央处理单元核”(centralprocessing unit core,CPU核)是指能够根据数据和指令进行逻辑运算的任何电路、器件或设备。术语“中央处理单元”(CPU)是其中指包括一个或多个上述CPU核的器件或设备。术语“寄存器”是指可以在其中设置数据/数值并可以由CPU或CPU核进行读取和/或写入的任何存储单元。
同步多线程(SMT)是通过在高性能CPU上同时/同步运行多个线程,增加CPU内部资源的利用效率,通过提高多线程的吞吐量来提高整体性能。多线程之间需要共享硬件资源,例如先入先出队列(First in first out,FIFO),即实现按顺序填入、推出(First infirst out)的硬件资源,因而在运行每个线程时,需要为该线程分配相应的硬件资源。SMT内部硬件资源分配有不同的方式,常用的方式有:1)全静态分割(All staticallypartitioned)模式——所有硬件资源根据SMT支持线程个数等分;2)全动态共享——所有硬件资源由所有线程动态共享;3)混合模式——某些硬件资源由所有线程动态共享,而其他资源静态分割;4)其他方式——例如IBM Power 9,其SMT4是由两个SMT2切片(slice)组成,这两个切片之间全静态分割所有资源,但是一个切片内部资源全动态共享。
现代CPU核内部一般有多个流水阶段,比如分支预测(Branch prediction)、指令提取(Instruction fetch)、指令解码(Decode)、指令分发与重命名(Dispatch andRename)、指令执行(Execute),指令退出(Retire)等。为了支持高运行频率,每一个流水阶段又可能包含多个流水级。SMT的一个重要特点是在同一个时钟周期,同一个指令执行流水级内的指令可以来自多个线程;而在其他流水阶段,往往一个时钟只选择、处理一个线程的指令。因此,在这些阶段,就需要从多个线程中选择一个来传递到下一个流水阶段,这叫做线程调度。线程调度的选择对SMT整体性能、功耗、线程之间的公平性有重要影响。
图1示出了根据本公开的实施例的支持混合模式SMT或全静态分割SMT的CPU核100示意图。该示例CPU核100包括多个流水阶段:分支预测(Branch prediction)102、指令提取(Fetch instruction)104、指令解码(Decode instruction)106、指令分发(Dispatchinstruction)108、指令执行(Execute instruction)110,指令退出(Retire instruction)112等。每个阶段有可能由多个流水级组成。这些阶段之间由相应的静态分割FIFO资源连接,如分支预测FIFO资源122、指令提取FIFO资源124、指令解码FIFO资源126、指令退出FIFO资源128等,即每个线程有自己的静态分割FIFO资源。图1的示例中显示4个线程,即SMT4,然而本公开的实施例不限于此,SMT还可以为SMT2、SMT8等。
指令分发与指令执行阶段间有一个或多个全动态共享的队列(图1仅示出一个队列114),每个队列每时钟可能选取一个或者多个指令出来。每个队列的指令提取算法是选择最老的就绪指令来执行(oldest ready first out),并且同一个时钟所有队列所选择的多个指令可以来自不同的线程。可以理解的是,虽然图1中未示出,但是CPU核内还可能包括其他动态共享资源。
虚线箭头表示重定向指令流,其连接到下一PC多路复用116,以开始进行多个流水阶段。图1中的星标表示线程调度节点,对SMT2而言,这些线程调度节点使用轮询(RoundRobin)算法就可以。SMT4及更多活跃线程个数的SMT或许会需要更为复杂的线程调度算法以提高性能及实现调度的公平性。
目前,混合模式SMT或全静态分割SMT下所有静态分割资源都是平分的,也就是SMT2时,每个线程获得一半的静态分割资源;SMT4时,每个线程获得四分之一的静态分割资源,等等。
图2示出了根据本公开的实施例的单线程(ST)下静态分割FIFO资源分割的示意图200。在本公开中,为便于描述,下文中的“资源”或者“FIFO资源”一般是指静态分割FIFO资源,除非另有说明。在单线程下,活跃线程(线程T0)可以使用一个静态分割FIFO的全部资源。参考图2,灰色条目是已经被使用的条目,而白色条目是未被使用的条目。FIFO资源可以由四个指针来标识(指向),其中:first标识FIFO资源第一个可用条目,其在ST/SMT下设置后就固定不变;last标识FIFO资源最后一个可用条目,其在ST/SMT下设置后就固定不变;begin标识FIFO资源最新的一个有效(已使用)条目,初始设为first;end标识FIFO资源最老的一个有效条目前面的一个条目,初始设为first。first和last指针用来标识FIFO的可用资源范围,而begin和end指针则用来标识FIFO的已用资源范围。FIFO的主要操作为插入新的条目(从begin后插入新的条目)和取出一个有效的条目(从end处取出(并删除)最老的条目)。这两个操作相应的算法见图3和图4。
图3示出了根据本公开的实施例的在FIFO资源中插入一个新条目的算法的示意图300。参考图3,先进先出队列(FIFO)资源插入新条目的算法包括:
1.设tmp为begin+1;
2.如果tmp大于last,则设tmp等于first;
3.如果tmp等于end,则该队列已满,无法插入新的条目,返回失败信号;
4.否则,将新内容填入tmp所指向的该队列条目;
5.设begin为tmp;
6.返回成功信号。
图4示出了根据本公开的实施例的在FIFO资源中取出一个条目的算法的示意图400。
参考图4,先进先出队列(FIFO)资源删除最老条目的算法包括:
1.若end等于begin,则该队列无可用条目,返回失败信号;
2.否则,将end值加1;
3.若end等于last,则设end等于first;
4.取出队列中end指向的条目中的内容;
5.返回成功信号。
使用这上述参照图3和图4描述的算法,end所指向的队列条目无法被使用,因此实际可使用条目个数比硬件资源提供的个数少一个;但是本示例算法相对其他算法更简单明了。
图5示出了根据本公开的实施例的SMT2下静态分割FIFO资源分割示意图500。参考图5,每个线程(线程T0和T1)都有自己的first、last、begin、以及end指针。T0_first及T0_last标识线程0的FIFO的可用资源范围,而T0_begin及T0_end标识线程0的FIFO的已用资源范围。T1_first及T1_last标识线程1的FIFO的可用资源范围,而T1_begin及T1_end标识线程1的FIFO的已用资源范围。灰色条目是已用的、有效的条目,而白色条目是可用的、无效的条目。每个线程对属于自己的一半FIFO资源的操作同样可以使用图3及图4中的算法。
在一个实际的SMT运行环境中,并不是每个线程的优先级都是一样的。针对一些重要线程,即优先化线程(高优先级线程),我们并不希望显著降低其性能。因而,在SMT下,静态分割FIFO资源的方式就妨碍了重要线程与非优先化线程(低优先级线程)通过SMT共享CPU资源。针对这种情况,业界提出优先化SMT(Prioritized SMT)的概念,以在SMT中避免降低重要线程的性能。
目前Prioritized SMT的实现都是在全动态共享模式SMT下通过线程调度算法来实现的,例如参见:N.Yamasaki,I.Magaki and T.Itou,"Prioritized SMT Architecturewith IPC Control Method for Real-Time Processing,"13th IEEE Real Time andEmbedded Technology and Applications Symposium(RTAS'07),Bellevue,WA,2007,pp.12-21,doi:10.1109/RTAS.2007.28,以及Kato,S.,&Yamasaki,N.(2007).Fixed-priority scheduling on prioritized SMT processor.In Proceedings of the 19thIASTED International Conference on Parallel and Distributed Computing andSystems(pp.116-123)。
目前业界普遍使用的混合模式SMT或全静态分割SMT是平分静态分割资源的,这种资源分割方式单一。此外,如果系统对线程性能、响应时间等没有特殊要求,这种静态资源分割方式是可行的。但是由于平分静态分割资源造成单个线程可用资源的大量减少,SMT下每个线程的性能相对于其单线程下的性能会有显著下降。如果某个重要线程有预定运行要求(例如,性能、响应时间的要求),系统往往无法使用这种目前平分静态分割资源模式下的SMT,从而极大地限制了SMT这个重要的CPU性能提升特性的使用。
针对这种情况,本发明提供了一种用于SMT的中央处理单元(CPU)及方法。具体地,本发明提出以下CPU微架构更新以在混合资源分割模式SMT或全静态分割SMT内实现更多的资源分割模式和/或prioritized SMT,并且提供预设的线程调度和/或优先化线程调度。一方面,根据本公开的实施例提供更多的资源分割模式:静态分割资源不再只能平分,而是根据资源分割模式实现来更多的资源分割模式和/或进行有倾向性的分配。另一方面,根据本公开的实施例提出一种新的线程调度方法来进行预设的线程调度和/或优先化线程调度。
资源分割
图6示出了根据本公开的实施例的用于同步多线程的中央处理单元600的示意图。
为了描述的简便,图6仅示出了本公开的主要的组件。然而,如本领域的技术人员所知的,中央处理单元600还可以包括其他寄存器或者其他合适的器件,诸如存储器等,并且中央处理单元600还可以包括多个中央处理单元核。
参考图6,中央处理单元600可以包括资源分割寄存器(Resource PartitionRegister,RPR)605,资源分割寄存器605可以设置有资源分割寄存器值(RPR值),该资源分割寄存器值对应于多个线程各自的静态分割先入先出队列的资源分割占比。中央处理单元600还包括中央处理单元核610,例如中央处理单元核610可以为图1所示的CPU核。在中央处理单元核610上可以同步运行该多个线程,并且中央处理单元核610被配置为基于该资源分割寄存器值所对应的多个线程各自的静态分割先入先出队列的资源分割占比来为该多个线程中的相应线程进行资源分割。
如此,与混合模式SMT或全静态分割SMT下的静态分割FIFO资源只能是每个线程平分FIFO资源相比,根据本公开的实施例的中央处理单元100可以为SMT提供更多的资源分割模式和/或prioritized SMT。
为实现更多的资源分割模式和/或prioritized SMT,根据本公开的实施例的CPU基于新增资源分割寄存器来控制所有静态分割FIFO的资源分割占比。结合如上图6,中央处理单元100包括资源分割寄存器105,资源分割寄存器105设置有资源分割寄存器值(RPR值)。中央处理单元核110可以基于(RPR值)来控制每个线程的静态分割先入先出队列的资源分割占比。
在一些实施例中,资源分割寄存器值对应于多个线程各自的静态分割先入先出队列的资源分割占比。表1示出了SMT2下的RPR值与线程的资源分割占比的对应关系的示例。为便于描述,本公开中的“资源分割占比”是指多个线程各自的静态分割先入先出队列资源与多个线程共享的静态分割先入先出队列资源范围之间的比例分别为所述多个线程中的相应线程的资源分割占比,换句话说,即为某一线程分配的静态分割FIFO资源与所有多个线程中的所有线程共享的静态分割FIFO资源之间的比例。
表1SMT2下的RPR值与线程的资源分割占比的对应关系
RPR值 | 线程0的资源分割占比 | 线程1的资源分割占比 |
0 | 1/2 | 1/2 |
1 | 3/4 | 1/4 |
2 | 5/6 | 1/6 |
3 | 7/8 | 1/8 |
参见表1,当RPR值为0时,该RPR值对应于线程0的FIFO的资源分割占比和线程1的FIFO的资源分割占比均为1/2。当RPR值为1时,该RPR值对应于线程0的FIFO的资源分割占比为3/4,而线程1的FIFO的资源分割占比为1/4。当RPR值为2时,该RPR值对应于线程0的FIFO的资源分割占比为5/6,而线程1的FIFO的资源分割占比为1/6。当RPR值为3时,该RPR值对应于线程0的FIFO的资源分割占比为7/8,而线程1的FIFO的资源分割占比为1/8。
在一些实施例中,可以在设计CPU时预先设定RPR值与多个线程各自的FIFO的资源分割占比的对应关系,然而实施例不限于此。在另一些实施例中,可以在设计CPU时预先设定RPR值与多个线程中的各个线程的FIFO资源之间的比例关系,例如结合表1所述,当RPR值为0时,对应于线程0和线程1之间的FIFO资源的比例为1:1,并且因此RPR值仍然对应于各个线程的FIFO的资源分割占比的对应关系,即对应于线程0的FIFO的资源分割占比和线程1的FIFO的资源分割占比均为1/2。也就是说,基于RPR值的多个线程中的各个线程的FIFO资源之间的比例也反映在基于RPR值对应的多个线程中的相应线程的资源分割占比上,并因此落在本公开的基于资源分割占比来为多个线程中的相应线程进行资源分割的实施例中。
可以理解的是,表1仅是示例性的,可以实现RPR值与更多线程的资源分割占比的对应关系,并且RPR值与这些线程的资源分割占比的值可以变化。
在一些实施例中,该多个线程各自的静态分割先入先出队列的资源分割占比不完全相等。在一个示例中,参见表1,RPR值可以用2-bit来表示,并且被设置为0-3。当RPR值为0时,线程0和线程1的资源分割占比均为1/2,即现有的静态分割方式。然而,当RPR值被设置为1、2或3时,线程0和线程1的资源分割占比不相等,线程0因此比线程1获得更多的资源,此时,线程0可以是优先化线程,线程1可以是非优先化线程,因此作为优先化线程的线程0比作为非优先化线程的线程1具有更多的硬件资源,因而可以实现prioritized SMT。在另一个示例中,当存在2个以上的同步运行的线程时,例如SMT4,可以设置这4个线程各自的静态分割先入先出队列的资源分割占比不完全相等,如线程0-3的相应资源分割占比分别为5/8、1/8、1/8、1/8,即不是平分静态分割方式,并且可以将线程0作为优先化线程。因而,根据本公开的中央处理单元100可以提供更多的资源分割模式,以及实现prioritized SMT,从而降低使用SMT对优先化线程性能、响应延迟的影响。
在一些实施例中,该中央处理单元核110被配置为通过以下步骤来基于该资源分割寄存器值所对应的多个线程各自的静态分割先入先出队列的资源分割占比来为该多个线程中的相应线程进行资源分割:调整用于标识该多个线程各自的静态分割先入先出队列的可用资源范围的指针的位置,使得该多个线程各自的该可用资源范围的占比等于该多个线程中的相应线程的静态分割先入先出队列的资源分割占比,其中该多个线程各自的静态分割先入先出队列的可用资源范围与该多个线程共享的静态分割先入先出队列的可用资源范围之间的比例分别为该多个线程中的相应线程的可用资源范围的占比,如下结合图7详细描述。
图7示出了根据本公开的实施例的优先化SMT(Prioritized SMT)下静态分割FIFO的资源分割示意图700。
图7仅示出了两个同步运行的线程(SMT2)共享静态分割FIFO的情况,然而实施例不限于此。参考图7,T0_first标识线程0的静态分割先入先出队列的第一个可用条目,T0_last标识线程0的静态分割先入先出队列的最后一个可用条目,T0_first及T0_last标识线程0的FIFO的可用资源范围,而T0_begin及T0_end标识线程0的FIFO的已用资源范围。同样,T1_first标识线程1的静态分割先入先出队列的第一个可用条目,T1_last标识线程1的静态分割先入先出队列的最后一个可用条目,T1_first及T1_last标识线程1的FIFO的可用资源范围,而T1_begin及T1_end标识线程1的FIFO的已用资源范围。灰色条目是已用的、有效的条目,而白色条目是可用的、无效的条目。图7显示了prioritized SMT下给线程0分配更多资源的示例。
当系统在SMT下改变或设置RPR值时,中央处理单元核110可以基于该资源分割寄存器值所对应的多个线程各自的静态分割先入先出队列的资源分割占比来为该多个线程中的相应线程进行资源分割。例如,参见表1,当RPR值为1时,该RPR值对应于线程0的FIFO的资源分割占比为3/4,而线程1的FIFO的资源分割占比为1/4。结合图7,然后,中央处理单元核110可以调整指针T0_first、T0_last、T1_first及T1_last的位置,使得由T0_first和T0_last标识的线程0的可用资源范围的占比(即由T0_first和T0_last标识的线程0的可用资源范围的占比与由T0_first及T1_last标识的整个FIFO的可用资源范围的之间比例)等于线程0的FIFO的资源分割占比(即3/4),并且使得由T1_first及T1_last标识的线程1的可用资源范围的占比等于线程1的FIFO的资源分割占比(即1/4),从而保证各个线程获得相应的资源分割占比。
在一些实施例中,标识该多个线程各自的静态分割先入先出队列的可用资源范围的指针可以包括标识该多个线程中的一个线程的静态分割先入先出队列的第一个可用条目的第一指针和标识该多个线程中的该一个线程的静态分割先入先出队列的最后一个可用条目的第二指针,其中,该第一指针的位置和该第二指针的位置之间的区域为该一个线程的静态分割先入先出队列的可用资源范围。例如,图7示出了标识线程0的静态分割先入先出队列的第一个可用条目的T0_first和标识线程0的静态分割先入先出队列的最后一个可用条目的T0_last,其中T0_first和T0_last的位置之间的区域为线程0的静态分割先入先出队列的可用资源范围。类似的,图7还示出了标识线程1的静态分割先入先出队列的第一个可用条目的T1_first和标识线程1的静态分割先入先出队列的最后一个可用条目的T1_last,其中T1_first和T1_last的位置之间的区域为线程1的静态分割先入先出队列的可用资源范围。
因此,在一些实施例中,调整用于标识该多个线程各自的静态分割先入先出队列的可用资源范围的指针的位置包括:调整该第一指针和该第二指针中的至少一个。在一个示例中,参见图7,线程0和线程1共享整个静态分割FIFO资源,T0_first及T1_last标识整个FIFO的可用资源范围。本文将T0_first及T1_last等用于标识整个FIFO的可用资源范围的边界的指针称为边界指针,一般地,边界指针不需要调整。当改变或设置RPR值时,T0_first及T1_last不需要被调整,而仅需要调整所有静态分割FIFO资源的T0_last及T1_first指针的位置。即对于线程0,仅需要调整一个指针T0_last,对于线程1,仅需要调整一个指针T1_first,以保证每个线程获得相应的资源分割占比。可以理解的是,当标识某一线程的静态分割FIFO的可用资源的范围的两个指针中包括边界指针时,当改变或设置RPR值时,仅需要调整两个指针中除边界指针外的一个指针。当标识某一线程的静态分割FIFO的可用资源的范围的两个指针不包括边界指针时,当改变或设置RPR值时,可以调整这两个指针。
如此,根据本公开的中央处理单元可以在混合模式SMT或全静态分割SMT下实现资源非公平分配并不需要更为复杂的逻辑算法,而只需要调整相应的静态分割FIFO的指针的位置,并且相应的FIFO插入、取出算法则无需改动,因而易于实现和广泛使用。
在一些实施例中,RPR值的默认值可以被设置为表1中的任何一个,例如,RPR值的默认值可以被设置为0,表示在默认情况下,线程之间每个线程的先入先出队列的资源分割占比相等。
在一些实施例中,RPR值可以通过比应用程序具有更高权限的软件来设置,诸如操作系统、固件(Firmware)或者虚拟机监视器(Hypervisor)等拥有更高权限的软件,这可以防止诸如恶意应用程序篡改所占用的FIFO资源,提高系统的安全性。
在一些实施例中,RPR值可以基于实测出在该RPR值下多个线程满足预定运行要求(例如,性能、响应延迟要求等)来确定。例如,针对某一个或多个实时的线程(如一个或多个优先化线程)应该选择哪一个RPR值以满足其性能、响应延迟的要求,需要对该线程在不同RPR值下的性能进行实测,以决定一个最优RPR值。
在一些实施例中,由于SMT4、SMT8下每个线程性能会比SMT2下下降更多,因此,多个线程优选为两个线程(SMT2)。
根据上述实施例,与原有混合模式SMT或全静态分割SMT下只能平分静态分割资源的方式相比,根据本公开的中央处理单元可以实现更多的资源分割方式以及实现prioritized SMT,并保证重要的、实时的线程也可以使用SMT而性能不会有显著损失。
结合如上图6和图7公开的用于同步多线程的中央处理单元,图8示出了根据本公开的实施例的用于同步多线程的方法800的流程图。图8所示的方法可以应用于图6所示的中央处理单元600中,然而不限于此,图8所示的实施例可以应用于包括可以实现逻辑计算功能的计算单元以及可以实现存储功能的存储单元的任何设备中。
参考图8,在步骤S805中,在资源分割寄存器中设置资源分割寄存器值,该资源分割寄存器包括在中央处理单元中,该资源分割寄存器值对应于多个线程各自的静态分割先入先出队列的资源分割占比。在步骤S810中,基于该资源分割寄存器值所对应的多个线程各自的静态分割先入先出队列的资源分割占比来为该多个线程中的相应线程进行资源分割,其中,在该多个线程在中央处理单元核上同步运行,并且该中央处理单元核包括在该中央处理单元中。
如上结合图6和图7所描述的,在一些实施例中,基于该资源分割寄存器值所对应的多个线程各自的静态分割先入先出队列的资源分割占比来为该多个线程中的相应线程进行资源分割包括:调整用于标识该多个线程各自的静态分割先入先出队列的可用资源范围的指针的位置,使得该多个线程各自的该可用资源范围的占比等于该多个线程中的相应线程的静态分割先入先出队列的资源分割占比,其中该多个线程各自的静态分割先入先出队列的可用资源范围与该多个线程共享的静态分割先入先出队列的可用资源范围之间的比例分别为该多个线程中的相应线程的可用资源范围的占比。
在一些实施例中,该指针包括第一指针和第二指针,该第一指针标识该多个线程中的一个线程的静态分割先入先出队列的第一个可用条目,该第二指针标识该多个线程中的该一个线程的静态分割先入先出队列的最后一个可用条目,其中,该第一指针的位置和该第二指针的位置之间的区域为该一个线程的静态分割先入先出队列的可用资源范围,并且调整用于标识该多个线程各自的静态分割先入先出队列的可用资源范围的指针的位置包括:调整该第一指针和该第二指针中的至少一个。
在一些实施例中,该多个线程各自的静态分割先入先出队列的资源分割占比不完全相等。
在一些实施例中,资源分割寄存器值通过比应用程序具有更高权限的软件来设置。
在一些实施例中,资源分割寄存器值基于实测出在资源分割寄存器值下多个线程中的优先化线程满足预定运行要求来确定。
在一些实施例中,多个线程为两个线程(SMT2)。
如此,上述参照图6和图7描述的用于同步多线程的中央处理单元的技术效果同样可以映射到上述参照图8描述的用于同步多线程的方法及其附加方面。
线程调度
图9示出了根据本公开的实施例的用于同步多线程的中央处理单元900的示意图。
为了描述的简便,图9仅示出了本公开的主要的组件。然而,如本领域的技术人员所知的,中央处理单元900还可以包括其他寄存器或者其他合适的器件,如存储器等,并且中央处理单元900还可以包括多个单元核。
参考图9,中央处理单元900可以包括优先化线程调度寄存器(PrioritizedThread Arbitration Register,PTAR)905,优先化线程调度寄存器905设置有优先化线程调度寄存器值(PTAR值)。中央处理单元900还包括中央处理单元核910,例如中央处理单元核910可以为图1所示的CPU核,因此,中央处理单元核910可以与图1所示的中央处理单元核610相同。在中央处理单元核910上可以同步运行该多个线程,并且中央处理单元核910被配置为:基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率,并且基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程。
如此,根据本公开的实施例的中央处理单元900可以实现基于PTAR值而确定的预设的线程调度和/或优先化线程调度。
结合如上图9公开的用于同步多线程的中央处理单元,图10示出了根据本公开的实施例的用于同步多线程的方法1000的流程图。图10所示的方法可以应用于图9所示的中央处理单元900中,然而不限于此,图10所示的实施例可以应用于包括可以实现逻辑计算功能的计算单元以及可以实现存储功能的存储单元的任何设备中。
参考图10,在步骤S1005中,在优先化线程调度寄存器中设置优先化线程调度寄存器值,该优先化线程调度寄存器包括在中央处理单元中。在步骤S1010中,基于该优先化线程调度寄存器值确定该多个线程各自被执行的概率。在步骤S1015中,基于所确定的该多个线程各自被执行的概率来执行该多个线程中的相应线程。其中,在该中央处理单元核上同步运行该多个线程,并且中央处理单元核包括在中央处理单元中。
如此,上述参照图9描述的用于同步多线程的中央处理单元的技术效果同样可以映射到上述参照图10描述的用于同步多线程的方法。
图11示出了根据本公开的实施例的用于调度多个线程的方法1100的流程图,下面结合图9和图11描述由中央处理单元核910执行的调度多个线程的更详尽的实施例,例如步骤S1105可以是步骤S1010更详尽的实施例,并且步骤S1110可以是步骤S1015更详尽的实施例。
参考图11,在步骤S1105中,基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数。在步骤S1110中,基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程。
在一些实施例中,在步骤S1105中,中央处理单元核910可以基于该优先化线程调度寄存器值确定该多个线程各自被执行的预设次数,其中该多个线程各自被执行的预设次数与该多个线程中的所有线程被执行的预设次数的总和之间的比值分别为该多个线程中的相应线程被执行的概率。
在一个示例中,优先化线程调度寄存器905可以设置有PTAR值,将该优先化线程调度寄存器值设置为分别对应于该多个线程的多个数值,并且将该多个数值中的各个数值分别设置为该多个线程中的相应线程被执行的预设次数。例如,多个数值可以为“2”、“1”,其中“2”表示线程0被执行的预设次数,而“1”表示线程1被执行的预设次数,即可以基于PTAR值来确定线程0和线程1被执行的概率分别为2/3和1/3,或者说以2:1的比例来分别执行线程0和线程1。在该示例中,线程0的执行次数高于线程1的执行次数,也就是说,线程0被执行的概率高于线程1被执行的概率,因而线程0可以是优先化线程,并且线程1可以是非优先化线程。可以理解的是,上述数值以及数值的个数仅是示例性的,可以根据实际需要设置合适的数值以及数值的个数(即线程个数)。
在另一个示例中,优先化线程调度寄存器905可以设置有PTAR值,该PTAR值可以为单个值并将该单个数值设置为该多个线程中的优先化线程被执行的预设次数,并且设置至少一个系统默认数值并将该至少一个系统默认数值中的各个系统默认数值分别设置为该多个线程中的至少一个非优先化线程中的相应非优先化线程被执行的预设次数,其中该至少一个系统默认数值中的各个数值均小于该单个数值。例如,单个数值为“2”,因此表示优先化线程(例如线程0)被执行的预设次数,而至少一个系统默认数值为“1”,因此非优先化线程(例如线程1)被执行的预设次数可以为1,即可以基于PTAR值来确定线程0和线程1被执行的概率分别为2/3和1/3。对于例如SMT4,可以设置单个数值为“2”来表示优先化线程(例如线程0)被执行的预设次数,并且可以设置三个系统默认数值为“1”来分别表示除优先化线程外的三个非优先化线程中的相应线程被执行的预设次数。可以理解的是,上述数值以及数值的个数仅是示例性的,可以根据实际需要设置合适的数值以及数值的个数,例如,设置至少一个系统默认数值中的各个数值均小于该单个数值,以使得优先化线程被执行的概率高于非优先化线程被执行的概率。
在一些实施例中,在步骤S1110中,中央处理单元核910可以基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程。例如,线程0和线程1各自的预设次数分别为“2”和“1”,因此可以在每个周期内执行线程0为“2”次并且执行线程1为“1”次,即每3次执行内执行线程0为“2”次并且执行线程1为“1”次,以实现线程0和线程1被执行的概率分别为2/3和1/3。
如此,每个线程可以基于相应预设次数来被执行,从而实现预设的线程调度。此外,与如前所述的多个线程各自的静态分割先入先出队列的资源分割占比不完全相等类似的,所述多个线程各自被执行的概率不完全相等。例如,基于PTAR值,可以设置每个线程对应的预设次数可以不同,例如优先化线程对应的预设次数可以高于非优先化线程对应的次数,从而执行优先化线程的概率高于非优先化线程,从而降低使用SMT对优先化线程性能、响应延迟的影响。
下面结合图9和图12描述由中央处理单元核910执行基于所确定的该多个线程各自被执行的预设次数来执行该多个线程中的相应线程(S1110)的更详尽的实施例。图12示出了根据本公开的实施例的多个线程各自被执行的预设次数来执行多个线程中的相应线程1200的流程图。
参见图12,在步骤S1205中,中央处理单元核910可以执行多个线程中的第一线程。在步骤S1210中,中央处理单元核910可以判断该第一线程被执行的次数是否为该第一线程的相应预设次数。响应于该第一线程被执行的次数为该第一线程的相应预设次数,在步骤S1215中,执行第二线程。在附加的实施例中,响应于第一线程被执行的次数不为该第一线程的相应预设次数,表明该第一线程未执行相应预设次数,该方法可以回到步骤S1205以继续执行该第一线程。
可以以与图12所示第一线程的方法类似地执行第二线程,以确保第二线程执行相应预设次数。在一个示例中,当仅存在两个同步运行的线程时,在第二线程执行了相应预设次数后,表明当前周期内所有线程执行了相应预设次数。随后,该方法可以返回第一线程,并且可以以类似的方式进行下一个周期的操作。当存在两个以上的同步运行的多个线程时,在第二线程执行了相应预设次数后,可以继续执行第三线程,以此类推,直到所有线程执行了相应预设次数。随后,该方法可以返回第一线程,并且可以以相同的方式进行下一个周期的操作。其中,从第一线程到第二线程或从第二线程到第三线程的执行可以基于预设的顺序,例如,线程0->线程1->线程2->线程3->(下一周期)线程0的顺序,或者第二线程或第三线程可以是剩余线程中的优先级最高的线程,或者可以是剩余线程中随机选择的线程来选择执行。根据上述步骤,可以实现每个周期内多个线程中的每个线程执行了相应预设次数,从而实现预设的线程调度和/或优先化线程调度。
在一些实施例中,执行第一线程(S1205)还可以包括:判断第一线程能否被执行;响应于第一线程能被执行,执行第一线程;并且响应于第一线程不能被执行,选择另一线程以执行。该另一线程、以及在系统开始时的第一线程(即首次执行的线程)可以是基于预设的顺序选择的线程,例如,线程0->线程1->线程2->线程3->(下一周期)线程0的顺序。或者可以是剩余线程中的优先级最高的线程,或者可以是剩余线程中随机选择的线程。
在一些实施例中,响应于该另一线程是最后一个被选择的线程并且不能被执行,这表明所有的线程均不能被执行,可以返回失败。
在一些实施例中,判断第一线程被执行的次数是否为第一线程的相应预设次数(S1210)还包括:对第一线程被执行的次数进行计数,例如对第一线程被执行的次数采用加1或者减1或者其他合适的计数方法,例如每执行一次第一线程,将第一线程对应的计数值加1或者减1。
在一个示例中,该计数可以包括:设置第一线程被执行的次数的计数值的初始值为0,响应于执行一次第一线程,将该计数值加1。因此,判断第一线程被执行的次数是否为第一线程的相应预设次数即为判断该计数值是否大于或等于第一线程的相应预设次数。响应于计数值大于或等于第一线程的相应预设次数,表明第一线程被执行了预设次数,判断出第一线程被执行的次数为第一线程的相应预设次数,因此可以执行另一线程,即选择到另一线程以执行与上述第一线程相同的操作。
在另一个示例中,该计数可以包括:设置第一线程被执行的次数的计数值的初始值为第一线程的相应预设次数,响应于执行一次第一线程,将该计数值减1。因此,判断第一线程被执行的次数是否为第一线程的相应预设次数即为判断该计数值是否小于或等于0。响应于计数值小于或等于0,表明第一线程被执行了预设次数,判断出第一线程被执行的次数为第一线程的相应预设次数,因此可以执行另一线程。
如此,可以保证一个周期内每个线程执行了预设次数。如果需要进行下一周期的线程执行,可以重置该计数值,例如对于加1的方法,可以将多个线程的相应计数值重置为0;对比减1的方法,可以将多个线程的相应计数值重置为相应预设次数。
在一些实施例中,与上述资源分割寄存器值的设置相同,优先化线程调度寄存器值可以通过比应用程序具有更高权限的软件来设置。
在一些实施例中,与上述资源分割寄存器值的设置相同,优先化线程调度寄存器值可以基于实测出在该优先化线程调度寄存器值下多个线程中的优先化线程满足预定运行要求来确定。
如此,可以确保多个线程中的每个线程执行了预设次数,实现预设的线程调度和/或优先化线程调度,降低使用SMT对优先化线程性能、响应延迟的影响。
图13示出了Prioritized Round Robin线程调度算法1300的流程图。图13所示的Prioritized Round Robin线程调度算法可以是图10至图12所示的用于同步多线程的方法及其附加方面的一个具体的算法实现。例如,图13所示的算法通过如上所述的减1的方法对第一线程被执行的次数进行计数并且以线程0->线程1->线程2->线程3->(下一周期)线程0的顺序来选择另一线程。可以理解的,该算法仅是示例性的,可以存在如上描述的方法以及其他合适的算法以实现本公开的基于预设次数来执行每个线程。
参考图13,其中,N表示活跃线程个数;PTID表示当前被选择的线程,其值大于等于0,小于N;T_CNT[T]表示线程T被执行的预设次数,大于等于1,可以由系统软件在系统启动时设置,如上所述基于PTAR值来设置。若线程T的T_CNT比其他线程的T_CNT大,则线程T有更大概率被选择以执行。CNT[T]表示当前线程T剩余被执行次数,其在系统初始及选择到另一线程时被重置为T_CNT[T]。每次线程T被执行,将CNT[T]减1(即如上所述通过减1的方法对第一线程被执行的次数进行计数,然而不限于此)。当CNT[PTID]为0时,表示当前线程执行了预设次数,则PTID被设置成另一CNT[T]大于0的线程T,即另一尚未执行预设次数的线程。
上述算法的具体步骤如下:
1.设置T为PTID,以及C=0;
2.线程T可以被执行时,执行线程T,并跳至步骤6;
3.否则,尝试另一线程,例如设置T=(T+1)%N(即选择当前线程的下一线程),以及设置C=C+1;
4.C小于N时,重新执行步骤2;
5.否则,本时钟所有线程都无法被选择,返回假值;
6.CNT[T]大于0时,则将CNT[T]减1,并跳至步骤11;
7.否则,若T不等于PTID,也跳至步骤11;
8.重置CNT[PTID]=T_CNT[PTID];
9.设置PTID=(PTID+1)%N(即选择当前线程的下一线程作为要选择执行的线程);
10.若CNT[PTID]等于0(表明该线程目前执行了足够的次数),则跳至步骤8;
11.返回真值(表明本时钟选择了一个线程来执行)。
该Prioritized Round Robin线程调度算法由图9所示的中央处理单元核910来实现并且可以被使用在所有图1中的线程调度节点上。需要注意的是每个节点判断某个线程是否能够被执行的条件不同。比如指令提取节点,它前面连接指令提取FIFO,后面连接指令分发FIFO。在这个节点如果一个线程的指令提取FIFO不为空,同时指令分发FIFO不满,则该线程可以被执行。
如此,根据上述算法,参见图13,该Prioritized Round Robin线程调度算法可以基本上按照预设次数来执行每个线程。上述算法仅是示例性的,在本公开的教导下,可以设想出其他合适的算法,以基于预设次数来执行每个线程。
图14示出了根据本公开的实施例的用于同步多线程的中央处理单元1400的示意图。参考图14,中央处理单元1400可以包括图6所示的中央处理单元核610、资源分割寄存器605和图9所示的优先化线程调度寄存器905。因此,可以结合本公开的资源分割和线程调度的实施例,以实现多个线程满足预定运行要求。
在一些实施例中,资源分割寄存器值与优先化线程调度寄存器值相匹配,使得多个线程中的优先化线程满足预定运行要求。因此,可以在设置资源分割寄存器值时一并决定优先化线程调度寄存器值,使得多个线程中的优先化线程满足预定运行要求。在一个示例中,可以选择每个线程各自被执行的概率与资源分割占比相同。结合表1,例如当RPR值=1时,可以设置PTAR值为“3”、“1”,这样线程0与线程1各自被执行的概率与资源分割占比均为3/4和1/4,以使得优先化线程(线程0)可以满足其预定运行要求。然而,本公开并没有限制每个线程各自被执行的概率与资源分割占比必须相同。在另一个示例中,可以针对优先化线程选择性设置RPR值和PTAR值,并实测出在不同的RPR值和PTAR值的组合情况下该优先化线程满足其性能、响应延迟的要求,从而确定最优的RPR值和PTAR值的组合。此外,未来具体实现可以进行细致的分析以决定最优的RPR值和PTAR值组合,使得多个线程中的优先化线程满足预定运行要求,例如性能、响应延迟的要求。
可以理解的是,虽然图14示出了资源分割寄存器605和优先化线程调度寄存器905为两个分离的寄存器,然而,这只是示例性的。在一个示例中,可以将这两个分离的寄存器整合为一个寄存器并实现相同的功能,也就是说,中央处理单元1400可以包括一个寄存器,并在该寄存器中存储上述存储器存储资源分割寄存器值和优先化线程调度寄存器值并实现上述相应的功能。在另一个示例中,可以将上述资源分割寄存器值和优先化线程调度寄存器值存储在现有的寄存器/存储器中,并且同样实现上述相应的功能。
如此,根据本公开的资源分割和/或线程调度的实施例,本公开填补了混合模式SMT或全静态分割SMT下实现更多的资源分割和/或prioritized SMT的架构及算法的空白。此外,根据混合模式SMT或全静态分割SMT下CPU核微架构的特点,本发明提出资源分割与优化算法相结合的prioritized SMT架构,并描述了该架构的示例实现方案:通过RPR值分配静态分隔资源、以及Prioritized Round Robin线程调度算法更为倾向于选择优先化线程,来降低使用SMT对优先化线程性能、响应延迟的影响。这个方案易于实现、无需增加大量硬件资源于逻辑来实现复杂的、需要CPU全局信息的算法。支持Prioritized SMT的CPU可以将SMT使用于更为广泛的应用场景中,使得系统整体的性能、吞吐量、性能功耗比等都得到进一步提升。
图15示出了根据本公开的实施例的用于同步多线程的设备1500的示意图。
参考图15,设备1500可以包括各种组件1502、1504。如图15示意性所示,设备1500可以包括一个或多个处理器1502和一个或多个存储器1504。可以设想,设备1500可以根据需要包含其他组件。
设备1500可以装载并因此包括一个或多个应用。这些应用是指令集(例如,计算机程序代码),当被一个或多个处理器1502执行时,这些指令集控制设备1500的操作。为此,一个或多个存储器1504可以包括可由一个或多个处理器1502执行的指令/数据,由此设备1500可执行根据本公开中所公开方法的方法或过程。
图16示出了根据本公开的实施例的计算机存储介质1600的示意图,在该示例中计算机存储介质是数据盘1600的形式。然而实施例不限于此,计算机存储介质1600也可以是其他介质,诸如光盘、数字视频盘、闪存或其他常用的存储器技术。在一个实施例中,数据盘1600是磁性数据存储盘。数据盘1600被配置为携带指令1602,该指令1602可以被加载到诸如图15所示的设备1500的设备的存储器1504中。当设备1500的处理器1502执行该指令时,使得设备1500执行根据本公开中所公开方法的方法或过程。
根据本文描述的各个方面和实施例提出的资源分割和/或线程调度的实施例,本公开填补了混合模式SMT或全静态分割SMT下实现更多的资源分割和/或prioritized SMT的架构及算法的空白。此外,本公开的实施例提供了资源分割与优化算法相结合的prioritized SMT架构,并描述了该架构的示例实现方案:通过RPR分配静态分隔资源、以及Prioritized Round Robin线程调度算法更为倾向于选择优先化线程,来降低使用SMT对优先化线程性能、响应延迟的影响。这个方案易于实现、无需增加大量硬件资源于逻辑来实现复杂的、需要CPU全局信息的算法。支持Prioritized SMT的CPU可以将SMT使用于更为广泛的应用场景中,使得系统整体的性能、吞吐量、性能功耗比等都得到进一步提升。
在上文的详细描述中,出于解释而非限制的目的,阐述了具体细节,以便提供对本公开中描述的各个方面和实施例的透彻理解。在一些情况下,省略了对众所周知的设备、组件、电路和方法的详细描述,以免用不必要的细节来模糊本文公开的实施例的描述。本文列举本文公开的原理、方面和实施例的所有声明,以及其具体示例,旨在涵盖其结构等同物和功能等同物两者。另外,这种等同物旨在包括当前已知的等同物以及将来开发的等同物,即,开发的执行相同功能的任何元件,而不管结构如何。因此,例如,可以理解,本文的框图可以表示体现所描述的实施例的原理的说明性电路系统或其他功能单元的概念图。类似地,可以理解,任何流程图等表示各种过程,这些过程可以基本上在计算机存储介质中表示,并且由计算机或处理器执行,无论是否明确示出了这样的计算机或处理器。包括功能块的各种元件的功能可以通过使用硬件(诸如电路硬件和/或能够以存储在上述计算机存储介质上的编码指令的形式执行软件的硬件)来提供。因此,这样的功能和所示的功能块将被理解为是硬件实施的和/或计算机实施的,因此是机器实施的。就硬件实施方式而言,功能块可以包括或涵盖但不限于数字信号处理器(digital signal processor,DSP)硬件、精简指令集处理器、硬件(例如,数字或模拟)电路系统,包括但不限于(多个)专用集成电路(application specific integrated circuit,ASIC)和/或(多个)现场可编程门阵列(field programmable gate array,FPGA),以及(在适当的情况下)能够执行这些功能的状态机。就计算机实施方式而言,计算机通常被理解为包括一个或多个处理器或一个或多个控制器。当由计算机或处理器或控制器提供时,功能可以由单个专用计算机或处理器或控制器、单个共享计算机或处理器或控制器、或多个单独的计算机或处理器或控制器提供,其中一些可以是共享的或分布式的。此外,术语“处理器”、“控制器”或“控制逻辑”的使用也可以被解释为指代能够执行这样的功能和/或执行软件的其他硬件,诸如上面列举的示例硬件。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框/步骤中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框/步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框/步骤、以及框图和/或流程图中的方框/步骤的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一个计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如第一、第二、第三等的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序,并且这些实体或者操作可以相同或者不同,除非从上下文中明确得出。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且进一步包括没有明确列出的其他要素,或者是进一步包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。
Claims (16)
1.一种用于同步多线程的中央处理单元,包括:
优先化线程调度寄存器,设置有优先化线程调度寄存器值;以及
中央处理单元核,在所述中央处理单元核上同步运行多个线程,
其中,所述中央处理单元核被配置为:基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的概率,并且基于所确定的所述多个线程各自被执行的概率来选择执行所述多个线程中的相应线程。
2.根据权利要求1所述的中央处理单元,其中,
所述中央处理单元核被配置为通过以下步骤来基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的概率:
基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的预设次数,其中所述多个线程各自被执行的预设次数与所述多个线程中的所有线程被执行的预设次数的总和之间的比值分别为所述多个线程中的相应线程被执行的概率;并且其中
所述中央处理单元核被配置为通过以下步骤来基于所确定的所述多个线程各自被执行的概率来执行所述多个线程中的相应线程:
基于所确定的所述多个线程各自被执行的预设次数来执行所述多个线程中的相应线程。
3.根据权利要求2所述的中央处理单元,其中,所述中央处理单元核被配置为通过以下步骤来基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的预设次数:
将所述优先化线程调度寄存器值设置为分别对应于所述多个线程的多个数值,并且将所述多个数值中的各个数值分别设置为所述多个线程中的相应线程被执行的预设次数;或者
将所述优先化线程调度寄存器值设置为单个数值并将所述单个数值设置为所述多个线程中的优先化线程被执行的预设次数,并且设置至少一个系统默认数值并将所述至少一个系统默认数值中的各个系统默认数值分别设置为所述多个线程中的至少一个非优先化线程中的相应非优先化线程被执行的预设次数,其中所述至少一个系统默认数值中的各个数值均小于所述单个数值。
4.根据权利要求2所述的中央处理单元,其中,所述中央处理单元核被配置为通过以下步骤来基于所确定的所述多个线程各自被执行的预设次数来执行所述多个线程中的相应线程:
执行所述多个线程中的第一线程;
判断所述第一线程被执行的次数是否为所述第一线程的相应预设次数;以及
响应于所述第一线程被执行的次数为所述第一线程的相应预设次数,执行第二线程。
5.根据权利要求4所述的中央处理单元,其中,所述中央处理单元核被配置为通过以下第一方式或第二方式来判断所述第一线程被执行的次数是否为所述第一线程的相应预设次数:
其中,所述第一方式包括:对所述第一线程被执行的次数进行计数,所述计数包括:设置所述第一线程被执行的次数的计数值的初始值为0,响应于执行一次所述第一线程,将所述计数值加1,并且
响应于所述计数值大于或等于所述第一线程的相应预设次数,判断出所述第一线程被执行的次数为所述第一线程的相应预设次数;
其中,所述第二方式包括:对所述第一线程被执行的次数进行计数,所述计数包括:设置所述第一线程被执行的次数的计数值的初始值为所述第一线程的相应预设次数,响应于执行一次所述第一线程,将所述计数值减1,并且
响应于所述计数值小于或等于0,判断出所述第一线程被执行的次数为所述第一线程的相应预设次数。
6.根据权利要求4所述的中央处理单元,还包括:
响应于所述第一线程被执行的次数不为所述第一线程的相应预设次数,继续执行所述第一线程。
7.根据权利要求1所述的中央处理单元,其中,所述多个线程各自被执行的概率不完全相等。
8.一种用于同步多线程的方法,包括:
在优先化线程调度寄存器中设置优先化线程调度寄存器值,所述优先化线程调度寄存器包括在中央处理单元中;
基于所述优先化线程调度寄存器值确定多个线程各自被执行的概率,以及
基于所确定的所述多个线程各自被执行的概率来选择执行所述多个线程中的相应线程,
其中,所述多线程在中央处理单元核上执行,并且所述中央处理单元核包括在所述中央处理单元中。
9.根据权利要求8所述的方法,其中,
基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的概率包括:
基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的预设次数,其中所述多个线程各自被执行的预设次数与所述多个线程中的所有线程被执行的预设次数的总和之间的比值分别为所述多个线程中的相应线程被执行的概率;并且其中
基于所确定的所述多个线程各自被执行的概率来执行所述多个线程中的相应线程包括:
基于所确定的所述多个线程各自被执行的预设次数来执行所述多个线程中的相应线程。
10.根据权利要求9所述的方法,其中,基于所述优先化线程调度寄存器值确定所述多个线程各自被执行的预设次数包括:
将所述优先化线程调度寄存器值设置为分别对应于所述多个线程的多个数值,并且将所述多个数值中的各个数值分别设置为所述多个线程中的相应线程被执行的预设次数;或者
将所述优先化线程调度寄存器值设置为单个数值并将所述单个数值设置为所述多个线程中的优先化线程被执行的预设次数,并且设置至少一个系统默认数值并将所述至少一个系统默认数值中的各个系统默认数值分别设置为所述多个线程中的至少一个非优先化线程中的相应非优先化线程被执行的预设次数,其中所述至少一个系统默认数值中的各个数值均小于所述单个数值。
11.根据权利要求9所述的方法,其中,基于所确定的所述多个线程各自被执行的预设次数来执行所述多个线程中的相应线程包括:
执行所述多个线程中的第一线程;
判断所述第一线程被执行的次数是否为所述第一线程的相应预设次数;以及
响应于所述第一线程被执行的次数为所述第一线程的相应预设次数,执行第二线程。
12.根据权利要求11所述的方法,其中,判断所述第一线程被执行的次数是否为所述第一线程的相应预设次数包括以下第一方式或第二方式:
其中,所述第一方式包括:对所述第一线程被执行的次数进行计数,所述计数包括:设置所述第一线程被执行的次数的计数值的初始值为0,响应于执行一次所述第一线程,将所述计数值加1,并且
响应于所述计数值大于或等于所述第一线程的相应预设次数,判断出所述第一线程被执行的次数为所述第一线程的相应预设次数;
其中,所述第二方式包括:对所述第一线程被执行的次数进行计数,所述计数包括:设置所述第一线程被执行的次数的计数值的初始值为所述第一线程的相应预设次数,响应于执行一次所述第一线程,将所述计数值减1,并且
响应于所述计数值小于或等于0,判断出所述第一线程被执行的次数为所述第一线程的相应预设次数。
13.根据权利要求11所述的方法,还包括:
响应于所述第一线程被执行的次数不为所述第一线程的相应预设次数,继续执行所述第一线程。
14.根据权利要求8所述的方法,其中,所述多个线程各自被执行的概率不完全相等。
15.一种用于同步多线程的设备,包括:
存储器,存储计算机程序指令;以及
处理器,执行所述存储器存储的计算机程序指令,使得所述处理器执行根据权利要求8-14中任一项所述的方法。
16.一种计算机存储介质,其上存储有指令,所述指令可由处理器执行,以执行根据权利要求8-14中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011572966.4A CN112579278B (zh) | 2020-12-24 | 2020-12-24 | 用于同步多线程的中央处理单元、方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011572966.4A CN112579278B (zh) | 2020-12-24 | 2020-12-24 | 用于同步多线程的中央处理单元、方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112579278A CN112579278A (zh) | 2021-03-30 |
CN112579278B true CN112579278B (zh) | 2023-01-20 |
Family
ID=75139979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011572966.4A Active CN112579278B (zh) | 2020-12-24 | 2020-12-24 | 用于同步多线程的中央处理单元、方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579278B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1276890A (zh) * | 1997-10-23 | 2000-12-13 | 国际商业机器公司 | 在多线程处理器中改变线程优先级的方法和装置 |
CN1842769A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 用于在多线程微处理器中对并行指令流进行初始化的指令 |
CN101452427A (zh) * | 2008-11-19 | 2009-06-10 | 北京红旗胜利科技发展有限责任公司 | 一种dma数据传输系统及方法和一种中央处理器 |
CN101957744A (zh) * | 2010-10-13 | 2011-01-26 | 北京科技大学 | 一种用于微处理器的硬件多线程控制方法及其装置 |
CN104182281A (zh) * | 2014-08-25 | 2014-12-03 | 浙江大学城市学院 | 一种gpgpu寄存器缓存的实现方法 |
CN111159628A (zh) * | 2019-12-31 | 2020-05-15 | 中国人民解放军国防科技大学 | 一种多线程并行执行的硬件sat求解器 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8453150B2 (en) * | 2010-06-08 | 2013-05-28 | Advanced Micro Devices, Inc. | Multithread application-aware memory scheduling scheme for multi-core processors |
US9258246B2 (en) * | 2011-04-20 | 2016-02-09 | Freescale Semiconductor, Inc | Integrated circuit device and methods for performing cut-through forwarding |
US9632822B2 (en) * | 2012-09-21 | 2017-04-25 | Htc Corporation | Multi-core device and multi-thread scheduling method thereof |
-
2020
- 2020-12-24 CN CN202011572966.4A patent/CN112579278B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1276890A (zh) * | 1997-10-23 | 2000-12-13 | 国际商业机器公司 | 在多线程处理器中改变线程优先级的方法和装置 |
CN1842769A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 用于在多线程微处理器中对并行指令流进行初始化的指令 |
CN101452427A (zh) * | 2008-11-19 | 2009-06-10 | 北京红旗胜利科技发展有限责任公司 | 一种dma数据传输系统及方法和一种中央处理器 |
CN101957744A (zh) * | 2010-10-13 | 2011-01-26 | 北京科技大学 | 一种用于微处理器的硬件多线程控制方法及其装置 |
CN104182281A (zh) * | 2014-08-25 | 2014-12-03 | 浙江大学城市学院 | 一种gpgpu寄存器缓存的实现方法 |
CN111159628A (zh) * | 2019-12-31 | 2020-05-15 | 中国人民解放军国防科技大学 | 一种多线程并行执行的硬件sat求解器 |
Also Published As
Publication number | Publication date |
---|---|
CN112579278A (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9742869B2 (en) | Approach to adaptive allocation of shared resources in computer systems | |
US10002031B2 (en) | Low overhead thread synchronization using hardware-accelerated bounded circular queues | |
JP4693326B2 (ja) | 組込み型プロセッサにおいてゼロタイムコンテクストスイッチを用いて命令レベルをマルチスレッド化するシステムおよび方法 | |
US8875146B2 (en) | Systems and methods for bounding processing times on multiple processing units | |
US9710306B2 (en) | Methods and apparatus for auto-throttling encapsulated compute tasks | |
US10817338B2 (en) | Dynamic partitioning of execution resources | |
EP2624135A2 (en) | Systems and methods for task grouping on multi-processors | |
US8769543B2 (en) | System and method for maximizing data processing throughput via application load adaptive scheduling and context switching | |
US10019283B2 (en) | Predicting a context portion to move between a context buffer and registers based on context portions previously used by at least one other thread | |
CN112925616A (zh) | 任务分配方法、装置、存储介质及电子设备 | |
JP2010086130A (ja) | マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法 | |
CN112579277B (zh) | 用于同步多线程的中央处理单元、方法、设备及存储介质 | |
US10795722B2 (en) | Compute task state encapsulation | |
CN106325995B (zh) | 一种gpu资源的分配方法及系统 | |
CN106325996A (zh) | 一种gpu资源的分配方法及系统 | |
CN114168271A (zh) | 一种任务调度方法、电子设备及存储介质 | |
US10152329B2 (en) | Pre-scheduled replays of divergent operations | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups | |
CN112579278B (zh) | 用于同步多线程的中央处理单元、方法、设备及存储介质 | |
US11294724B2 (en) | Shared resource allocation in a multi-threaded microprocessor | |
CN110096341B (zh) | 执行资源的动态分区 | |
US11307903B2 (en) | Dynamic partitioning of execution resources | |
JP2009252133A (ja) | ベクトル処理装置及びベクトル処理方法 | |
JP5536862B2 (ja) | マルチスレッドプロセッサ | |
CN112612585B (zh) | 线程调度方法、配置方法、微处理器、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40048846 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |