CN115408153B - 多线程处理器的指令分发方法、装置和存储介质 - Google Patents

多线程处理器的指令分发方法、装置和存储介质 Download PDF

Info

Publication number
CN115408153B
CN115408153B CN202211033483.6A CN202211033483A CN115408153B CN 115408153 B CN115408153 B CN 115408153B CN 202211033483 A CN202211033483 A CN 202211033483A CN 115408153 B CN115408153 B CN 115408153B
Authority
CN
China
Prior art keywords
thread
instruction dispatch
thread instruction
execution wait
instruction
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
Application number
CN202211033483.6A
Other languages
English (en)
Other versions
CN115408153A (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 CN202211033483.6A priority Critical patent/CN115408153B/zh
Publication of CN115408153A publication Critical patent/CN115408153A/zh
Application granted granted Critical
Publication of CN115408153B publication Critical patent/CN115408153B/zh
Priority to PCT/CN2023/114840 priority patent/WO2024041625A1/zh
Priority to EP23856712.7A priority patent/EP4386554A1/en
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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

一种多线程处理器的指令分发方法及装置和存储介质。指令分发方法包括:接收多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求,多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令;判断多个线程指令分发请求对于多线程处理器的多个执行等待队列是否存在阻塞以及冲突;基于判断,从多个线程指令分发请求选择一个线程指令分发请求并响应。该方法使得多线程指令分发更有效率、更具有公平性,有效避免“活锁”现象。

Description

多线程处理器的指令分发方法、装置和存储介质
技术领域
本公开的实施例涉及一种多线程处理器的指令分发方法、指令分发装置、数据处理装置、处理器、电子设备和非瞬时可读存储介质。
背景技术
同步多线程(SMT)是一种在一个中央处理单元(CPU)的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多个CPU)转化为指令级并行处理(同一CPU)的方法。同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令计数较高的工作负载创造性能优势。处理器采用超标量结构,适用于以并行方式读取及运行指令。同步多线程使得同一处理器上可同时调度运行两个应用程序,从而利用处理器的超标量结构性质。
发明内容
本公开至少一个实施例提供一种多线程处理器的指令分发方法。所述指令分发方法包括:接收所述多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求;判断所述多个线程指令分发请求对于所述多线程处理器的多个执行等待队列是否存在阻塞以及冲突;基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应。其中,所述多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令。
例如,在本公开至少一个实施例提供的方法中,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突,包括:基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突。
例如,在本公开至少一个实施例提供的方法中,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞,包括:响应于所述多个线程指令分发请求中的第一线程指令分发请求需要的所述多个执行等待队列中的第一执行等待队列中的令牌数量大于所述第一执行等待队列中当前可用的令牌数量,确定所述第一线程指令分发请求对于所述第一执行等待队列存在阻塞。
例如,在本公开至少一个实施例提供的方法中,所述多个执行等待队列包括被所述多个线程共享的至少一个共享执行等待队列。判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在冲突,包括:响应于所述多个线程指令分发请求中的第二线程指令分发请求对于所述至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且所述多个线程指令分发请求中的第三线程指令分发请求需要的第二执行等待队列中的令牌数量不大于所述第二执行等待队列中当前可用的令牌数量,确定所述第二线程指令分发请求和第三线程指令分发请求对于所述第二执行等待队列存在冲突。
例如,在本公开至少一个实施例提供的方法中,基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应,包括:基于所述判断,将所述多个线程指令分发请求中的至少一个加入候选请求集合;基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求并响应。
例如,在本公开至少一个实施例提供的方法中,基于所述判断,将所述多个线程指令分发请求中的至少一个加入所述候选请求集合,包括:响应于所述多个线程指令分发请求中存在对于所述多个执行等待队列不存在阻塞且不存在冲突的第四线程指令分发请求,将所述第四线程指令分发请求加入所述候选请求集合。
例如,在本公开至少一个实施例提供的方法中,基于所述判断,将所述多个线程指令分发请求中的至少一个加入所述候选请求集合,包括:响应于所述多个线程指令分发请求中不存在所述第四线程指令分发请求,并且所述多个线程指令分发请求中存在对于所述多个执行等待队列存在冲突的第五线程指令分发请求,将所述第五线程指令分发请求加入所述候选请求集合。
例如,在本公开至少一个实施例提供的方法中,基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求,包括:利用最近最少使用算法,确定所述多个线程当前的优先级,从所述候选请求集合中选择优先级最高的线程指令分发请求。
例如,在本公开至少一个实施例提供的方法中,利用最近最少使用LRU算法,确定所述多个线程当前的优先级,包括:初始化所述多个线程的优先级;响应于上一个时钟周期选择了所述多个线程中的第一线程,将所述第一线程在当前时钟周期的优先级设置为最低,并将所述多个线程中除了所述第一线程以外的其他线程的优先级递增。
例如,在本公开至少一个实施例提供的方法中,基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求,包括:利用轮询算法,确定所述多个线程当前的优先级,从所述候选请求集合中选择优先级最高的线程指令分发请求。
例如,在本公开至少一个实施例提供的方法中,所述多线程包括至少3个线程。
本公开至少一个实施例还提供了一种指令分发装置。所述指令分发装置包括接收单元、判断单元和选择单元。接收单元与多线程处理器通信连接,被配置为接收所述多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求。所述多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令。判断单元与多线程处理器通信连接,被配置为判断所述多线程处理器的多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突。选择单元被配置为基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应。
例如,在本公开至少一个实施例提供的指令分发装置中,判断单元包括组合判断子单元。组合判断子单元被配置为基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突。
例如,在本公开至少一个实施例提供的指令分发装置中,组合判断子单元包括阻塞判断单元。阻塞判断单元被配置为响应于所述多个线程指令分发请求中的第一线程指令分发请求需要的所述多个执行等待队列中的第一执行等待队列中的令牌数量大于所述第一执行等待队列中当前可用的令牌数量,确定所述第一线程指令分发请求对于所述第一执行等待队列存在阻塞。
例如,在本公开至少一个实施例提供的指令分发装置中,多个执行等待队列包括被多个线程共享的至少一个共享执行等待队列,所述组合判断子单元包括冲突判断单元。冲突判断单元被配置为响应于所述多个线程指令分发请求中的第二线程指令分发请求对于所述至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且所述多个线程指令分发请求中的第三线程指令分发请求需要的所述第二执行等待队列中的令牌数量不大于所述第二执行等待队列中当前可用的令牌数量,确定所述第二线程指令分发请求和所述第三线程指令分发请求对于所述第二执行等待队列存在冲突。
例如,在本公开至少一个实施例提供的指令分发装置中,选择单元包括候选选择单元和优先级选择单元。候选选择单元配置为基于所述判断,将所述多个线程指令分发请求中的至少一个加入候选请求集合。优先级选择单元配置为基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求并响应。
本公开至少一个实施例还提供了一种数据处理装置,包括上述任一实施例提供的指令分发装置、多个解码指令队列和多个执行等待队列。
本公开至少一个实施例还提供了一种处理器,包括上述任一实施例提供的数据处理装置。
本公开至少一个实施例还提供了一种电子设备,包括处理器和存储器,该存储器包括一个或多个计算机程序模块。所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于执行上述任一实施例提供的指令分发方法的指令。
本公开至少一个实施例还提供了一种非瞬时可读存储介质,其上存储有计算机指令。所述计算机指令被处理器执行时执行上述任一实施例提供的指令分发方法。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
图1为本公开至少一个实施例提供的一种多线程处理器的指令分发方法的流程图;
图2为本公开至少一个实施例提供的一种多线程处理器的示例结构框图;
图3为本公开至少一个实施例提供的一种多线程指令分发仲裁的示意图;
图4为本公开至少一个实施例提供的一种判断令牌阻塞操作的示意框图;
图5为本公开至少一个实施例提供的根据最近最少使用(LRU)算法调整多个线程的优先级的示意图;
图6为本公开至少一个实施例提供的根据轮询算法调整多个线程的优先级的示意图;
图7为本公开至少一个实施例提供的一种指令分发方法的示意框图;
图8为本公开至少一个实施例提供的一种指令分发装置的示意框图;
图9为本公开至少一个实施例提供的一种数据处理装置的示意框图;
图10为本公开至少一个实施例提供的一种处理器的示意框图;
图11为本公开至少一个实施例提供的一种电子设备的示意框图;
图12为本公开至少一个实施例提供的又一种电子设备的示意框图;以及
图13为本公开至少一个实施例提供的一种非瞬时可读存储介质的示意框图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开中使用了流程图来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,根据需要,可以按照倒序或同时处理各种步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
同步多线程(SMT)处理器需要在指令分发阶段对多个线程进行仲裁,选出其中一个线程的指令分发到后端的执行单元。通常,多线程仲裁需要考虑以下两个方面。第一个方面是效率。多线程仲裁需要尽可能提高多线程处理器的并行能力,发挥出多线程结构的优势,从而提高整体性能。例如,一些线程因为需要的资源较多,但是后端的执行单元没有足够的资源。仲裁应该尽量避免选择这种线程,否则会导致分发阻塞,降低整体性能。另一方面是公平性。多线程中的各个线程都应该有平等的被选中的机会,不应出现某些线程一直被选择而有些线程始终不能被选择的情况。
发明人注意到,目前的现有处理器的SMT支持2个线程,这2个线程间的调度也比较简单,例如采用基于时间片的调度。也就是在一定时间内某一个线程优先,在另一时间内另一个线程优先。具体而言,线程A和线程B分别对应时间片1和时间片2。开始为线程A优先,并根据上一次线程B是否占用额外的时间对时间片1进行调整,新的时间片1=旧的时间片1+上次线程B额外占用时间。在新的时间片1内,只能分发线程A,阻止线程B的分发,直到时间片1结束。之后切换为线程B优先,直到线程B分发成功。然而,由于线程B需要的资源可能已经被之前的线程A占用而暂时无法释放,线程B分发的时间可能超过时间片2。这个超过的时间被记录下来,并用于更新时间片1。
上述基于时间片的调度技术存在以下两个问题。第一个问题是效率较低。当线程A和线程B不是满负载时,并不是每一个时钟周期线程A或线程B都有指令发出,例如在时间片1上,只能发线程A的指令,但如果期间有很多个时钟周期线程A没有指令要发,但是线程B上有指令。在这些时钟周期上,将没有指令发出,造成处理器整体性能的下降。第二个问题是可能存在“活锁”现象。例如,某个线程始终发不出去。假设线程A和线程B都需要一些共同的资源,线程A需要的资源较多。每次在时间片1内A都因为需要的资源不足而不能发出去。而切换到线程B优先时,因为线程B需要的资源较少,资源被释放一点又被线程B占用。最终导致线程A需要的资源始终不够,从而造成“活锁”现象。
至少为了克服上述技术问题,本公开至少一个实施例提供了一种多线程处理器的指令分发方法,多线程处理器包括多个解码指令队列和多个执行等待队列,多个解码指令队列分别用于多个线程,多个执行等待队列分别用于对应类型的多个执行单元,多个执行等待队列包括被多个线程共享的至少一个共享执行等待队列和分别用于多个线程的多个独立执行等待队列。该指令分发方法包括:接收多个解码指令队列分别发出的多个线程指令分发请求,该多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令;判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突;基于该判断,从多个线程指令分发请求选择一个线程指令分发请求并响应。
相应地,本公开至少一个实施例还提供了一种对应于上述指令分发方法的数据处理装置、处理器、电子设备和非瞬时可读存储介质。
在本公开至少一个实施例提供的指令分发方法中,可以通过判断多个解码指令队列分别发出的多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突,并基于该判断来选择一个线程指令分发请求,从而避免“活锁”现象的出现。在一些实施例中,还通过从多个解码指令队列分别发出的多个线程指令分发请求中选择一个线程指令分发请求并响应,从而避免某一解码指令队列没有指令发出却被选中的情况。
下面通过多个实施例及其示例对根据本公开提供的多线程处理器的指令分发方法进行非限制性的说明,如下面所描述的,在不相互抵触的情况下这些具体示例或实施例中不同特征可以相互组合,从而得到新的示例或实施例,这些新的示例或实施例也都属于本公开保护的范围。
图1为本公开至少一个实施例提供的一种多线程处理器的指令分发方法的示例流程图,图2为本公开至少一个实施例提供的一种多线程处理器的示例结构框图。
例如,如图1所示,本公开至少一个实施例提供了一种多线程处理器的指令分发方法10。多线程处理器包括多个解码指令队列和多个执行等待队列。例如,在一些示例中,多个解码指令队列分别用于多个线程,多个执行等待队列分别用于对应类型的多个执行单元。例如,在一些示例中,多个执行等待队列包括被多个线程共享的至少一个共享执行等待队列和分别用于多个线程的多个独立执行等待队列。如图1所示,该指令分发方法10包括如下步骤S101至S103。
步骤S101:接收多个解码指令队列分别发出的多个线程指令分发请求。该多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令。
步骤S102:判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突。
步骤S103:基于该判断,从多个线程指令分发请求选择一个线程指令分发请求并响应。
需要说明的是,在本公开的实施例中,图1所示的指令分发方法10可以应用于各种各样的多线程处理器,例如应用于包括2个线程的多线程处理器,包括4个、6个、8个线程的多线程处理器等,本公开的实施例对此不作限制,可以根据实际需求来设置。
例如,在本公开至少一个实施例中,图1所示的指令分发方法10可以应用于图2所示的多线程处理器。例如,如图2所示,一种4线程处理器包括指令分发模块,该指令分发模块用于接收前端解码得到的指令(例如微指令)或者之前缓存的指令(例如微指令)(这些指令/微指令分别对应于多个线程),并选择一个线程的指令(例如微指令)分发到后端的各个执行等待队列中。例如,在一些实施例中,多个执行等待队列可以包括图2中所示的整型计算指令队列、地址生成队列、读内存队列、写内存队列、指令退休队列、浮点计算队列等,本公开的实施例对此不作具体限制,可以根据实际需求来设置。不同的指令因为其指令类型不同,要进入不同的执行等待队列。例如,在一些实施例中,整型计算指令要进入整型计算指令队列,读内存指令要进入地址生成队列和读内存队列,浮点指令要进入浮点计算队列,本公开的实施例对此不作具体限制。
由于各个执行等待队列的空间有限,通常为了避免各个执行等待队列里的指令溢出(例如,某一执行等待队列已满仍将新的指令写入该队列),需要在计算各个执行等待队列的剩余空间或者可用资源的数量,在本文中也称为计算各个执行等待队列对应的令牌的数量。
如图2所示,整型计算指令队列、地址生成队列和读内存队列分别对应于令牌0、令牌1和令牌2,写内存队列、指令退休队列和浮点指令队列分别对应于令牌3、令牌4和令牌5。这些执行等待队列分别用于对应类型的多个执行单元,例如图2所示的执行单元0-3、浮点执行单元等。一级缓存、整型寄存器组、浮点寄存器组等与前述执行单元配合工作。
多个执行等待队列包括被多个线程共享的至少一个共享执行等待队列和分别用于多个线程的多个独立执行等待队列。例如,在如图2所示的实施例中,整型计算指令队列、地址生成队列和读内存队列为多线程共享,因此整型计算计算指令队列、地址生成队列和读内存队列可以称为共享执行等待队列。写内存队列、指令退休队列和浮点指令队列是为多线程中每一个线程单独设置的,因此写内存队列、指令退休队列和浮点指令队列可以称为独立执行等待队列。例如,在一些实施例中,令牌分为2种:共享令牌和独立令牌。例如,在图2所示的示例中,令牌0,1,2为共享令牌,令牌3,4,5为独立令牌。
需要说明的是,图2所示的4线程处理器仅仅是示例性的。本公开的实施例中的多线程处理器可以包括更多或更少的线程,也可以包括更多或更少的部件,本公开的实施例对此不作限制。
图3为本公开至少一个实施例提供的一种多线程指令分发仲裁的示意图。
例如,在本公开至少一个实施例中,对于步骤S101,接收多个解码指令队列分别发出的多个线程指令分发请求,该多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令。例如,在一些实施例中,解码后或者缓存的指令存放在多个解码指令队列中,多线程中每一个线程对应于独立的解码指令队列。例如,在图3所示的实施例中,4个线程分别对应于解码指令队列T0、解码指令队列T1、解码指令队列T2和解码指令队列T3。解码指令队列可以在一个时钟周期内输出多个指令,不同的指令要进入对应类型的执行等待队列。
例如,在一个示例中,解码指令队列T1在当前周期具有待发送的一组指令,则解码指令队列T1可以发送一个线程指令分发请求至指令分发模块。例如,在另一个示例中,解码指令队列T2在当前周期没有需要发送的指令,则解码指令队列T2可以不向指令分发模块发送线程指令分发请求。如此,不会出现指令分发模块选择了没有指令需要分发的线程,从而避免资源浪费,提高整个处理器的整体性能。
例如,在本公开至少一个实施例中,对于步骤S102,判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突,可以包括:基于多个执行等待队列中每一个当前可用的令牌数量,判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突。如此,通过比较线程指令分发请求所需要的令牌数和执行等待队列剩余的令牌数,预判该请求的一组指令是否会导致阻塞,从而尽量避免选择会导致阻塞的线程,以达到提高效率的目的。
需要说明的是,在本公开的实施例中,各个执行等待队列当前可用的令牌数量用于表示各个执行等待队列在当前时钟周期可用/剩余的空间。
例如,如图3所示的实施例中,接收到多个解码指令队列T0/T1/T2/T3分别发出的多个线程指令分发请求之后,在进行多线程指令分发仲裁时,需要执行令牌阻塞判断和共享令牌冲突判断。
例如,在本公开至少一个实施例中,对于令牌阻塞判断,可以包括:响应于多个线程指令分发请求中的第一线程指令分发请求需要的多个执行等待队列中的第一执行等待队列中的令牌数量大于第一执行等待队列中当前可用的令牌数量,确定第一线程指令分发请求对于第一执行等待队列存在阻塞。
需要说明的是,在本公开的实施例中,第一线程指令分发请求用于表示多个线程指令分发请求中的任一线程指令分发请求,第一执行等待队列用于表示多个执行等待队列中的任一执行等待队列。第一线程指令分发请求或者第一执行等待队列均不受限于特定的线程指令分发请求或者执行等待队列,也不受限于特定的顺序,可以根据实际需求来设置。
例如,在本公开至少一个实施例中,对于令牌阻塞判断,将解码指令队列在一个时钟周期内输出的一组指令视为一个整体。如果某一个线程(解码指令队列)被选中,但是所需要的令牌不足,那么该线程的一组指令会被整体阻塞,而不能分发出该组指令中的一部分指令。
例如,在本公开至少一个实施例中,需要根据解码指令队列在一个时钟周期内输出的一组指令的类型,计算出总共需要的各种令牌的数量,然后和各个相应的执行等待队列中剩余/可用的令牌数量作比较。如果某一执行等待队列中剩余/可用的令牌数量不够,则该线程如果被仲裁选中,也只能阻塞,不能进行分发。
图4为本公开至少一个实施例提供的一种判断令牌阻塞操作的示意框图。
例如,在本公开至少一个实施例中,如图4所示,解码指令队列T0~T3分别用于线程T0~T3,解码指令队列T0(为了简便起见,也称为线程T0)要发送的一组指令包括1个读指令、2个加法指令和1个浮点指令,所需要的各个执行等待队列的令牌数为:2个令牌0(对应于整型计算指令队列),1个令牌1(对应于地址生成队列),1个令牌2(对应于读内存队列),4个令牌4(对应于指令退休队列),1个令牌5(对应于浮点指令队列)。如果任一执行等待队列的当前可用的令牌数量小于解码指令队列T0所需要的令牌数量,则表示解码指令队列T0的该组指令没有办法全部放进各个执行等待队列,可以判断对应的线程T0存在阻塞。
例如,在一个示例中,解码指令队列T0需要4个令牌4,然而指令退休队列当前可用的令牌数量为2,即当前剩余2个令牌4。在这种情况下,解码指令队列T0所需要的令牌4数量大于指令退休队列当前可用的令牌4数量,则解码指令队列T0对于指令退休队列存在阻塞,也就是说,解码指令队列T0发送的线程指令分发请求对于指令退休队列存在阻塞。又例如,在另一个示例中,解码指令队列T0需要1个令牌1,然而地址生成队列当前可用的令牌数量为2,即当前剩余2个令牌1。在这种情况下,解码指令队列T0所需要的令牌1数量小于地址生成队列当前可用的令牌1数量,则解码指令队列T0对于地址生成队列不存在阻塞,也就是说,解码指令队列T0发送的线程指令分发请求对于地址生成队列不存在阻塞。
例如,在本公开至少一个实施例中,对于共享令牌冲突判断,包括:响应于多个线程指令分发请求中的第二线程指令分发请求对于至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且多个线程指令分发请求中的第三线程指令分发请求需要的第二执行等待队列中的令牌数量不大于第二执行等待队列中当前可用的令牌数量,确定第二线程指令分发请求对于第二执行等待队列存在冲突。
需要说明的是,在本公开的实施例中,第二线程指令分发请求用于表示多个线程指令分发请求中的任一线程指令分发请求,第三线程指令分发请求用于表示多个线程指令分发请求中的不同于第二线程指令分发请求的任一线程指令分发请求。第二执行等待队列用于表示至少一个共享执行等待队列中的任一共享执行等待队列。第二线程指令分发请求和第三线程指令分发请求不受限于特定的线程指令分发请求,也不受限于特定的顺序,可以根据实际需求来设置。第二执行等待队列不受限于特定的执行等待队列,也不受限于特定的顺序,可以根据实际需求来设置。
例如,在本公开至少一个实施例中,参考图2和图4,整型计算指令队列、地址生成队列和读内存队列为多个线程共享的共享执行等待队列,也就是说,令牌0、令牌1和令牌2为共享令牌。例如,在一个示例中,解码指令队列T0发出的线程指令分发请求包括的一组指令如图4所示,解码指令队列T0当前需要1个共享令牌2。在另一个解码指令队列T1需要4个共享令牌2,并且读内存指令队列中当前剩余/可用1个令牌的情况下,解码指令队列T1对于读内存指令队列存在阻塞,而解码指令队列T0对于读内存指令队列不阻塞,因此确定解码指令队列T1对于读内存指令队列存在冲突,并且其他请求该共享执行等待队列(即读内存指令队列)的解码指令队列(即解码指令队列T0)也被确定为存在冲突。
假设后续解码指令队列T0每个时钟周期输出的指令都只有1个读内存指令,且读内存指令队列每个时钟周期释放1个令牌,如果只根据阻塞情况则每次选择解码指令队列T0(线程T0),解码指令队列T1(线程T1)需要的4个令牌2始终得不到满足。这种情况被称为“活锁”。
例如,在本公开至少一个实施例中,对于步骤S103,基于以上判断,从多个线程指令分发请求选择一个线程指令分发请求并响应,包括:基于该判断,将多个线程指令分发请求中的至少一个加入候选请求集合;基于多个线程的优先级,从候选请求集合中选择一个线程指令分发请求并响应。
例如,在本公开至少一个实施例中,响应于多个线程指令分发请求中存在对于多个执行等待队列不存在阻塞且不存在冲突的第四线程指令分发请求,将第四线程指令分发请求加入该候选请求集合。
例如,在一些实施例中,在多个线程中存在非阻塞且非冲突的线程的情况下,可以直接将非阻塞且非冲突的线程发出的线程指令分发请求放入候选请求集合,存在阻塞或者冲突的线程不会被选中。如此,避免了处理器的性能浪费,提高处理效率。
例如,在本公开至少一个实施例中,响应于多个线程指令分发请求中不存在第四线程指令分发请求,并且多个线程指令分发请求中存在对于多个执行等待队列存在冲突的第五线程指令分发请求,将第五线程指令分发请求加入候选请求集合。
例如,在一些实施例中,在多个线程中不存在非阻塞且非冲突的线程的情况下,如果存在冲突的线程,可以将存在冲突的线程发出的线程指令分发请求放入候选请求集合。如此,阻塞在共享令牌下的线程不会因为其他线程一直占用该共享令牌而导致活锁现象。也就是说,在不存在非阻塞且非冲突线程的情况下,存在冲突的线程也有被选择的机会,从而避免活锁。
例如,在一个示例中,线程T0和线程T1对于某一共享令牌存在冲突,线程T2对于某一独立令牌存在阻塞,线性T3不存在冲突且不存在阻塞。在前述情况下,可以仅将线程T3发出的线程指令分发请求加入到候选请求集合中。又例如,在另一个示例中,线程T0和线程T1对于某一共享令牌存在冲突,线程T2和线程3存在阻塞。在前述不存在非阻塞且非冲突的线程的情况下,可以将存在冲突的线程T0和线程T1发出的线程指令分发请求加入到候选请求集合中,以供选择。
需要说明的是,在本公开的实施例中,第四线程指令分发请求用于表示不存在阻塞且不存在冲突的任一线程指令分发请求,第五线程指令分发请求用于表示存在冲突的任一线程指令分发请求,第四线程指令分发请求和第五线程指令分发请求均不受限于特定的线程指令分发请求,也不受限于特定的顺序,可以根据实际需求来设置。
例如,在本公开至少一个实施例中,在基于上述判断得到候选请求集合后,可以根据各个线程的优先级,在候选请求集合中选择一个线程。
例如,在本公开至少一个实施例中,根据最近最少使用(LRU)算法,确定多个线程当前的优先级,从候选请求集合中选择优先级最高的线程指令分发请求。通过LRU算法调整各个线程的优先级,如果线程T1最近一直没有发出指令,而其他线程都有发出指令的记录,那么将该线程T1的优先级调整为最高。
例如,在本公开至少一个实施例中,利用LRU算法,确定所多个线程当前的优先级,可以包括:初始化多个线程的优先级;响应于上一个时钟周期选择了多个线程中的第一线程,将第一线程在当前时钟周期的优先级设置为最低,并将多个线程中除了第一线程以外的其他线程的优先级递增。
需要说明的是,在本公开的实施例中,第一线程用于表示多个线程中的任一线程,不受限于特定的线程,也不受限于特定的顺序,可以根据实际需求来设置。
图5为本公开至少一个实施例提供的利用最近最少使用(LRU)算法调整多个线程的优先级的示意图。
例如,在本公开至少一个实施例中,如图5所示,对于多个线程T0、T1、T2和T3,首先初始化每个线程的优先级。例如,多个线程初始化的优先级排序(从高到低)是T0、T1、T2、T3。响应于在第一个时钟周期选择了线程T1,在下一个时钟周期(第二个时钟周期),线程T1的优先级被调整为最低,其他线程(线程T0、T2和T3)的优先级递增,也就是说,在第二个时钟周期,多个线程的优先级排序(从高到低)是T0、T2、T3、T1。响应于第二个时钟周期选择了线程T0,在下一个时钟周期(第三个时钟周期),线程T0的优先级被调整为最低,其他线程(线程T1、T2和T3)的优先级递增,也就是说,在第三个时钟周期,多个线程的优先级排序(从高到低)是T2、T3、T1、T0。
例如,在本公开至少一个实施例中,可以使用包括多个单元的队列来实现LRU算法,队列中每个单元存储线程序号。例如,队列头的线程优先级最高,队列尾的线程优先级最低。每次将仲裁选中的线程序号从队列中删除并重新插入队列尾,表示该线程已经被选中过,后面将其优先级调整至最低。
通过利用最近最少使用LRU算法调整各个线程的优先级,将最近最少使用的线程设为最高优先级,可以保证多线程分发的公平性。
例如,在本公开至少一个实施例中,可以根据轮询(round-robin)算法,确定多个线程当前的优先级。
图6为本公开至少一个实施例提供的利用轮询算法调整多个线程的优先级的示意图。
例如,在本公开至少一个实施例中,如图6所示,对于多个线程T0、T1、T2和T3,首先初始化每个线程的优先级。例如,多个线程初始化的优先级排序(从高到低)是T0、T1、T2、T3。响应于在第一个时钟周期选择了线程T1,在下一个时钟周期(第二个时钟周期),线程T1的优先级被调整为最低,线程T1的下一个线程(即线程T2)的优先级设置为最高,其他线程T0和T3以循环的方式排序。也就是说,在第二个时钟周期,多个线程的优先级排序(从高到低)是T2、T3、T0、T1。响应于第二个时钟周期选择了线程T0,在下一个时钟周期(第三个时钟周期),线程T0的优先级被调整为最低,线程T0的下一个线程(即线程T1)的优先级设置为最高,其他线程T2和T3以循环的方式排序。也就是说,在第三个时钟周期,多个线程的优先级排序(从高到低)是T1、T2、T3、T0。
通过采用轮询算法调整各个线程的优先级,算法简单,也保证了多线程分发的公平性。
需要说明的是,在本公开的实施例中,除了采用LRU算法、轮询算法之外,可以采用其他优先级设定算法,本公开的实施例对此不作限制,可以根据实际需求来设定。
图7为本公开至少一个实施例提供的一种指令分发方法的示意框图。
例如,在本公开至少一个实施例中,如图7所示,根据各个线程(解码指令队列)发出的请求信号和优先级信号进行多线程选择,最终选择出请求信号为有效且在请求信号为有效的一个或多个线程中的优先级最高的线程。例如,对于4线程处理器,如上所述,每个线程检查是否是非阻塞且非冲突,得到相应的判断信号,将4个线程各自的判断信号作或(图7中表示为≥1)得到4个线程中是否存在非阻塞且非冲突的线程的确定信号。将4个线程中存在非阻塞且非冲突线程的确定信号取反与每个线程的令牌冲突信号作与(图7中表示为&),再与前面的各个线程的判断信号作或,然后与有指令信号作与,得到最终的请求信号。接着,结合多个线程的优先级信号(例如,根据前述LRU算法或者轮询算法等),选择一个线程进行响应。
因此,通过本公开至少一个实施例提供的多线程处理器的指令分发方法10可以使得多线程指令分发更有效率、更具有公平性,还能避免“活锁”现象,从而提高多线程处理器的整体性能。
例如,在本公开至少一个实施例中,多线程包括至少3个线程。需要说明的是,虽然本文以4线程处理器为示例来说明本公开的实施例提供的指令分发方法10,但是本公开的实施例提供的指令分发方法10并不仅仅适用于4线程处理器,也可以适用于2线程处理器、3线程处理器、5线程处理器等,本公开的实施例对此不作限制。
还需要说明的是,在本公开的各个实施例中,指令分发方法10的各个步骤的执行顺序不受限制,虽然上文以特定顺序描述了各个步骤的执行过程,但这并不构成对本公开实施例的限制。指令分发方法10中的各个步骤可以串行执行或并行执行,这可以根据实际需求而定。例如,指令分发方法10还可以包括更多或更少的步骤,本公开的实施例对此不作限制。
图8为本公开至少一个实施例提供的一种指令分发装置的示意框图。
例如,如图8所示,本公开至少一个实施例提供了一种指令分发装置80。指令分发装置80分别与多线程处理器的多个解码指令队列802和多个执行等待队列803通信连接。例如,多个解码指令队列802分别用于多个线程,多个执行等待队列803分别用于对应类型的多个执行单元。例如,在一些示例中,多个执行等待队列803包括被多个线程共享的至少一个共享执行等待队列和分别用于多个线程的多个独立执行等待队列。指令分发装置80包括接收单元811、判断单元812和选择单元813。
接收单元811与多线程处理器通信连接,被配置为接收多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求,多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令。例如,接收单元811可以实现步骤S101,其具体实现方法可以参考步骤S101的相关描述,在此不再赘述。
判断单元812与多线程处理器通信连接,被配置为判断多个线程指令分发请求对于多线程处理器的多个执行等待队列是否存在阻塞以及冲突。例如,判断单元812可以实现步骤S102,其具体实现方法可以参考步骤S102的相关描述,在此不再赘述。
选择单元813被配置为基于上述判断,从多个线程指令分发请求选择一个线程指令分发请求并响应。例如,选择单元813可以实现步骤S103,其具体实现方法可以参考步骤S103的相关描述,在此不再赘述。
需要说明的是,上述接收单元811、判断单元812和选择单元813可以通过软件、硬件、固件或它们的任意组合实现,例如,上述接收单元811、判断单元812和选择单元813可以分别实现为接收电路811、判断电路812和选择电路813,本公开的实施例对它们的具体实施方式不作限制。
例如,在本公开至少一个实施例中,判断单元812可以包括组合判断子单元。例如,该组合判断子单元可以配置为基于多个执行等待队列中每一个当前可用的令牌数量,判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突。例如,该组合判断子单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,组合判断子单元可以包括阻塞判断单元和冲突判断单元。例如,在一些实施例中,该阻塞判断单元被配置为响应于多个线程指令分发请求中的第一线程指令分发请求需要的多个执行等待队列中的第一执行等待队列中的令牌数量大于第一执行等待队列中当前可用的令牌数量,确定第一线程指令分发请求对于第一执行等待队列存在阻塞。例如,该阻塞判断单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在一些实施例中,冲突判断单元被配置为响应于多个线程指令分发请求中的第二线程指令分发请求对于至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且多个线程指令分发请求中的第三线程指令分发请求需要的第二执行等待队列中的令牌数量不大于第二执行等待队列中当前可用的令牌数量,确定第二线程指令分发请求和第三线程指令分发请求对于第二执行等待队列存在冲突。例如,冲突判断单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,选择单元813可以包括候选选择单元和优先级选择单元。例如,在一些实施例中,候选选择单元被配置为基于上述判断,将多个线程指令分发请求中的至少一个加入候选请求集合。优先级选择单元被配置为基于多个线程的优先级,从候选请求集合中选择一个线程指令分发请求并响应。例如,候选选择单元和优先级选择单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,候选选择单元可以包括直接选择单元和冲突选择单元。例如,在一些实施例中,直接选择单元被配置为响应于多个线程指令分发请求中存在对于多个执行等待队列不存在阻塞且不存在冲突的第四线程指令分发请求,将第四线程指令分发请求加入候选请求集合。例如,在一些实施例中,冲突选择单元被配置为响应于多个线程指令分发请求中不存在第四线程指令分发请求,并且多个线程指令分发请求中存在对于多个执行等待队列存在冲突的第五线程指令分发请求,将第五线程指令分发请求加入候选请求集合。例如,直接选择单元和冲突选择单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,优先级选择单元可以包括设置单元和分发单元。例如,在一些实施例中,设置单元被配置为根据最近最少使用LRU算法,确定多个线程当前的优先级。分发单元被配置为从候选请求集合中选择优先级最高的线程指令分发请求。例如,设置单元和分发单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,设置单元可以包括初始化单元和调整单元。例如,在一些实施例中,初始化单元被配置为初始化多个线程的优先级。调整单元被配置为响应于上一个时钟周期选择了多个线程中的第一线程,将第一线程在当前时钟周期的优先级设置为最低,并将多个线程中除了第一线程以外的其他线程的优先级递增。例如,初始化单元和调整单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,优先级选择单元可以包括设置子单元。该设置子单元被配置为根据轮询算法,确定多个线程当前的优先级。例如,设置子单元可以实现的操作可以参考前述指令分发方法10的相关描述,在此不再赘述。
例如,在本公开至少一个实施例中,多线程包括至少3个线程。
需要说明的是,上述组合判断子单元、阻塞判断单元、冲突判断单元、候选选择单元、优先级选择单元、直接选择单元、冲突选择单元、设置单元、分发单元、初始化单元、调整单元和设置子单元可以通过软件、硬件、固件或它们的任意组合实现,例如,上述组合判断子单元、阻塞判断单元、冲突判断单元、候选选择单元、优先级选择单元、直接选择单元、冲突选择单元、设置单元、分发单元、初始化单元、调整单元和设置子单元可以分别实现为组合判断子电路、阻塞判断电路、冲突判断电路、候选选择电路、优先级选择电路、直接选择电路、冲突选择电路、设置电路、分发电路、初始化电路、调整电路和设置子电路,本公开的实施例对它们的具体实施方式不作限制。
应当理解的是,本公开至少一个实施例提供的指令分发装置80可以实施前述多线程处理器的指令分发方法10,也可以实现与前述指令分发方法10相似的技术效果。例如,通过本公开至少一个实施例提供的指令分发装置801,可以有效提高多线程指令分发的效率、公平性,避免活锁现象。
需要注意的是,在本公开的实施例中,该指令分发装置80可以包括更多或更少的电路或单元,并且各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。
图9为本公开至少一个实施例提供的一种数据处理装置70的示意框图。
例如,本公开至少一个实施例还提供了一种数据处理装置70。如图9所示,数据处理装置70包括指令分发装置701、多个解码指令队列702和多个执行等待队列703。例如,在一些示例中,数据处理装置70包括图8中所示的指令分发装置801、多个解码指令队列802和多个执行等待队列803。
需要注意的是,在本公开的实施例中,该数据处理装置70可以包括更多或更少的电路或单元,并且各个电路或单元之间的连接关系不受限制,可以根据实际需求而定。各个电路的具体构成方式不受限制,可以根据电路原理由模拟器件构成,也可以由数字芯片构成,或者以其他适用的方式构成。
应当理解的是,本公开至少一个实施例提供的数据处理装置70可以实施前述多线程处理器的指令分发方法10,也可以实现与前述指令分发方法10相似的技术效果。例如,通过本公开至少一个实施例提供的数据处理装置70,可以有效提高多线程指令分发的效率、公平性,避免活锁现象,从而提高多线程处理器的整体性能。
图10为本公开至少一个实施例提供的一种处理器的示意框图。
例如,本公开至少一个实施例还提供了一种处理器90。如图10所示,处理器90包括上述任一实施例所述的数据处理装置70。例如,在一些实施例中,处理器90可以是一种多线程处理器,例如4线程处理器。应当理解的是,本公开至少一个实施例提供的处理器90可以实施前述多线程处理器的指令分发方法10,也可以实现与前述指令分发方法10相似的技术效果。例如,通过本公开至少一个实施例提供的处理器90,可以有效提高多线程指令分发的效率、公平性,避免活锁现象,从而提高多线程处理器的整体性能。
图11为本公开至少一个实施例提供的一种电子设备的示意框图。
本公开至少一个实施例还提供了一种电子设备20。如图11所示,电子设备20包括处理器210和存储器220。存储器220包括一个或多个计算机程序模块221。一个或多个计算机程序模块221被存储在存储器220中并被配置为由处理器210执行,该一个或多个计算机程序模块221包括用于执行本公开的至少一个实施例提供的指令分发方法10的指令,其被处理器210执行时,可以执行本公开的至少一个实施例提供的指令分发方法10中的一个或多个步骤。存储器220和处理器210可以通过总线系统和/或其它形式的连接机构(未示出)互连。
例如,处理器210可以是中央处理单元(CPU)、数字信号处理器(DSP)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元,例如现场可编程门阵列(FPGA)等。例如,中央处理单元(CPU)可以为X86或ARM架构等。处理器210可以为通用处理器或专用处理器,可以控制电子设备20中的其它组件以执行期望的功能。
例如,存储器220可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序模块221,处理器210可以运行一个或多个计算机程序模块221,以实现电子设备20的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。电子设备20的具体功能和技术效果可以参考上文中关于指令分发方法10的描述,此处不再赘述。
图12为本公开至少一个实施例提供的又一种电子设备的示意框图。
图12示出的电子设备300仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。例如,如图12所示,在一些示例中,电子设备300包括处理装置(例如中央处理器、图形处理器等)301,其可以根据存储在只读存储器(ROM)302中的程序或者从存储装置308加载到随机访问存储器(RAM)303中的程序而执行各种适当的动作和处理。在RAM303中,还存储有计算机系统操作所需的各种程序和数据。处理装置301、ROM 302以及RAM303通过总线304被此相连。输入/输出(I/O)接口305也连接至总线304。
例如,以下部件可以连接至I/O接口305:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置306;包括诸如液晶显示器(LCD)、扬声器、振动器等的输出装置307;包括例如磁带、硬盘等的存储装置308;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信装置309。通信装置309可以允许电子设备300与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。驱动器310也根据需要连接至I/O接口305。可拆卸介质311,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器310上,以便于从其上读出的计算机程序根据需要被安装入存储装置308。虽然图12示出了包括各种装置的电子设备300,但是应理解的是,并不要求实施或包括所有示出的装置。可以替代地实施或包括更多或更少的装置。
例如,该电子设备300还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为USB接口、闪电(lighting)接口等。该通信装置309可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(LAN)和/或城域网(MAN)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(GSM)、增强型数据GSM环境(EDGE)、宽带码分多址(W-CDMA)、码分多址(CDMA)、时分多址(TDMA)、蓝牙、Wi-Fi(例如基于IEEE 802.11a、IEEE 802.11b、IEEE 802.11g和/或IEEE 802.11n标准)、基于因特网协议的语音传输(VoIP)、Wi-MAX,用于电子邮件、即时消息传递和/或短消息服务(SMS)的协议,或任何其他合适的通信协议。
例如,电子设备300可以为手机、平板电脑、笔记本电脑、电子书、游戏机、电视机、数码相框、导航仪等任何设备,也可以为任意的数据处理装置及硬件的组合,本公开的实施例对此不作限制。
例如,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置309从网络上被下载和安装,或者从存储装置308被安装,或者从ROM 302被安装。在该计算机程序被处理装置301执行时,执行本公开实施例所公开的指令分发方法10。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备300中所包含的;也可以是单独存在,而未装配入该电子设备300中。
图13为本公开至少一个实施例提供的一种非瞬时可读存储介质的示意框图。
本公开的实施例还提供一种非瞬时可读存储介质。图13是根据本公开至少一个实施例的一种非瞬时可读存储介质的示意框图。如图13所示,非瞬时可读存储介质100上存储有计算机指令111,该计算机指令111被处理器执行时执行如上所述的指令分发方法10中的一个或多个步骤。
例如,该非瞬时可读存储介质100可以是一个或多个计算机可读存储介质的任意组合,例如,一个计算机可读存储介质包含用于接收多个解码指令队列分别发出的多个线程指令分发请求的计算机可读的程序代码,另一个计算机可读存储介质包含用于判断多个线程指令分发请求对于多个执行等待队列是否存在阻塞以及冲突的计算机可读的程序代码。又一个计算机可读存储介质包含用于基于上述判断,从多个线程指令分发请求选择一个线程指令分发请求并响应的计算机可读的程序代码。当然,上述各个程序代码也可以存储在同一个计算机可读介质中,本公开的实施例对此不作限制。
例如,当该程序代码由计算机读取时,计算机可以执行该计算机存储介质中存储的程序代码,执行例如本公开任一实施例提供的指令分发方法10。
例如,存储介质可以包括智能电话的存储卡、平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。例如,该可读存储介质也可以为图11中的存储器220,相关描述可以参考前述内容,此处不再赘述。
在本公开中,术语“多个”指两个或两个以上,除非另有明确的限定。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (20)

