CN114168202A - 指令调度方法、指令调度装置、处理器及存储介质 - Google Patents

指令调度方法、指令调度装置、处理器及存储介质 Download PDF

Info

Publication number
CN114168202A
CN114168202A CN202111573922.8A CN202111573922A CN114168202A CN 114168202 A CN114168202 A CN 114168202A CN 202111573922 A CN202111573922 A CN 202111573922A CN 114168202 A CN114168202 A CN 114168202A
Authority
CN
China
Prior art keywords
instruction
fetching
request
fetch
cache
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.)
Granted
Application number
CN202111573922.8A
Other languages
English (en)
Other versions
CN114168202B (zh
Inventor
金伟松
胡世文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202111573922.8A priority Critical patent/CN114168202B/zh
Publication of CN114168202A publication Critical patent/CN114168202A/zh
Application granted granted Critical
Publication of CN114168202B publication Critical patent/CN114168202B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

一种指令调度方法、指令调度装置、处理器及存储介质。该指令调度方法包括:从缓冲队列中,读取第一取指请求和第二取指请求;在第一操作周期内,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。该指令调度方法能够增加取指令的并行度,提高了并行多线程的指令执行效率,改善了CPU核心的性能。

Description

指令调度方法、指令调度装置、处理器及存储介质
技术领域
本公开的实施例涉及一种指令调度方法、指令调度装置、处理器及存储介质。
背景技术
现代多发射的高性能CPU(中央处理器,Central Processing Unit)中包括至少一个核心(Core),每个核心中包括有多个执行单元来对指令进行执行。例如,指令执行的流水线过程包括:取指(IF,Instruction Fetch)、译码(ID,Decode)、分发(DSP,Dispatch)、发射(IS,Issue)执行(EX,Execution)、访存(MEM,Memory)和写回(WB,Write Back,特指将指令执行完得出的结果更新到寄存器中)阶段。线程是进程(进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位)运行和执行的最小调度单位,CPU核心在执行单线程的指令时,CPU核心内部的多个执行单元及硬件资源在绝大部分时间无法被充分利用,尤其当该单线程由于某些原因(例如L2缓存冲刷)运行停顿时,执行单元只能空转,造成硬件资源的浪费、降低性能功耗比。
如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程。并发多线程(SMT,Simultaneous Multithreading)是一种在一个时钟周期内,能够执行来自多线程的指令的硬件多线程技术。该技术利用高性能CPU核心的多发射、乱序执行等机制,利用多个执行单元同时执行多个线程的指令,当一个线程由于某些原因运行停顿时,其他线程仍然能够运行,或一个线程的多余资源可被另一线程利用,从而提高了CPU核心的多线程吞吐量、CPU整体性能及性能功耗比、以及硬件资源的利用率。
发明内容
本公开至少一实施例提供一种指令调度方法,包括:从缓冲队列中,读取第一取指请求和第二取指请求;在第一操作周期内,尝试从第一指令缓存区中获取与所述第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与所述第二取指请求对应的第二指令。
例如,在本公开一些实施例提供的指令调度方法中,所述缓冲队列为先进先出缓冲队列。
例如,在本公开一些实施例提供的指令调度方法中,所述缓冲队列包括需要从所述第一指令缓存区取指的第一子队列和需要从所述第二指令缓存区取指的第二子队列。
例如,在本公开一些实施例提供的指令调度方法中,所述第一指令缓存区和所述第二指令缓存区中之一为机器指令缓存区,另一个为微指令缓存区。
例如,在本公开一些实施例提供的指令调度方法中,所述第一取指请求和所述第二取指请求均为分支预测器产生的预测取指请求。
例如,在本公开一些实施例提供的指令调度方法中,所述第一取指请求和所述第二取指请求分别属于不同的分支预测窗口。
例如,在本公开一些实施例提供的指令调度方法中,执行从所述第一指令缓存区中获取到的所述第一指令和执行从所述第二指令缓存区中获取到的所述第二指令之间的时间顺序相对于所述第一取指请求和所述第二取指请求进入所述缓冲队列的时间顺序保持不变。
例如,在本公开一些实施例提供的指令调度方法中,所述第一取指请求包括第一指令地址、第一线程标记,根据所述第一指令地址从所述第一指令缓存区中获取所述第一指令;例如,在本公开一些实施例提供的指令调度方法中,所述第二取指请求包括第二指令地址、第二线程标记,根据所述第二指令地址从所述第二指令缓存区中获取所述第二指令。
例如,在本公开一些实施例提供的指令调度方法中,在第二操作周期内,确定第一线程发起的所述第一取指请求满足在所述第一指令缓存区取指以及第二线程发起的所述第二取指请求满足在所述第二指令缓存区取指。
本公开至少一实施例还提供一种指令调度装置,该指令调度装置包括:
取指请求缓冲模块,被配置为在缓冲队列中缓存第一取指请求和第二取指请求,
取指模块,被配置为,读取所述第一取指请求和所述第二取指请求,并且响应于所述第一取指请求满足在第一指令缓存区取指以及所述第二取指请求满足在第二指令缓存区取指,在第一操作周期内,尝试从所述第一指令缓存区中获取与所述第一取指请求对应的第一指令,尝试从所述第二指令缓存区中获取与所述第二取指请求对应的第二指令。
例如,在本公开一些实施例提供的指令调度装置中,所述取指模块还被配置为确定所述第一取指请求满足在所述第一指令缓存区取指以及所述第二取指请求满足在所述第二指令缓存区取指。
本公开至少一实施例还提供一种处理器,该处理器包括至少一个处理单元,所述处理单元包括如上述实施例任一项所述的指令调度装置。
本公开至少一实施例还提供一种指令调度装置,该指令调度装置包括:存储器,用于非暂时性存储计算机可执行指令;以及处理器,用于运行所述计算机可执行指令,其中,所述计算机可执行指令被所述处理器运行时,执行本公开任一实施例提供的指令调度方法。
本公开至少一实施例还提供一种非暂时性存储介质,非暂时性地存储计算机可执行指令,其中,当所述计算机可执行指令由计算机执行时,执行本公开任一实施例提供的指令调度方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为一种CPU核心对并发多线程(SMT)的指令进行取指的示意图;
图2为本公开一实施例提供的一种指令调度方法流程图示意图;
图3为本公开一实施例提供的CPU核心对并发多线程(SMT)的指令进行取指的示意图;
图4为本公开一实施例提供的一种指令调度装置的结构示意图;
图5本公开一实施例提供的一种指令调度装置的示意性框图;
图6为本公开一些实施例提供的一种非暂时性存储介质的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
下面通过几个具体的实施例对本公开进行说明。为了保持本公开实施例的以下说明清楚且简明,本公开省略了已知功能和已知部件的详细说明。当本公开实施例的任一部件在一个以上的附图中出现时,该部件在每个附图中由相同或类似的参考标号表示。
在本公开中,操作周期例如可以为时钟周期或机器周期,也可以为处理器的指令流水线中其他用于完成一拍操作的时间段。一条指令的执行过程包括若干个阶段,每一阶段完成一项基本操作(例如,取指令、存储器读、存储器写等),完成一项基本操作所需要的时间称为机器周期,也称为CPU周期。
例如,现代高性能CPU的缓存通常包括机器指令(或简称“指令”缓存区(IC,Instruction Cache)和微指令缓存区(OC,micro-Operation Cache)。机器指令(INST,Instruction)是未解码的指令,CPU核心能直接识别并执行机器指令,每一条机器指令可完成一个独立的算术运算或逻辑运算操作。微指令(μ-OC,micro-Operation)是机器指令经过进一步解码得到的,一条机器指令所完成的操作可分成若干条微指令来完成,由微指令进行解释和执行。例如,对经常使用的机器指令未解码数据可以暂存至IC缓存区(简称IC区),以减少从存储区获取机器指令数据产生的高延迟。微指令可以暂存至OC缓存区(简称OC区)。从IC区提取的机器指令和OC区提取的微指令均可执行取指之后的流水线的后续步骤。
例如,机器指令中具有能够改变程序流向的跳转指令,跳转使程序出现多个执行路径,即分支。分支预测器(BP,Branch Predictor)可以用于预测一条指令是否跳转、跳转的方向以及跳转的目标地址等。基于分支预测器输出的预测信息来控制指令执行的流水线从IC区或OC区进行取指,如果预测结果正确,则流水线可不中断继续进行,如果预测结果错误,则对分支指令之后进入流水线的指令或微指令进行冲刷,从分支指令实际调整的地址取值。整体上而言,分支预测可提高CPU的流水线效率。
分支预测器输出的预测信息可以称为分支预测窗口(BPW,Branch PredictionWindow),例如,分支预测窗口包括指令地址、线程号(用于表示不同的线程)等信息。例如,一个分支预测窗口包括一条或多条指令的原始待解码数据在Cache中的预测位置信息,包括起始地址和指令长度,或起始地址和结束地址,根据分支预测窗口包含的前述信息能够确定取指模块是为哪个线程束取指,以及是从IC区或OC区为该线程束取指,例如,可以提供一逻辑单元来根据BPW判断从IC区或OC区为该线程束取指,这个逻辑单元可以设置在分支预测器内、IC区内、或者OC区内,例如,IC区中的逻辑单元在某个时钟周期确定出在OC区中为该线程束取指,那么IC区发送取指信号至OC区,从OC区中提取机器指令或微指令。在缓冲队列中保存多条分支预测窗口,缓冲队列可以为解耦队列(DQ,Decouple Queue),该队列深度决定了可保存分支预测窗口的个数。当缓冲队列中的分支预测窗口满足在IC区或OC区中取指的条件时,可直接从这两种缓存区之一提取机器指令或微指令,避免访问下级存储区而产生的高延时。
例如,对于某个程序,CPU核心的取指令过程是顺序的,所以,在CPU核心在执行单线程的指令时,取指模块从缓冲队列中按照各个分支预测窗口写入缓冲队列的先后顺序依次读取分支预测窗口,并在某时钟周期内,取指模块根据分支预测窗口从IC区、OC区或下级存储空间中取指令,取出的指令进行流水线相应的后续步骤。在CPU核心执行并发多线程(SMT)的指令时,仍然采用单线程的取指方案,即使对于不同线程的指令,在某一时钟周期内也只能根据一个分支预测窗口从IC区或OC区的其中之一取指令。
例如,图1示出一种CPU核心对并发多线程(SMT)的指令进行取指的示意图。CPU核心支持的最大活跃并发多线程的个数N(N为大于或等于0的正整数),例如N=4时,活跃并发多线程包括线程0~线程3。经过分支预测器(BP)预测之后,在缓冲队列(例如,有序缓冲队列,例如,DQ)中写入不同线程(例如,线程0~线程3)的多个不同的分支预测窗口,例如,BPW_0_T1_IC、BPW_1_T2_IC、BPW_2_T3_OC…BPW_6_T3_IC按照写入缓冲队列的顺序由下到上排列。
需要指出的是,图1中BPW_m_Tn_k格式含义为:
·m:分支预测窗口写入缓冲队列(例如DQ)的顺序编号,最小编号为0,最大编号为缓冲队列的深度,
·Tn:线程号,例如T1代表线程1,
·k:判断取指模块从IC区或OC区中取指,k位置为IC或OC。
若写入缓冲队列的分支预测窗口满足只能在IC区中取指(例如,BPW为BPW_0_T1_IC),则取指模块在IC区中取指;若写入缓冲队列的分支预测窗口满足只能在OC区中取指(例如,BPW_2_T3_OC),则取指模块在OC区取指。而且,在同一操作周期内(例如同一时钟周期内),取指模块只能读取一个分支预测窗口,根据在该时钟周期读取的分支预测窗口确定取指模块从IC区或是OC区取指,以便于进行流水线取指之后的步骤。例如,取指模块读取最先写入缓冲队列的分支预测窗口BPW_0_T1_IC,指示从IC区中取线程1的指令;取指模块读取第二个写入缓冲队列的分支预测窗口BPW_1_T2_IC,指示从IC区中取线程2的指令;取指模块读取第三个写入缓冲队列的分支预测窗口BPW_2_T3_OC,指示从OC区中取线程3的指令;取指模块读取第四个写入缓冲队列的分支预测窗口BPW_3_T0_IC,指示从IC区中取线程0的指令,之后的取指方式类似,不再赘述。
然而,前述CPU核心对并发多线程(SMT)的指令进行取指的方法不利于高度依赖取指令能力的应用场景,在并发多线程的指令进行流水线执行时,取指带宽受限,进而导致流水线整个周期延迟,并发多线程的指令执行效率降低。
发明人注意到,由于CPU核心对并发多线程(SMT)的指令进行取指时,只需要保证每个线程的指令顺序,无需考虑不同线程之间的指令顺序,因此,在同一操作周期内,取指模块所读取的分支预测窗口满足对于不同线程分别从IC区和OC区中取指的条件的情况下进行取指操作,从而可提升整体取指带宽。并且,不限于分支预测窗口的取指请求,取指模块所读取的非预测产生的取指请求,在同一操作周期内,也可能满足对于不同线程分别从IC区和OC区中取指的条件的情况下进行取指操作。
发明人也注意到,在一些情况下,同一操作周期内,取指模块读取的分支预测窗口也可能满足对于同一线程分别从IC区和OC区中取指的条件的情况下进行取指操作,或者取指模块所读取的非预测产生的取指请求,也可能满足对于同一线程分别从IC区和OC区中取指的条件的情况下进行取指操作。
本公开至少一些实施例提供一种指令调度方法,该方法包括:从缓冲队列中,读取第一取指请求和第二取指请求,其中,第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指;在第一操作周期内,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。
本公开的一些实施例还提供一种指令调度装置,该指令调度装置包括:取指请求缓冲模块,被配置为在缓冲队列中缓存第一取指请求和第二取指请求,取指模块,被配置为读取第一取指请求和第二取指请求,并且响应于第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指,在第一操作周期内,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。
本公开的一些实施例还提供一种包括上述指令调度装置的处理器。
本公开的一些实施例还提供对应于上述指令调度方法的非暂时性存储介质,该存储介质非暂时性地存储计算机可读指令,其中,当计算机可读指令由计算机执行时,执行上述本公开的实施例提供的指令调度方法。
本公开的上述实施例提供的指令调度方法,能够增加取指令的并行度,从而在不增加硬件资源的情况下,进一步提高了并行多线程的指令执行效率,改善了CPU核心的性能。
下面结合附图对本公开的一些实施例及其示例进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
图2为本公开一些实施例提供的一种指令调度方法的流程图。该实施例的指令调度方法,用于实现SMT功能的处理器,包括以下步骤S100至步骤S200。
步骤S100:从缓冲队列中,读取第一取指请求和第二取指请求。
这里,第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指。
例如,多个不同的线程发起的取指请求按先后顺序依次写入缓冲队列中进行缓存。其中,每种线程可以发起多个取指请求,所以缓冲队列中也可能包括同一线程发起的不同取指请求,例如,第一线程发起的1~n个取指请求,第二线程发起的1~m个取指请求,第三线程发起的1~k个取指请求等(n、m和k为大于1的整数)。例如,缓冲队列可以为有序缓冲队列,例如先进先出(FIFO)缓冲队列,当然也可以是其它类型的缓冲队列,本公开的实施例不做具体限定。例如,取指请求例如为分支预测窗口,例如包括指令地址,线程标记等。
本示例以第一取指请求和第二取指请求为不同线程发起的为例进行说明。取指模块对缓冲队列中缓存的多个取指请求依次进行检查,确定是否存在两个不同的线程发起的取指请求(即第一取指请求和第二取指请求)分别满足从不同的指令缓存区取指。例如,在同一操作周期(例如,第二操作周期,第二操作周期不同于第一操作周期)内,取指模块确定第一线程发起的第一取指请求满足在第一指令缓存区取指以及第二线程发起的第二取指请求满足在第二指令缓存区取指,当然,关于是否是在同一操作周期(例如,第二操作周期)内确定存在两个不同的线程的取指请求分别满足从不同的指令缓存区取指,本公开的实施例并不做限制。例如,第一取指请求包括第一指令地址、第一线程标记,第二取指请求包括第二指令地址、第二线程标记。
需要指出的是,“第一取指请求”和“第二取指请求”是缓冲队列中作为描述对象的分别满足在第一指令缓存区和第二缓存区中取指的取指请求,例如第一取指请求或第二取指请求为分支预测窗口(BPW)。
对缓冲序列中的所有取指请求进行检查之后,如果确定存在第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指,那么同一操作周期内(例如不同于前述第一操作周期和第二操作周期的第三操作周期),取指模块读取第一取指请求和第二取指请求。如果确定不存在两个不同的线程发起的取指请求满足从不同的指令缓存区取指,那么取指模块按照写入缓冲队列的先后顺序依次读取所有的取指请求。需要指出的是,由于并发多线程的指令执行过程中,无需考虑不同线程之间的指令顺序,所以,在取指模块读取缓冲队列中的多个取指请求时,相同线程的取指请求可以按照该线程的多个取指请求写入缓冲队列的先后顺序来被读取,而取指模块可以分别读取两个不同线程的取指请求,这两个取指请求满足从不同的指令缓存区取指,例如,这两个取指请求并不一定按照写入缓冲队列的先后顺序排列。
例如,在至少一些示例中,多个线程发起的取指请求可以共享缓存至同一个缓冲队列中,也可以适用于其他缓存方式,例如,不同线程发起的取指请求可以缓存至不同的缓冲队列中。
例如,第一种方式,缓冲队列包括需要从第一指令缓存区取指的第一子队列和需要从第二指令缓存区取指的第二子队列。例如,第一子队列和第二子队列相应地均为FIFO缓冲队列。例如,由于按照指令缓存区的类型将取指请求划分在两个不同的子队列中缓存,所以,同一操作周期内(例如不同于前述第一操作周期和第二操作周期的第三操作周期),取指模块从第一子队列中读取第一取指请求,从第二子队列中读取第二取指请求。需要指出的是,第一取指请求除了满足在第一指令缓存区取指之外,还应该满足该取指请求是第一线程发起的,以及第二取指请求除了满足在第二指令缓存区取指之外,还应该满足该取指请求是第二线程发起的,使得CPU核心执行并发多线程(SMT)的指令的模式下,同一操作周期内,取指模块可以读取来自于不同线程发起且满足在不同指令缓存区取指的第一取指请求和第二取指请求,或者,在一些情况下,取指模块也可以读取来自于同一线程发起且满足在不同指令缓存区取指的第一取指请求和第二取指请求,由于提前将缓冲队列按照满足在不同指令缓存区取指的条件来缓存取指请求,使得取指模块无需依次检查缓冲队列中的取指请求,节省了时间,进一步提升取指速度。
例如,第二种方式,缓冲队列还可以划分成与各个不同线程相对应的子队列。不同线程的子队列均为FIFO缓冲队列。例如,在CPU核心支持的最大活跃并发多线程的个数为N时,缓冲队列划分为N个不同线程的子队列。参考上述示例,将第一线程发起的多个取指请求按照先后顺序写入第一子队列,第二线程的发起的多个取指请求按照先后顺序写入第二子队列。当然,本公开的实施例对子队列的个数不做具体限定。
步骤S200:在第一操作周期内,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。
例如,参考上述示例,在相同的第一操作周期内,取指模块根据第一指令地址和第一指令的存储起始位置,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,以及根据第二指令地址和第二指令的存储起始位置,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。例如,如果直接从第一指令缓存区中获取与第一取指请求对应的第一指令以及直接从第二指令缓存区中获取与第二取指请求对应的第二指令,那么然后,将取出的第一指令和第二指令发送至后续功能模块中进行处理,例如,译码模块、执行模块、访存模块以及写回模块(各个功能模块可以增加或减少),直至第一指令和第二指令执行结束(退休)。
上述“尝试”表达了在从某一指令缓存区取值时存在能直接获取的情形,也存在不能直接获取的情形,当不能直接获取时,则需要进一步到其他关联的指令缓存区获取。又例如,存在尝试从第一指令缓存区中获取与第一取指请求对应的第一指令但没有命中的情形,即第一指令并未缓存在第一指令缓存区中,那么需要继续尝试从下级缓存甚至内存中获取第一指令,同样地,存在尝试从第二指令缓存区中获取与第二取指请求对应的第二指令但没有命中的情形,即第二指令并未缓存在第二指令缓存区中,那么需要继续尝试从下级缓存甚至内存中获取第二指令,之后将取出的第一指令和第二指令发送至后续功能模块中进行处理,例如,译码模块、执行模块、访存模块以及写回模块(根据具体设计各个功能模块可以增加或减少),直至第一指令和第二指令执行结束(退休)。
例如,第一指令缓存区和第二指令缓存区中之一为机器指令缓存区,另一个为微指令缓存区。在一种示例中,可以直接从微指令缓存区中提取所需要的机器指令解码得到的微指令,而不需要从机器指令缓存区中先取出机器指令,然后在对该机器指令进行解码得到微指令,由此可以减少解码操作步骤,可获得更高的指令发射带宽和更快的运行速度,从而提升CPU核心性能,并有效降低功耗。
例如,执行从第一指令缓存区中获取到的第一指令和从第二指令缓存区中获取到的第二指令之间的时间顺序相对于第一取指请求和第二取指请求进入缓冲队列的时间顺序保持不变。
例如,对于多流水级的CPU核心,对于单线程或多线程中的某个线程,取指模块从第一指令缓存区中获取第一指令发送给解码模块所需要的时间和从第二指令缓存区中获取第二指令所需要的时间可能不同,若解码模块接收指令应是顺序的,处理器(例如处理器的控制单元)可以协调从第一指令缓存区中获取到第一指令和从第二指令缓存区中获取到第二指令,然后向解码模块发送第一指令和发送第二指令之间的时间顺序相对于第一取指请求和第二取指请求进入缓冲队列的时间顺序保持不变。
例如,参考上述示例,第一取指请求和第二取指请求均为分支预测器产生的预测取指请求。并且,第一取指请求和第二取指请求分别为不同的分支预测窗口,或分别属于不同的分支预测窗口。
例如,在至少一个示例中,如图3所示,以CPU核心支持的最大活跃并发多线程的个数为4个(包括线程0~线程3)为例进行说明。分支预测器产生的多个预测取指请求按照先后顺序写入缓冲序列中,这些预测取指请求分别属于不同的分支预测窗口(BPW)。例如,写入缓冲序列中的多个预测取指请求包括BPW_0_T1_IC、BPW_1_T2_IC、BPW_2_T3_OC、BPW_3_T0_IC BPW_4_T2_OC、BPW_5_T2_OC、BPW_6_T3_IC。
取指模块对当前缓冲队列中的预测取指请求进行检查,在同一操作周期(第二操作周期)内确定“第一取指请求”为最先写入缓冲队列的预测取指请求BPW_0_T1_IC,满足线程1发起且从IC中取指的条件;确定“第二取指请求”为第三个写入缓冲队列的预测取指请求BPW_2_T3_OC,满足线程3发起且从OC中取指的条件,则取指模块在同一操作周期(第三操作周期)内,读取BPW_0_T1_IC和BPW_2_T3_OC,并在同一操作周期(第一操作周期)内根据这两个取指请求分别尝试从IC区中获取线程1的指令,尝试从OC区中获取线程3的指令。
之后,对缓冲队列中剩余的预测取指请求进行检查,确定“第一取指请求”为第二个写入缓冲队列的预测取指请求BPW_1_T2_IC,满足线程2发起且从IC中取指的条件,确定“第二取指请求”为第五个写入缓冲队列的预测取指请求BPW_4_T3_OC,满足线程3从OC中取指的条件,则取指模块读取BPW_1_T2_IC和BPW_4_T3_OC,并在同一操作周期内根据这两个取指请求分别尝试从IC区中获取线程2的指令,尝试从OC区中获取线程3的指令。
以此类推,直至取指模块将缓冲序列中的全部预测取指请求读取结束。
需要指出的是,“第一操作周期”、“第二操作周期”以及“第三操作周期”以及类似表述仅用于给出描述对象,而不代表先后顺序等,它们可以是同一操作周期或者不同的操作周期,本实施例不做具体限定。
图4为本公开一些实施例提供的一种指令调度装置100,包括取指请求缓冲模块110和取指模块120。
取指请求缓冲模块110被配置为在缓冲队列中缓存多个取指请求,该多个取指请求包括第一取指请求和第二取指请求;取指模块120被配置为,读取第一取指请求和第二取指请求,并且响应于第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指,在第一操作周期内,尝试从第一指令缓存区中获取与第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与第二取指请求对应的第二指令。
例如,取指模块120还被配置为确定第一取指请求满足在第一指令缓存区取指以及第二取指请求满足在第二指令缓存区取指。
例如,在本公开一些实施例提供的指令调度装置中,缓冲队列为先进先出缓冲队列。
例如,在本公开一些实施例提供的指令调度装置中,缓冲队列包括需要从第一指令缓存区取指的第一子队列和需要从第二指令缓存区取指的第二子队列。
例如,在本公开一些实施例提供的指令调度装置中,第一子队列和第二子队列为先进先出缓冲队列。
例如,在本公开一些实施例提供的指令调度装置中,第一指令缓存区和第二指令缓存区中之一为机器指令缓存区,另一个为微指令缓存区。
例如,在本公开一些实施例提供的指令调度装置中,第一取指请求和第二取指请求均为分支预测器产生的预测取指请求。
例如,在本公开一些实施例提供的指令调度装置中,第一取指请求和第二取指请求分别属于不同的分支预测窗口。
例如,在本公开一些实施例提供的指令调度装置中,执行从第一指令缓存区中获取到的第一指令和从第二指令缓存区中获取到的第二指令之间的时间顺序相对于第一取指请求和第二取指请求进入缓冲队列的时间顺序保持不变。
例如,在本公开一些实施例提供的指令调度装置中,第一取指请求包括第一指令地址、第一线程标记,取指模块120还被配置为根据第一指令地址从第一指令缓存区中获取第一指令。
例如,在本公开一些实施例提供的指令调度装置中,第二取指请求包括第二指令地址、第二线程标记,取指模块120还被配置为根据第二指令地址从第二指令缓存区中获取第二指令。
例如,在本公开一些实施例提供的指令调度装置中,取指模块120还被配置为在第二操作周期内,确定第一线程发起的第一取指请求满足在第一指令缓存区取指以及第二线程发起的第二取指请求满足在第二指令缓存区取指。
图5为本公开一些实施例提供的另一种指令调度装置的示意性框图。
例如,如图5所示,该指令调度装置500包括存储器510和处理器520。例如,存储器510用于非暂时性存储计算机可执行指令,处理器520用于运行该计算机可执行指令,该计算机可执行指令被处理器520运行时执行本公开任一实施例提供的指令调度方法。
例如,存储器510和处理器520之间可以直接或间接地互相通信。例如,在一些示例中,如图5所示,该指令调度装置500还可以包括系统总线530,存储器510和处理器520之间可以通过系统总线530互相通信,例如,处理器520可以通过系统总线1006访问存储器510。例如,在另一些示例中,存储器510和处理器520等组件之间可以通过片上网络(NOC)连接进行通信。
例如,处理器520可以控制指令调度装置中的其它组件以执行期望的功能。处理器520可以是中央处理单元(CPU)、张量处理器(TPU)、网络处理器(NP)或者图形处理器(GPU)等具有数据处理能力和/或程序执行能力的器件,还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
例如,存储器510可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。
例如,在存储器510上可以存储一个或多个计算机指令,处理器520可以运行所述计算机指令,以实现各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据,例如指令处理代码以及应用程序使用和/或产生的各种数据等。
例如,存储器510存储的一些计算机指令被处理器520执行时可以执行根据上文所述的指令调度方法中的一个或多个步骤。
例如,如图5所示,指令调度装置500还可以包括允许外部设备与指令调度装置500进行通信的输入接口540。例如,输入接口540可被用于从外部计算机设备、从用户等处接收指令。指令调度装置500还可以包括使指令调度装置500和一个或多个外部设备相互连接的输出接口550。例如,指令调度装置500可以通过输出接口550等。
例如,关于指令调度方法的处理过程的详细说明可以参考上述指令调度方法的实施例中的相关描述,重复之处不再赘述。
需要说明的是,本公开的实施例提供的指令调度装置是示例性的,而非限制性的,根据实际应用需要,该指令调度装置还可以包括其他常规部件或结构,例如,为实现指令调度装置的必要功能,本领域技术人员可以根据具体应用场景设置其他的常规部件或结构,本公开的实施例对此不作限制。
本公开至少一些实施例还提供一种处理器,包括至少一个处理单元,其中,该处理单元包括如前述任一实施例提供的指令调度装置。例如,该处理器为中央处理器,该中央处理器包括多个处理单元(CPU核心),每个处理单元包括指令调度装置,还可以包括寄存器、指令缓存区(IC)、微指令缓存区(OC)、执行单元等。例如,该处理器可具有SMT功能。
本公开至少一些实施例还提供一种非暂时性存储介质。图6为本公开一些实施例提供的一种非暂时性存储介质的示意图。
例如,如图6所示,该存储介质600非暂时性地存储计算机可执行指令610,当非暂时性计算机可执行指令610由计算机(包括处理器)执行时可以执行本公开任一实施例提供的指令调度方法。
例如,在存储介质600上可以存储一个或多个计算机指令。存储介质600上存储的一些计算机指令可以是例如用于实现上述指令调度方法中的一个或多个步骤的指令。
例如,存储介质可以包括平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、光盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。例如,存储介质600可以包括前述指令调度装置500中的存储器510。
本公开的实施例提供的存储介质的技术效果可以参考上述实施例中关于指令调度方法的相应描述,在此不再赘述。
对于本公开,有以下几点需要说明:
(1)本公开实施例附图中,只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
(2)在不冲突的情况下,本公开同一实施例及不同实施例中的特征可以相互组合。
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。

Claims (14)

1.一种指令调度方法,包括:
从缓冲队列中,读取第一取指请求和第二取指请求;
在第一操作周期内,尝试从第一指令缓存区中获取与所述第一取指请求对应的第一指令,尝试从第二指令缓存区中获取与所述第二取指请求对应的第二指令。
2.根据权利要求1所述的方法,其中,所述缓冲队列为先进先出缓冲队列。
3.根据权利要求1所述的方法,其中,所述缓冲队列包括需要从所述第一指令缓存区取指的第一子队列和需要从所述第二指令缓存区取指的第二子队列。
4.根据权利要求1所述的方法,其中,所述第一指令缓存区和所述第二指令缓存区中之一为机器指令缓存区,另一个为微指令缓存区。
5.根据权利要求1所述的方法,其中,所述第一取指请求和所述第二取指请求均为分支预测器产生的预测取指请求。
6.根据权利要求5所述的方法,其中,所述第一取指请求和所述第二取指请求分别属于不同的分支预测窗口。
7.根据权利要求1所述的方法,其中,执行从所述第一指令缓存区中获取到的所述第一指令和执行从所述第二指令缓存区中获取到的所述第二指令之间的时间顺序相对于所述第一取指请求和所述第二取指请求进入所述缓冲队列的时间顺序保持不变。
8.根据权利要求1所述的方法,其中,所述第一取指请求包括第一指令地址、第一线程标记,根据所述第一指令地址从所述第一指令缓存区中获取所述第一指令;
所述第二取指请求包括第二指令地址、第二线程标记,根据所述第二指令地址从所述第二指令缓存区中获取所述第二指令。
9.根据权利要求1所述的方法,其中,在第二操作周期内,确定第一线程发起的所述第一取指请求满足在所述第一指令缓存区取指以及第二线程发起的所述第二取指请求满足在所述第二指令缓存区取指。
10.一种指令调度装置,包括:
取指请求缓冲模块,被配置为在缓冲队列中缓存第一取指请求和第二取指请求,
取指模块,被配置为读取所述第一取指请求和所述第二取指请求,并且响应于所述第一取指请求满足在第一指令缓存区取指以及所述第二取指请求满足在第二指令缓存区取指,在第一操作周期内,尝试从所述第一指令缓存区中获取与所述第一取指请求对应的第一指令,尝试从所述第二指令缓存区中获取与所述第二取指请求对应的第二指令。
11.根据权利要求10所述的指令调度装置,其中,所述取指模块还被配置为确定所述第一取指请求满足在所述第一指令缓存区取指以及所述第二取指请求满足在所述第二指令缓存区取指。
12.一种处理器,包括至少一个处理单元,其中,所述处理单元包括如权利要求9或10所述的指令调度装置。
13.一种指令调度装置,包括:
存储器,用于非暂时性存储计算机可执行指令;以及
处理器,用于运行所述计算机可执行指令,
其中,所述计算机可执行指令被所述处理器运行时执行根据权利要求1-9任一项所述的指令调度方法。
14.一种非暂时性存储介质,非暂时性地存储计算机可执行指令,其中,当所述计算机可执行指令由计算机执行时,执行根据权利要求1-9任一项所述的指令调度方法。
CN202111573922.8A 2021-12-21 2021-12-21 指令调度方法、指令调度装置、处理器及存储介质 Active CN114168202B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111573922.8A CN114168202B (zh) 2021-12-21 2021-12-21 指令调度方法、指令调度装置、处理器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111573922.8A CN114168202B (zh) 2021-12-21 2021-12-21 指令调度方法、指令调度装置、处理器及存储介质

Publications (2)

Publication Number Publication Date
CN114168202A true CN114168202A (zh) 2022-03-11
CN114168202B CN114168202B (zh) 2023-01-31

Family

ID=80487716

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111573922.8A Active CN114168202B (zh) 2021-12-21 2021-12-21 指令调度方法、指令调度装置、处理器及存储介质

Country Status (1)

Country Link
CN (1) CN114168202B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115098169A (zh) * 2022-06-24 2022-09-23 海光信息技术股份有限公司 基于容量共享的调取指令的方法及装置
CN116414463A (zh) * 2023-04-13 2023-07-11 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1716183A (zh) * 2004-06-30 2006-01-04 中国科学院计算技术研究所 一种应用于同时多线程处理器的取指控制装置及其方法
CN101344842A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 多线程处理器及其多线程处理方法
US20130166881A1 (en) * 2011-12-21 2013-06-27 Jack Hilaire Choquette Methods and apparatus for scheduling instructions using pre-decode data
CN104298552A (zh) * 2013-07-15 2015-01-21 华为技术有限公司 多线程处理器的线程取指调度方法、系统和多线程处理器
CN105094750A (zh) * 2014-04-25 2015-11-25 华为技术有限公司 一种多线程处理器的返回地址预测方法和装置
CN105786448A (zh) * 2014-12-26 2016-07-20 深圳市中兴微电子技术有限公司 一种指令调度方法及装置
CN112789593A (zh) * 2018-12-24 2021-05-11 华为技术有限公司 一种基于多线程的指令处理方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1716183A (zh) * 2004-06-30 2006-01-04 中国科学院计算技术研究所 一种应用于同时多线程处理器的取指控制装置及其方法
CN101344842A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 多线程处理器及其多线程处理方法
US20130166881A1 (en) * 2011-12-21 2013-06-27 Jack Hilaire Choquette Methods and apparatus for scheduling instructions using pre-decode data
CN104298552A (zh) * 2013-07-15 2015-01-21 华为技术有限公司 多线程处理器的线程取指调度方法、系统和多线程处理器
CN105094750A (zh) * 2014-04-25 2015-11-25 华为技术有限公司 一种多线程处理器的返回地址预测方法和装置
CN105786448A (zh) * 2014-12-26 2016-07-20 深圳市中兴微电子技术有限公司 一种指令调度方法及装置
CN112789593A (zh) * 2018-12-24 2021-05-11 华为技术有限公司 一种基于多线程的指令处理方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
CAI Q: "Meeting points: using thread criticality to adapt multicore hardware to parallel regions", 《2008 INTERNATIONAL CONFERENCE ON PARALLEL ARCHITECTURES AND COMPILATION TECHNIQUES (PACT)》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115098169A (zh) * 2022-06-24 2022-09-23 海光信息技术股份有限公司 基于容量共享的调取指令的方法及装置
CN115098169B (zh) * 2022-06-24 2024-03-05 海光信息技术股份有限公司 基于容量共享的调取指令的方法及装置
CN116414463A (zh) * 2023-04-13 2023-07-11 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质
CN116414463B (zh) * 2023-04-13 2024-04-12 海光信息技术股份有限公司 指令调度方法、指令调度装置、处理器及存储介质

Also Published As

Publication number Publication date
CN114168202B (zh) 2023-01-31

Similar Documents

Publication Publication Date Title
CN114201219B (zh) 指令调度方法、指令调度装置、处理器及存储介质
KR101594090B1 (ko) 공유 메모리에 대한 액세스들의 동기화를 완화하기 위한 프로세서들, 방법들 및 시스템들
US9645819B2 (en) Method and apparatus for reducing area and complexity of instruction wakeup logic in a multi-strand out-of-order processor
CN114168202B (zh) 指令调度方法、指令调度装置、处理器及存储介质
WO2011155097A1 (ja) 命令発行制御装置及び方法
EP1849061A2 (en) Unaligned memory access prediction
CN109101276B (zh) 在cpu中执行指令的方法
WO2019005105A1 (en) ACTIVATION OF SPECULATIVE MEMORY
US9069565B2 (en) Processor and control method of processor
EP1696317A2 (en) Programmable delayed dispatch in a multi-threaded pipeline
US10268519B2 (en) Scheduling method and processing device for thread groups execution in a computing system
CN110806900B (zh) 一种访存指令处理方法及处理器
WO2014105207A1 (en) Processing core having shared front end unit
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
CN116048627B (zh) 指令缓冲方法、装置、处理器、电子设备及可读存储介质
US9417882B2 (en) Load synchronization with streaming thread cohorts
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
CN109564510B (zh) 用于在地址生成时间分配加载和存储队列的系统和方法
CN116414463B (zh) 指令调度方法、指令调度装置、处理器及存储介质
US9015720B2 (en) Efficient state transition among multiple programs on multi-threaded processors by executing cache priming program
US20220075624A1 (en) Alternate path for branch prediction redirect
CN114356416B (zh) 处理器及其控制方法、装置、电子设备和存储介质
US10884738B2 (en) Arithmetic processing device and method of controlling arithmetic processing device
KR20240128829A (ko) 루프 재생 성능을 최적화하기 위한 프로세서에서 캡처된 루프의 최적화
CN118035131A (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
GR01 Patent grant
GR01 Patent grant