1.一种多线程处理器的指令分发方法,包括:
接收所述多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求,其中,所述多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令;
判断所述多个线程指令分发请求对于所述多线程处理器的多个执行等待队列是否存在阻塞以及冲突;
基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应。
2.根据权利要求1所述的方法,其中,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突,包括:
基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突。
3.根据权利要求2所述的方法,其中,基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞,包括:
响应于所述多个线程指令分发请求中的第一线程指令分发请求需要的所述多个执行等待队列中的第一执行等待队列中的令牌数量大于所述第一执行等待队列中当前可用的令牌数量,确定所述第一线程指令分发请求对于所述第一执行等待队列存在阻塞。
4.根据权利要求2所述的方法,其中,所述多个执行等待队列包括被所述多个线程共享的至少一个共享执行等待队列,
其中,基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在冲突,包括:
响应于所述多个线程指令分发请求中的第二线程指令分发请求对于所述至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且所述多个线程指令分发请求中的第三线程指令分发请求需要的所述第二执行等待队列中的令牌数量不大于所述第二执行等待队列中当前可用的令牌数量,确定所述第二线程指令分发请求和所述第三线程指令分发请求对于所述第二执行等待队列存在冲突。
5.根据权利要求1所述的方法,其中,基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应,包括:
基于所述判断,将所述多个线程指令分发请求中的至少一个加入候选请求集合;
基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求并响应。
6.根据权利要求5所述的方法,其中,基于所述判断,将所述多个线程指令分发请求中的至少一个加入所述候选请求集合,包括:
响应于所述多个线程指令分发请求中存在对于所述多个执行等待队列不存在阻塞且不存在冲突的第四线程指令分发请求,将所述第四线程指令分发请求加入所述候选请求集合。
7.根据权利要求6所述的方法,其中,基于所述判断,将所述多个线程指令分发请求中的至少一个加入所述候选请求集合,包括:
响应于所述多个线程指令分发请求中不存在所述第四线程指令分发请求,并且所述多个线程指令分发请求中存在对于所述多个执行等待队列存在冲突的第五线程指令分发请求,将所述第五线程指令分发请求加入所述候选请求集合。
8.根据权利要求5所述的方法,其中,基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求,包括:
利用最近最少使用算法,确定所述多个线程当前的优先级,
从所述候选请求集合中选择优先级最高的线程指令分发请求。
9.根据权利要求8所述的方法,其中,利用最近最少使用算法,确定所述多个线程当前的优先级,包括:
初始化所述多个线程的优先级;
响应于上一个时钟周期选择了所述多个线程中的第一线程,将所述第一线程在当前时钟周期的优先级设置为最低,并将所述多个线程中除了所述第一线程以外的其他线程的优先级递增。
10.根据权利要求5所述的方法,其中,基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求,包括:
利用轮询算法,确定所述多个线程当前的优先级。
11.根据权利要求1-10中任一项所述的方法,其中,所述多线程包括至少3个线程。
12.一种指令分发装置,包括:
接收单元,与多线程处理器通信连接,被配置为接收所述多线程处理器的多个解码指令队列分别发出的多个线程指令分发请求,其中,所述多个线程指令分发请求中每一个包括需要被分别发送到对应类型的执行等待队列的多条指令;
判断单元,与所述多线程处理器通信连接,被配置为判断所述多个线程指令分发请求对于所述多线程处理器的多个执行等待队列是否存在阻塞以及冲突;
选择单元,被配置为基于所述判断,从所述多个线程指令分发请求选择一个线程指令分发请求并响应。
13.根据权利要求12所述的指令分发装置,其中,所述判断单元包括组合判断子单元,
所述组合判断子单元被配置为基于所述多个执行等待队列中每一个当前可用的令牌数量,判断所述多个线程指令分发请求对于所述多个执行等待队列是否存在阻塞以及冲突。
14.根据权利要求13所述的指令分发装置,其中,所述组合判断子单元包括阻塞判断单元,
所述阻塞判断单元被配置为响应于所述多个线程指令分发请求中的第一线程指令分发请求需要的所述多个执行等待队列中的第一执行等待队列中的令牌数量大于所述第一执行等待队列中当前可用的令牌数量,确定所述第一线程指令分发请求对于所述第一执行等待队列存在阻塞。
15.根据权利要求13所述的指令分发装置,其中,所述多个执行等待队列包括被所述多个线程共享的至少一个共享执行等待队列,所述组合判断子单元包括冲突判断单元,
所述冲突判断单元被配置为响应于所述多个线程指令分发请求中的第二线程指令分发请求对于所述至少一个共享执行等待队列中的第二执行等待队列存在阻塞,并且所述多个线程指令分发请求中的第三线程指令分发请求需要的所述第二执行等待队列中的令牌数量不大于所述第二执行等待队列中当前可用的令牌数量,确定所述第二线程指令分发请求和所述第三线程指令分发请求对于所述第二执行等待队列存在冲突。
16.根据权利要求12所述的指令分发装置,其中,所述选择单元包括候选选择单元和优先级选择单元,
所述候选选择单元配置为基于所述判断,将所述多个线程指令分发请求中的至少一个加入候选请求集合;
所述优先级选择单元配置为基于所述多个线程的优先级,从所述候选请求集合中选择一个线程指令分发请求并响应。
17.一种数据处理装置,包括如权利要求12-16中任一项所述的指令分发装置,多个解码指令队列和多个执行等待队列。
18.一种处理器,包括如权利要求17所述的数据处理装置。
19.一种电子设备,包括
处理器;
存储器,包括一个或多个计算机程序模块,
其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块包括用于执行权利要求1-11中任一项所述的指令分发方法的指令。
20.一种非瞬时可读存储介质,其上存储有计算机指令,
其中,所述计算机指令被处理器执行时执行如权利要求1-11中任一项所述的指令分发方法。
CN202211033483.6A 2022-08-26 2022-08-26 多线程处理器的指令分发方法、装置和存储介质 Active CN115408153B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202211033483.6A CN115408153B (zh) 2022-08-26 2022-08-26 多线程处理器的指令分发方法、装置和存储介质
PCT/CN2023/114840 WO2024041625A1 (zh) 2022-08-26 2023-08-25 多线程处理器的指令分发方法、装置和存储介质
EP23856712.7A EP4386554A1 (en) 2022-08-26 2023-08-25 Instruction distribution method and device for multithreaded processor, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211033483.6A CN115408153B (zh) 2022-08-26 2022-08-26 多线程处理器的指令分发方法、装置和存储介质

Publications (2)

Publication Number Publication Date
CN115408153A CN115408153A (zh) 2022-11-29
CN115408153B true CN115408153B (zh) 2023-06-30

Family

ID=84161714

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211033483.6A Active CN115408153B (zh) 2022-08-26 2022-08-26 多线程处理器的指令分发方法、装置和存储介质

Country Status (3)

Country Link
EP (1) EP4386554A1 (zh)
CN (1) CN115408153B (zh)
WO (1) WO2024041625A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115408153B (zh) * 2022-08-26 2023-06-30 海光信息技术股份有限公司 多线程处理器的指令分发方法、装置和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109766201A (zh) * 2019-01-04 2019-05-17 中国联合网络通信集团有限公司 任务分发方法、服务器、客户端和系统
CN112395093A (zh) * 2020-12-04 2021-02-23 龙芯中科(合肥)技术有限公司 多线程数据处理方法、装置、电子设备及可读存储介质
CN112672440A (zh) * 2020-12-18 2021-04-16 中兴通讯股份有限公司 指令执行方法、系统、网络设备及存储介质
CN114143265A (zh) * 2021-11-26 2022-03-04 杭州安恒信息技术股份有限公司 一种网络流量限流方法、装置、设备及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100498482B1 (ko) * 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
US20040226011A1 (en) * 2003-05-08 2004-11-11 International Business Machines Corporation Multi-threaded microprocessor with queue flushing
US7748001B2 (en) * 2004-09-23 2010-06-29 Intel Corporation Multi-thread processing system for detecting and handling live-lock conditions by arbitrating livelock priority of logical processors based on a predertermined amount of time
US11175924B2 (en) * 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
CN110647357B (zh) * 2018-06-27 2021-12-03 展讯通信(上海)有限公司 同步多线程处理器
WO2020132841A1 (zh) * 2018-12-24 2020-07-02 华为技术有限公司 一种基于多线程的指令处理方法及装置
CN111552574A (zh) * 2019-09-25 2020-08-18 华为技术有限公司 一种多线程同步方法及电子设备
WO2021217300A1 (zh) * 2020-04-26 2021-11-04 深圳市大疆创新科技有限公司 并行执行单元的管理装置、方法及电子设备
CN115408153B (zh) * 2022-08-26 2023-06-30 海光信息技术股份有限公司 多线程处理器的指令分发方法、装置和存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109766201A (zh) * 2019-01-04 2019-05-17 中国联合网络通信集团有限公司 任务分发方法、服务器、客户端和系统
CN112395093A (zh) * 2020-12-04 2021-02-23 龙芯中科(合肥)技术有限公司 多线程数据处理方法、装置、电子设备及可读存储介质
CN112672440A (zh) * 2020-12-18 2021-04-16 中兴通讯股份有限公司 指令执行方法、系统、网络设备及存储介质
CN114143265A (zh) * 2021-11-26 2022-03-04 杭州安恒信息技术股份有限公司 一种网络流量限流方法、装置、设备及存储介质

Also Published As

Publication number Publication date
EP4386554A1 (en) 2024-06-19
CN115408153A (zh) 2022-11-29
WO2024041625A1 (zh) 2024-02-29

Similar Documents

Publication Publication Date Title
US9858115B2 (en) Task scheduling method for dispatching tasks based on computing power of different processor cores in heterogeneous multi-core processor system and related non-transitory computer readable medium
EP2791795B1 (en) Policies for shader resource allocation in a shader core
CN107066408B (zh) 用于数字信号处理的方法、系统和装置
US10242420B2 (en) Preemptive context switching of processes on an accelerated processing device (APD) based on time quanta
US20140022263A1 (en) Method for urgency-based preemption of a process
US20100211954A1 (en) Practical contention-free distributed weighted fair-share scheduler
US20150121387A1 (en) Task scheduling method for dispatching tasks based on computing power of different processor cores in heterogeneous multi-core system and related non-transitory computer readable medium
KR20150132218A (ko) 게스트 운영 체계 및 가상 프로세서들과 함께 하이퍼바이저를 이용하는 시스템들 및 방법들
US9529625B2 (en) Method and system for providing stack memory management in real-time operating systems
US20100082867A1 (en) Multi-thread processor and its interrupt processing method
CN112540796B (zh) 一种指令处理装置、处理器及其处理方法
CN115408153B (zh) 多线程处理器的指令分发方法、装置和存储介质
CN114637536A (zh) 任务处理方法、计算协处理器、芯片及计算机设备
US9286114B2 (en) System and method for launching data parallel and task parallel application threads and graphics processing unit incorporating the same
US7509643B2 (en) Method and apparatus for supporting asymmetric multi-threading in a computer system
CN111597044A (zh) 任务调度方法、装置、存储介质及电子设备
CN112925616A (zh) 任务分配方法、装置、存储介质及电子设备
CN112789593A (zh) 一种基于多线程的指令处理方法及装置
US11256543B2 (en) Processor and instruction scheduling method
CN111078289B (zh) 用于执行多线程系统的子线程的方法和多线程系统
CN115695330B (zh) 嵌入式系统中微程的调度系统、方法、终端及存储介质
US20190317827A1 (en) Method and apparatus for managing kernel services in multi-core system
CN115202842A (zh) 任务调度方法及装置
JP2009252133A (ja) ベクトル処理装置及びベクトル処理方法
US9632834B2 (en) Assigning priorities to computational work streams by mapping desired execution priorities to device priorities

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