指令调度方法、人工智能芯片、计算机设备和存储介质

文档序号:189982 发布日期:2021-11-02 浏览:30次 >En<

阅读说明:本技术 指令调度方法、人工智能芯片、计算机设备和存储介质 (Instruction scheduling method, artificial intelligence chip, computer device and storage medium ) 是由 于潇宇 陈德炜 章恒 于 2021-01-28 设计创作,主要内容包括:本申请涉及人工智能技术,特别涉及一种指令调度方法、人工智能芯片、计算机设备和存储介质。所述方法包括:在指令映射队列集内查询处于空闲状态的指令映射队列;当查询到空闲状态的指令映射队列时,从指令缓存中读出至少一个待执行指令集;将各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元,以使各所述执行单元对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。采用本方法能够提高指令的执行效率,进而提升AI芯片的吞吐量和执行效率。(The present application relates to artificial intelligence technology, and in particular, to an instruction scheduling method, an artificial intelligence chip, a computer device, and a storage medium. The method comprises the following steps: querying an instruction mapping queue in an idle state in an instruction mapping queue set; when an instruction mapping queue in an idle state is inquired, reading at least one instruction set to be executed from an instruction cache; writing each instruction set to be executed into different instruction queues corresponding to the instruction mapping queues in sequence; and dispatching the instructions in the instruction sets to be executed in different instruction queues to the execution units in a parallel mode, so that the execution units execute the instructions in different instruction sets to be executed in parallel, and execute the instructions in the same instruction set to be executed in sequence according to the instruction sequence. By adopting the method, the instruction execution efficiency can be improved, and the throughput and the execution efficiency of the AI chip are further improved.)

指令调度方法、人工智能芯片、计算机设备和存储介质

技术领域

本申请涉及人工智能技术领域,特别是涉及一种指令调度方法、人工智能芯片、计算机设备和存储介质。

背景技术

随着人工智能技术的发展,使得人工智能技术应用到了各领域,如应用到芯片中,得到基于AI(Artificial Intelligence,人工智能)技术的芯片(即AI芯片),使得芯片智能化。

在AI芯片设计中,通常是一组指令调度架构对应一套“矩阵运算+向量运算+load操作+store操作”的执行架构,因此AI芯片在完成某个任务的过程中,通常是先执行该任务对应的一条指令,当该指令执行完后,再执行下一条指令。然而,采用上述方式执行相应的指令,使得指令的执行效率低,进而影响AI芯片的吞吐量和执行效率。

发明内容

基于此,有必要针对上述技术问题,提供一种指令调度方法、人工智能芯片、计算机设备和存储介质,能够提高指令的执行效率,进而提升AI芯片的吞吐量和执行效率。

一种指令调度方法,所述方法包括:

在指令映射队列集内查询处于空闲状态的指令映射队列;

当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;

将读出的各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;所述指令映射队列,用于保存所述待执行指令集的标识和所述待执行指令集内指令的标识;

以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元,以使各所述执行单元对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。

一种指令调度装置,所述装置包括:

查询模块,用于在指令映射队列集内查询处于空闲状态的指令映射队列;

读取模块,用于当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;

写入模块,用于将读出的各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;所述指令映射队列,用于保存所述待执行指令集的标识和所述待执行指令集内指令的标识;

调度模块,用于以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元,以使各所述执行单元对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。

一种人工智能芯片,所述人工智能芯片包括:状态查询单元、指令调度单元和执行单元;所述指令调度单元包括指令缓存、指令选通子单元、指令分发子单元和指令队列单元;

所述状态查询单元,用于在指令映射队列集内查询处于空闲状态的指令映射队列;

所述指令缓存,用于存储待执行指令集;

所述指令选通子单元,用于当查询到空闲状态的指令映射队列时,从所述指令缓存中读出所述待执行指令集;

所述指令分发子单元,用于将读出的各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;所述指令映射队列,用于保存所述待执行指令集的标识和所述待执行指令集内指令的标识;

所述指令队列单元,用于以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元;

所述执行单元,用于对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现以下步骤:

在指令映射队列集内查询处于空闲状态的指令映射队列;

当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;

将读出的各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;所述指令映射队列,用于保存所述待执行指令集的标识和所述待执行指令集内指令的标识;

以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元,以使各所述执行单元对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在指令映射队列集内查询处于空闲状态的指令映射队列;

当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;

将读出的各所述待执行指令集依次写入不同的、且与所述指令映射队列对应的指令队列;所述指令映射队列,用于保存所述待执行指令集的标识和所述待执行指令集内指令的标识;

以并行方式将不同所述指令队列的待执行指令集内的指令调度至执行单元,以使各所述执行单元对不同所述待执行指令集内的指令并行执行,且对相同所述待执行指令集内的指令按照指令顺序依次执行。

上述指令调度方法、装置、人工智能芯片、计算机设备和存储介质,通过在指令映射队列集内查询是否存在处于空闲状态的指令映射队列,当查询到空闲状态的指令映射队列时,表示存在与该指令映射队列对应的、且处于空闲状态的指令队列,因此可以从指令缓存中读出至少一个待执行指令集,然后将待执行指令集的标识和待执行指令集内指令的标识保存于指令映射队列,以及将各待执行指令集依次写入不同的指令队列,从而存在可以并行的指令队列可以调度指令,不同指令队列之间的指令可以并行调度并通过执行单元执行,相同指令队列内的指令可以依序调度并通过执行单元执行,从而可以提升指令的执行效率,以及可以提升使用执行单元的概率,进而有效地提高了AI芯片的吞吐量和执行效率。

附图说明

图1为一个实施例中指令调度方法的应用环境图;

图2为一个实施例中指令调度方法的流程示意图;

图3为一个实施例中人工智能芯片的结构示意图;

图4为一个实施例中通过人工智能芯片进行视频解码和播放的示意图;

图5为一个实施例中从指令缓存中读取指令步骤的流程示意图;

图6为一个实施例中从存储器中读取指令步骤的流程示意图;

图7为一个实施例中当指令执行完成时对指令映射队列和指令队列进行清理步骤的流程示意图;

图8为另一个实施例中指令调度方法的应用环境图;

图9为一个实施例中指令调度装置的结构框图;

图10为另一个实施例中指令调度装置的结构框图;

图11为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。

人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。

随着人工智能技术研究和进步,人工智能技术在多个领域展开研究和应用,例如常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗、智能客服等,相信随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。

本申请实施例提供的方案涉及人工智能的人工智能芯片以及集成人工智能芯片的终端,具体通过如下实施例进行说明:

本申请提供的指令调度方法,可以应用于如图1所示的应用环境中。在该应用环境中,包括终端102、终端104和服务器106。终端104或服务器106可以向终端102发起一个或多个目标任务,或者终端102内部发起一个或多个目标任务,终端102在得到目标任务时,可以编译与该目标任务对应的计算机程序得到大量的指令,该指令可以存储于片内或片外存储器,终端102从存储器中读取待执行的指令,然后在指令映射队列集内查询处于空闲状态的指令映射队列;当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;将读出的各待执行指令集依次写入不同的、且与指令映射队列对应的指令队列;指令映射队列,用于保存待执行指令集的标识和待执行指令集内指令的标识;以并行方式将不同指令队列的待执行指令集内的指令调度至执行单元,以使各执行单元对不同待执行指令集内的指令并行执行,且对相同待执行指令集内的指令按照指令顺序依次执行。

其中,终端102和终端104可以是集成了人工智能芯片的各种电子设备,如智能手机、平板电脑、笔记本电脑、台式计算机和智能手表,以及打印机和智能家电等,该智能家电具体可以包括智能音箱或电视等,但并不局限于此。上述的人工智能芯片可以指AI处理器,或其它AI芯片,如AI电路。

服务器106可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群,可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。

终端102、终端104与服务器106之间可以通过蓝牙、USB(Universal Serial Bus,通用串行总线)或者网络等通讯连接方式进行连接,本申请在此不做限制。

在一个实施例中,如图2所示,提供了一种指令调度方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:

S202,在指令映射队列集内查询处于空闲状态的指令映射队列。

其中,指令映射队列可以是用于存放指令的标识、执行状态以及该指令所在待执行指令集的标识,该指令映射队列与指令队列之间存在映射关系。在功能上,该指令映射队列可作为指令队列的映射,因此指令映射队列也可称为指令队列映射,在后续实施例中,两者可相互指代。如存在n个指令队列,则对应n个指令映射队列,在查询到某个指令映射队列时,可以根据该指令映射队列找到对应的指令队列;此外,在查询到指令映射队列中指令的标识时,可以从指令队列中找到该标识对应的指令;而且,在查询到指令映射队列中待执行指令集的标识时,可以从指令队列中找到该标识对应的待执行指令集。在该指令映射队列中,可以采用先入先出(First Input First Output,FIFO)方式或指令指针方式对存放的标识、执行状态以及待执行指令集的标识进行处理,如指令被执行完时,可以在该指令映射队列中删除该指令对应的标识和执行状态,或者,可以在该指令映射队列中将该指令对应的执行状态标记为已执行状态。对应地,指令映射队列集即为多个指令映射队列所构成的集合。

上述的执行状态包括未执行状态和已执行状态,其中,未执行状态表示指令处于未被执行的状态,已执行状态表示指令处于已被执行的状态。

上述处于空闲状态的指令映射队列可以指:该指令映射队列中未存放信息,即未存放指令的标识、执行状态以及该指令所在待执行指令集的标识,是空的指令映射队列。

此外,上述的指令队列可以指用于存放指令的队列。在该指令队列中,可以采用先入先出方式或指令指针方式读取指令。

在一个实施例中,终端集成了人工智能芯片,而该人工智能芯片中包括指令调度单元、状态查询单元和执行单元,如图3所示。其中,指令调度单元可以实现指令的读取和调度(也即分发),状态查询单元可以实时更新指令执行的完成情况,执行单元可以执行各指令,以完成各指令对应的操作并返回指令的完成情况。

具体地,终端可以通过状态查询单元查询指令映射队列集内处于空闲状态的指令映射队列。其中,状态查询单元包括队列状态查询子单元和至少一个指令队列映射子单元;此外,指令调度单元包括指令缓存、指令选通子单元、指令分发子单元和指令队列单元,如图3所示。因此,终端的指令选通子单元在需要从指令缓存中读取指令时,需要通过队列状态查询子单元查询指令映射队列集内处于空闲状态的指令映射队列,若查询到空闲状态的指令映射队列时,执行S204。

举例来说,当指令缓存中有新的待执行指令集时,该待执行指令集需要分发至指令队列中存放,此时,指令选通子单元通过状态查询单元按照编号大小依序查找指令映射队列1~n,当发现首个为空的指令映射队列后,假设该空的指令映射队列编号为i,则说明第i个指令队列为空,从而执行S204,以便将该待执行指令集的标识以及该待执行指令集内指令的标识存放在第i个指令映射队列,此外,还存放待执行指令集内指令的执行状态;以及,将待执行指令集依次写入对应的指令队列。

S204,当查询到空闲状态的指令映射队列时,从指令缓存中读出至少一个待执行指令集。

其中,指令缓存可以是人工智能芯片中用于存放指令的缓存,该指令缓存属于人工智能芯片的一级缓存;此外,数据缓存也属于人工智能芯片的一级缓存,用于存放数据。

在一个实施例中,对于每一个待执行指令集,终端可以从指令缓存中依序读取每个待执行指令集内的指令,得到至少一个待执行指令集。该待执行指令集可以是:在需要完成目标任务时,编译该目标任务对应的计算机程序所得指令的待执行指令集合。其中,该指令可以是粗粒度指令或细粒度指令,细粒度指令可以指用于完成低级别或小颗粒度的任务的指令,如进行加减乘除运算任务的指令,或进行逻辑运算任务的指令等;细粒度指令在执行过程中,可以在1至2个时钟周期内完成的,采用取值、译码、执行和写回的流水线执行;而粗粒度指令可以指用于完成高级别或大颗粒度的任务的指令,如进行视频编解码任务的指令,或进行图像编解码任务的指令等,其中,这些高级别或大颗粒度的任务可以拆分成多个低级别或小颗粒度的任务,或这些高级别或大颗粒度的任务可以拆分成多个次高级别或次大颗粒度的任务,然后继续拆分成多个低级别或小颗粒度的任务。例如,视频编解码任务可以拆分成大量加减乘除运算任务和逻辑运算任务。又例如,通过智能家电设备执行扬州炒饭的任务,该扬州炒饭的任务即为大颗粒度的任务;可以将该扬州炒饭的任务拆分成放油、炒鸡蛋、炒火腿和虾仁,以及炒米饭等任务,而放油、炒鸡蛋、炒火腿和虾仁,以及炒米饭等任务即为细颗粒度的任务;粗粒度指令在执行过程中,每条指令通常执行数十个以上的时钟周期,此时即使不采用取值、译码、执行和写回的流水线,对性能影响也不大。通过上述介绍可得:相对指令的执行耗时而言,粗粒度指令的获取和译码操作的耗时可忽略不计,而细粒度指令的获取和译码操作的耗时不可忽略。为了描述方便,若无特别说明,在后续的实施例中出现的指令以及具体应用场景中的指令(如视频解码指令)均指粗粒度指令。

当需要完成一个或多个目标任务时,终端可以编译该目标任务的计算机程序,得到相应的指令,然后将所得的指令按照不同的目标任务或目标任务中所包括的子任务存放至指令缓存中对应的待执行指令集,其中,该待执行指令集可以是终端在指令缓存中创建的用于存放指令的集合。当查询到空闲状态的指令映射队列时,基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令,得到至少一个待执行指令集。其中,指令指针也称程序计数器(Program Counter),或PC指针。

上述的先入先出方式,可以指:对于写入指令缓存中的指令,可以按照指令的写入顺序从该指令缓存中读出指令。

上述的指令指针方式,可以是通过指令指针读取相应的指令。而指令指针用于指向正在执行的指令的地址,或即将执行的指令的地址,并在执行完后自动加一,以指向下一条指令。

例如,如图3所示,终端的指令选通子单元通过队列状态查询单元查询存在空闲状态的指令映射队列时,终端通过指令选通子单元从指令缓存中依序读出待执行指令集内的指令,得到至少一个待执行指令集。

在一个实施例中,在读出至少一个待执行指令集之前,终端还会基于与该至少一个待执行指令集存在依赖关系的目标指令集的执行情况,具体地:终端查询已写入其它指令队列、且与上述至少一个待执行指令集之间存在依赖关系的目标指令集;获取目标指令集内各指令的执行状态;若执行状态为已执行状态,则执行基于先入先出方式或指令指针方式,从指令缓存中读出至少一个行待执行指令集内的指令。

S206,将各待执行指令集依次写入不同的、且与指令映射队列对应的指令队列;指令映射队列,用于保存待执行指令集的标识和待执行指令集内指令的标识。

其中,指令映射队列与指令队列相对应,当状态查询单元中存在至少一个指令映射队列时,在指令调度单元相应存在至少一个指令队列,且指令映射队列的数量与指令队列的数量保持一致。通常地,编号相同的指令映射队列和指令队列相对应,例如第i个指令映射队列与第i个指令队列相对应,当第i个指令映射队列为空闲状态时,对应的第i个指令队列也为空闲状态。需要指出的是,空闲状态可以表示指令队列和指令映射队列为空队列。

在一个实施例中,S206具体可以包括:终端在从指令缓存中读取不同待执行指令集内的指令时,可以将每次读取出来的指令分别写入不同的且与指令映射队列对应的指令队列。

在写入与指令映射队列对应的指令队列之前,终端可以先确定指令映射队列的编号,根据该指令映射队列的编号查找编号匹配的指令队列,然后将各待执行指令集写入查找到的不同的指令队列。

例如,如图3所示,若查询到指令映射队列1和指令映射队列2处于空闲状态,则确定指令队列1和指令队列2也处于空闲状态,此时,从指令缓存的两个待执行指令集内依序读取出指令,得到读出的两个待执行指令集。然后,终端将两个待执行指令集内的指令分别写入指令队列1和指令队列2中。

对于待执行指令集写入指令队列的方式,可以包括边读取边写入和读取完后再写入这两种方式。具体地:终端可以在从指令缓存中读取完待执行指令集内的指令时,将所得的待执行指令集写入指令队列;此外,终端还可以在从指令缓存中读取待执行指令集内的指令的过程中,将读取的指令写入指令队列。

S208,以并行方式将不同指令队列的待执行指令集内的指令调度至执行单元,以使各执行单元对不同待执行指令集内的指令并行执行,且对相同待执行指令集内的指令按照指令顺序依次执行。

可以理解的是,执行单元执行调度的指令可以指:执行单元按照调度的指令完成相应的目标任务。例如,假设指令为视频解码指令,执行单元可以根据调度的多个视频解码指令完成视频解码,以便在解码视频后进行播放。

其中,执行单元的数量可以是一个或多个,当为多个执行单元时,可以是多种功能的执行单元,如用于完成视频解码的执行单元,用于完成音频解码的执行单元,或用于完成图像渲染的执行单元等等。此外,每种功能的执行单元可以有多个。

在执行过程中,可以按照粒度大小将所要完成的目标任务划分为多个子任务,每个待执行指令集保存对应子任务的指令,指令映射队列存放子任务对应的待执行指令集的标识以及该待执行指令集内各指令的标识,此外还存放各指令所对应的执行状态。因此,在调度和执行时,可以将不存在依赖关系的不同待执行指令集内的指令并行调度,从而不同的执行单元并行执行调度的指令,对于单个待执行指令集内的指令依序进行执行。此外,对于存在依赖关系的不同待执行指令集,在调度时,可以先调度在先执行的指令进行执行,并在执行完成后,调度在后执行的指令进行执行。

其中,依赖关系是指一个待执行指令集需要等待一个或多个前序的目标指令集完成后才能执行。例如,假设存在以下5个待执行指令集:

待执行指令集A:rlt1=a+b*c;

待执行指令集B:rlt2=c+d*e;

待执行指令集C:rlt3=rlt1+f+g;

待执行指令集D:rlt4=rlt1+rlt2*rlt3;

待执行指令集E:rlt5=h+i*c;

从上可知,待执行指令集C的执行依赖于待执行指令集A,待执行指令集D的执行依赖于待执行指令集A、B、C,而待执行指令集A、B、E之间互不依赖,因此,编译器优化后输出排列顺序为:{A B E,C,D},即待执行指令集A、B、E可以先同时执行,然后待执行指令集C执行,最后待执行指令集D执行。

在一个实施例中,指令队列的数量或指令集的数量可以大于执行单元的数量,当大于执行单元的数量时,对于先写入指令队列的指令集,其指令可以率先调度至执行单元,从而抢占该执行单元以进行执行。此外,指令队列的数量或指令集的数量可以等于执行单元的数量,当等于执行单元的数量时,各指令队列的指令集内的指令均可同步调度至执行单元,以进行执行。

接下来,结合视频解码任务的应用场景对上述指令调度方法进行阐述,该视频解码任务可以分为多个视频解码子任务,如图4所示,终端编译视频解码任务的计算机程序,所得的多个视频解码指令保存在存储器中;指令调度单元从存储器中依序读取出保存的视频解码指令,将读取出的视频解码指令写入指令缓存中。指令调度单元通过状态查询单元查询是否存在空闲状态的指令队列映射,若查找到空闲状态的多个指令队列映射时,则从指令缓存中读取视频解码指令,得到包含视频解码指令的多个待执行指令集。然后将该多个待执行指令集内的视频解码指令分别存放至指令队列,以及将该多个待执行指令集的标识、待执行指令集内指令的标识以及指令的执行状态存放至指令映射队列。终端并行将多个指令队列中待执行指令集的指令调度至多个执行单元,从而执行单元根据各视频解码指令对视频进行解码,然后将解码后的视频传输给客户端进行播放。

上述实施例中,通过在指令映射队列集内查询是否存在处于空闲状态的指令映射队列,当查询到空闲状态的指令映射队列时,表示存在与该指令映射队列对应的、且处于空闲状态的指令队列,因此可以从指令缓存中读出至少一个待执行指令集,然后将待执行指令集的标识和待执行指令集内指令的标识保存于指令映射队列,以及将各待执行指令集依次写入不同的指令队列,从而存在可以并行的指令队列可以调度指令,不同指令队列之间的指令可以并行调度并通过执行单元执行,相同指令队列内的指令可以依序调度并通过执行单元执行,从而可以提升指令的执行效率,以及可以提升使用执行单元的概率,进而有效地提高了AI芯片的吞吐量和执行效率。

在一个实施例中,如图5所示,该方法还可以包括:

S502,从存储器中依序读取编译计算机程序所得的指令。

其中,该指令包括粗粒度指令。计算机程序可以指通过程序语言开发的程序,以便实现各种目标任务或功能。例如,对于视频解码任务,该计算机程序可以是关于视频解码的程序。

在一个实施例中,终端在接收到目标任务时,查找与该目标任务对应的程序文件,然后对该程序文件中的计算机程序进行编译,得到相应的指令,然后执行S502。其中,该存储器可以是片内存储器或片外存储器。

S504,将读取的指令写入指令缓存中相应的待执行指令集。

具体地,终端在进行写入操作时,可以根据目标任务的粒度对所得的指令进行归类写入,即将属于相同子任务的指令写入指令缓存中相同的待执行指令集,将属于不同子任务的指令写入指令缓存中不同的待执行指令集。或者,可以理解为将属于相同子任务的指令以同一个待执行指令集写入指令缓存中

S506,基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令。

其中,上述的先入先出方式,可以指:对于写入指令缓存中的指令,可以按照指令的写入顺序从该指令缓存中读出指令。

上述的指令指针方式,可以是通过指令指针读取相应的指令。而指令指针用于指向正在执行的指令的地址,或即将执行的指令的地址,并在执行完后自动加一,以指向下一条指令。

例如,如图3所示,终端的指令选通子单元通过队列状态查询单元查询存在空闲状态的指令映射队列时,终端通过指令选通子单元从指令缓存中依序读出待执行指令集内的指令。

在一个实施例中,在S506之前,该方法还可以包括:终端查询已写入其它指令队列、且与待执行指令集之间存在依赖关系的目标指令集;获取目标指令集内各指令的执行状态;若执行状态为已执行状态,则执行S506。

由于不同任务或子任务对应的指令集之间,可能存在依赖关系,对于存在依赖关系的不同指令集之间添加隔离指令(Fence指令),以便根据该隔离指令确定当前的待执行指令集是否依赖已调度的目标指令集,以便当该目标指令集中的指令均执行完时,从指令缓存中读取该待执行指令集并写入对应的指令队列。

例如,接着上述实施例的待执行指令集A~E进行阐述:

待执行指令集A:rlt1=a+b*c;

待执行指令集B:rlt2=c+d*e;

待执行指令集C:rlt3=rlt1+f+g;

待执行指令集D:rlt4=rlt1+rlt2*rlt3;

待执行指令集E:rlt5=h+i*c;

由于待执行指令集A、B、E之间不存在依赖关系,因此该待执行指令集A、B、E之间不需要添加隔离指令;而待执行指令集A与待执行指令集C之间存在依赖关系,因此可以在待执行指令集C与待执行指令集A、B、E的整体之间添加隔离指令,如{A B E S0 C},S0为隔离指令;此外,待执行指令集D与待执行指令集A、B、C之间存在依赖关系,因此可以在待执行指令集D与待执行指令集C之间添加隔离指令,如{A B E S0 C S1 D},S1也为隔离指令。

在一个实施例中,当不同任务或子任务对应的存在依赖关系的指令集之间添加了隔离指令时,上述查询已写入其它指令队列、且与待执行指令集之间存在依赖关系的目标指令集的步骤,具体可以包括:终端查找与待执行指令集对应的隔离指令;从隔离指令中读取目标指令集标识;在其它指令队列中,按照目标指令集标识查询与待执行指令集存在依赖关系的目标指令集标识。

例如,继续接着上述待执行指令集A~E进行阐述,由于存在依赖关系的待执行指令集之间添加了隔离指令,假设添加了隔离指令的待执行指令集为{A B E S0 C S1 D},因此从指令缓存中读取待执行指令集时,先根据隔离指令判断需要在先执行的待执行指令集(即上述目标指令集)是否已经执行完,若执行完,则基于先入先出方式或指令指针方式,从指令缓存中读取待执行指令集中的指令。

在一个实施例中,上述获取目标指令集内各指令的执行状态的步骤,具体可以包括:终端在指令映射队列集内,查找存储了目标指令集标识的目标指令映射队列;在目标指令映射队列中获取各指令的执行状态。

上述实施例中,从指令缓存中读取待执行指令集时,需要判断与其具有依赖关系的目标指令集是否执行完,只有在执行完时,才会基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令,一方面可以确保读出的待执行指令集可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在一个实施例中,如图6所示,该方法还可以包括:

S602,编译计算机程序得到对应的指令。

S604,将所得的指令保存至存储器。

S606,当处理器上电后,或获取到执行所得的指令时所需的预备数据后,从存储器中依序读取所保存的指令。

其中,预备数据可以指执行所得的指令所必备的数据。例如,对视频进行解码,预备数据可以是待解码的视频数据。该处理器可以包括人工智能处理器。

在一个实施例中,该方法还包括:若保存于存储器中的指令在执行时依赖预备数据时,终端则从所述存储器或目标缓存中获取所述预备数据并进行加载;所述预备数据包括通过已执行的指令所产生的数据。

对于通过已执行的指令所产生的数据,可以通过store操作将所产生的数据从临近计算子单元的数据缓存存放至远端的数据缓存,如从L1数据缓存存放至L3数据缓存,或者将所产生的数据从临近的数据缓存存放至存储器。其中,执行单元包括指令转发子单元和功能子单元,此外还可以包括计算子单元,该计算子单元可以位于指令转发子单元和各类用于执行指令的功能单元(FuncEngine)。

在执行待执行指令集内的指令之前,若执行待执行指令集内的指令时需要利用到该产生的数据时,可以通过load操作进行数据读取,即从远离计算单元的数据缓存或存储器写入临近计算单元的数据缓存,如从L3数据缓存读取到L1数据缓存,也可以是从DDR(Double Data Rate,双倍速率)存储器写入L3数据缓存。

上述实施例中,在执行待执行指令集内的指令时,先获取执行该待执行指令所必要的数据,然后执行该待执行指令集内的指令,一方面可以确保待执行指令集内的指令可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在一个实施例中,如图7所示,该方法还可以包括:

S702,检测指令队列中指令的执行状态。

其中,该执行状态可以包括未执行状态和已执行状态。未执行状态表示该指令队列中的指令未执行,已执行状态表示该指令队列中的指令已执行。

S704a,当根据执行状态确定指令队列中的目标指令执行完成时,清除指令队列中的目标指令。

S706a,在与指令队列关联的指令映射队列中,将目标指令的标识删除。

其中,指令和目标指令包括粗粒度指令。目标指令可以是指令队列中已执行的指令。通过上述S706a和S706b的步骤,可以在每次执行完一个目标指令时,可以将指令队列中的目标指令进行清除,并且可以将指令映射队列中关于目标指令的标识删除。

S704b,当根据执行状态确定指令队列中的目标指令执行完成时,在与指令队列关联的指令映射队列中,将目标指令的标记为已执行状态。

S706b,当指令队列中的所有指令执行完成时,则对与指令队列关联的指令映射队列进行清理。

S708,清除指令队列中的所有指令。

其中,通过上述S706a和S706b的步骤,可以在每次执行完一个目标指令时,在指令映射队列中将目标指令的标记为已执行状态(即从未执行状态更新为已执行状态),当指令队列中待执行指令集内的所有指令执行完成时,可以将指令队列中的待执行指令集进行清除,以及将指令映射队列中关于该待执行指令集的标识、该待执行指令集内指令的标识和执行状态进行删除。

针对所有处于占用状态的目标指令队列,在一个实施例中,当指令映射队列集内处于占用状态的目标指令映射队列所对应的目标指令完成时,终端则将目标指令映射队列中针对目标指令的执行状态置为已执行状态;当目标指令映射队列中各指令的执行状态均为已执行状态时,则对目标指令映射队列进行清空处理。

上述实施例中,通过对已执行的指令的标识从指令映射队列进行删除,以及将已执行的指令从执行队列中删除,可以避免已执行的指令占用缓存空间,有利于提高缓存空间的有效利用率。

为了更加容易理解上述指令调度方法,结合智能家居系统的应用场景进行阐述:例如,如图8所示,终端804可以是智能手机,终端802可以是智能电视,用户的智能手机通过基站信号或者无线局域网(如WiFi)向智能电视发送一个视频播放任务,智能电视内置的AI芯片会编译视频解码程序得到指令,然后将所得的指令保存于指令缓存,得到包含指令的待执行指令集;其中,该待执行指令集可以是多个解码子任务对应的指令集,即多个用于解码视频的指令集。AI芯片在指令映射队列集内查询处于空闲状态的指令映射队列;当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;将读出的各待执行指令集依次写入不同的指令队列;以并行方式将不同指令队列的待执行指令集内的指令调度至执行单元,以使各执行单元对不同待执行指令集内的视频解码指令并行执行,且对相同待执行指令集内的视频解码指令按照指令顺序依次执行,从而完成对视频的解码,然后通过智能电视上的客户端进行视频播放。

作为另一个示例,对粗粒度指令(以下简称指令)进行描述,其应用范围:基于粗粒度指令的FPGA/ASIC处理器,如AI处理器或其它处理器。

应用场景:在AI处理器中,指令缓存从片外或片内存储器中顺次读取待执行的指令,并顺次发送到指令调度单元,指令调度单元将指令发送到执行单元,以实现指令对应的操作,当指令执行完成后,执行单元向指令调度单元发送粗粒度指令完成的信号。此外,执行单元还包含一个或多个load或store功能子单元,可对片外或片内存储器进行读访问或写访问。在上述过程中,指令缓存中的指令具备以下特征:

1)指令为粗粒度指令,例如一条指令可执行数十个时钟周期以上;

2)一条指令完成至少一种操作,一个任务可能由一条或多条指令构成;

3)若一个任务由多条指令构成,则这些指令可能存在关联和数据依赖;

4)多个任务之间可能存在数据依赖,也可能不存在数据依赖,对于不存在数据依赖的情况,可并行执行;若在某一功能单元中,收到来自于不存在数据依赖的多个指令片段中的指令,则这些指令可乱序执行。

接下来,介绍指令调度方法的整体流程:编译工具对所有待执行任务的计算机程序进行编译,得到待执行指令序列;在AI处理器运行之前,将待执行指令序列内的指令作为AI处理器的待执行指令,存入到AI处理器的片上或片外存储器中。在AI处理器上电后或已满足指令执行条件(如获取到待处理的必要数据)时,从片内或片外存储器中分一次或分多次读取指令到指令缓存,而后执行。

接着,介绍指令调度方法中所涉及的架构,以及该架构下各单元的功能及操作,具体如下:

(1)架构说明:架构上总体分为指令调度单元、状态查询单元和执行单元这三部分。指令调度单元实现指令的读取和分发,状态查询单元用来实时更新指令执行的完成情况,执行单元完成各个指令对应的操作,并返回指令完成情况。

(2)指令调度单元,按顺序读取片内或片外存储器中的指令,然后写入指令缓存。其中,指令缓存可采用FIFO或cache(例如使用pc指针)等方式,由指令选通子单元按顺序将指令读出。指令可以以指令片段(对应上述的指令集)的方式进行读取,每个指令片段包含一条或多条指令,属于同一指令片段的指令被连续读出。在读出一个指令片段后、且发送到指令分发子单元之前,需通过状态查询单元查询是否有空的指令队列映射。若有,则指令选通子单元将指令片段从指令缓存读取出,并经指令分发子单元发送到对应的指令队列中,同时将指令相关记录保存在状态查询单元对应的指令队列映射子单元中,指令相关记录包含指令片段id和各条指令的sub-id记录。指令调度单元中包含n个指令队列,每个指令队列可存储一个待执行的指令片段,内部的指令顺序执行,n个指令队列对应的n个指令片段之间无数据依赖,可并行执行。

指令调度单元中的指令选通子单元,用来控制当前的指令片段是否下发,其判断规则是:若需要下发的指令片段需要等待若干个已下派的指令片段完成后才能下发,则由编译器在该需要下发的指令片段前插入同步指令(即Fence指令);该同步指令位于两个指令片段之间,该同步指令中的参数标识了一个或多个指令片段ID,表示需要等待这些指令片段全部执行完后,再继续分发指令缓存中的下一个指令片段。此时,需通过状态查询单元的查询操作检测各个指令队列中,指定指令片段的完成状态。

(3)状态查询单元中的队列状态查询子单元提供当前各个指令队列的状态查询,其下连接了n个指令队列映射子单元,每个指令队列映射与一个指令调度单元中的指令队列对应,内部存储了分发到该指令队列的指令的完成情况。在执行单元中,每当有一条指令完成,则将完成信号发送至状态记录子单元中对应的指令队列映射子单元。当某一非空指令队列映射子单元中的所有指令都完成后,则将该指令队列映射子单元的完成信号置一,供指令调度单元查询。

(4)执行单元接收来自多个指令队列下派的指令,在内部执行,而后返回完成信号到状态查询单元。其中,对于执行单元,可以是1个执行单元,i个不同功能的执行单元,或i种不同功能的执行单元中,每种配置多个执行引擎,其中,i为大于1的正整数。

应该理解的是,虽然图2、5-7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、5-7中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图9所示,提供了一种指令调度装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:查询模块902、读取模块904、写入模块906和调度模块908,其中:

查询模块902,用于在指令映射队列集内查询处于空闲状态的指令映射队列;

读取模块904,用于当查询到空闲状态的指令映射队列时,从指令缓存中读出至少一个待执行指令集;

写入模块906,用于将各待执行指令集依次写入不同的、且与指令映射队列对应的指令队列;指令映射队列,用于保存待执行指令集的标识和待执行指令集内指令的标识;

调度模块908,用于以并行方式将不同指令队列的待执行指令集内的指令调度至执行单元,以使各执行单元对不同待执行指令集内的指令并行执行,且对相同待执行指令集内的指令按照指令顺序依次执行。

上述实施例中,通过在指令映射队列集内查询是否存在处于空闲状态的指令映射队列,当查询到空闲状态的指令映射队列时,表示存在与该指令映射队列对应的、且处于空闲状态的指令队列,因此可以从指令缓存中读出至少一个待执行指令集,然后将待执行指令集的标识和待执行指令集内指令的标识保存于指令映射队列,以及将各待执行指令集依次写入不同的指令队列,从而存在可以并行的指令队列可以调度指令,不同指令队列之间的指令可以并行调度并通过执行单元执行,相同指令队列内的指令可以依序调度并通过执行单元执行,从而可以提升指令的执行效率,以及可以提升使用执行单元的概率,进而有效地提高了AI芯片的吞吐量和执行效率。

在其中的一个实施例中,读取模块904,还用于从存储器中依序读取编译计算机程序所得的指令;

写入模块906,还用于将读取的指令写入指令缓存中相应的待执行指令集;

读取模块904,还用于基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令,得到至少一个待执行指令集;待执行指令集与待执行指令集相匹配。

在其中的一个实施例中,如图10所示,该装置还包括:

查询模块902,还用于查询已写入其它指令队列、且与待执行指令集之间存在依赖关系的目标指令集;

第一获取模块910,用于获取目标指令集内各指令的执行状态;

读取模块904,还用于若执行状态为已执行状态,则基于先入先出方式或指令指针方式,从指令缓存中读出至少一个待执行指令集内的指令。

上述实施例中,从指令缓存中读取待执行指令集时,需要判断与其具有依赖关系的目标指令集是否执行完,只有在执行完时,才会基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令,一方面可以确保读出的待执行指令集可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在其中的一个实施例中,查询模块902,还用于查找与待执行指令集对应的隔离指令;从隔离指令中读取目标指令集标识;在其它指令队列中,按照目标指令集标识查询与待执行指令集存在依赖关系的目标指令集标识。

在其中的一个实施例中,第一获取模块910,还用于在指令映射队列集内,查找存储了目标指令集标识的目标指令映射队列;在目标指令映射队列中获取各指令的执行状态。

在其中的一个实施例中,如图10所示,该装置还包括:

编译模块912,用于编译计算机程序得到对应的指令;

写入模块906,还用于将所得的指令保存至存储器;

读取模块904,还用于当处理器上电后,或获取到执行所得的指令时所需的预备数据后,从存储器中依序读取所保存的指令。

上述实施例中,在执行待执行指令集内的指令时,先获取执行该待执行指令所必要的数据,然后执行该待执行指令集内的指令,一方面可以确保待执行指令集内的指令可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在其中的一个实施例中,如图10所示,该装置还包括:

第二获取模块914,用于若保存于存储器中的指令在执行时依赖预备数据时,则获取外界环境的目标数据并进行加载;或者,获取已执行的指令所产生的目标数据并进行加载;其中,已执行的指令所产生的目标数据和存储于外界环境的目标数据均属于预备数据。

在其中的一个实施例中,如图10所示,该装置还包括:

第一检测模块916,用于检测指令队列中指令的执行状态;

第一清理模块918,用于当根据执行状态确定指令队列中的目标指令执行完成时,清除指令队列中的目标指令;以及,在与指令队列关联的指令映射队列中,将目标指令的标识删除。

在其中的一个实施例中,如图10所示,该装置还包括:

第二检测模块920,用于检测指令队列中指令的执行状态;

标记模块922,用于当根据执行状态确定指令队列中的目标指令执行完成时,在与指令队列关联的指令映射队列中,将目标指令的标记为已执行状态;

第二清理模块924,用于当指令队列中的所有指令执行完成时,则对与指令队列关联的指令映射队列进行清理;以及,清除指令队列中的所有指令。

在其中的一个实施例中,如图10所示,该装置还包括:

调整模块926,用于当指令映射队列集内处于占用状态的目标指令映射队列所对应的目标指令完成时,则将目标指令映射队列中针对目标指令的执行状态置为已执行状态;

第三清理模块928,用于当目标指令映射队列中各指令的执行状态均为已执行状态时,则对目标指令映射队列进行清空处理。

在其中的一个实施例中,指令和目标指令包括粗粒度指令。

上述实施例中,通过对已执行的指令的标识从指令映射队列进行删除,以及将已执行的指令从执行队列中删除,可以避免已执行的指令占用缓存空间,有利于提高缓存空间的有效利用率。

关于指令调度装置的具体限定可以参见上文中对于指令调度方法的限定,在此不再赘述。上述指令调度装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种指令调度方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,如图3所示,提供了一种人工智能芯片,该人工智能芯片包括:状态查询单元、指令调度单元和执行单元;指令调度单元包括指令缓存、指令选通子单元、指令分发子单元和指令队列单元;

状态查询单元,用于在指令映射队列集内查询处于空闲状态的指令映射队列;

指令缓存,用于存储待执行指令集;

指令选通子单元,用于当查询到空闲状态的指令映射队列时,从指令缓存中读出待执行指令集;

指令分发子单元,用于将读出的各待执行指令集依次写入不同的、且与指令映射队列对应的指令队列;指令映射队列,用于保存待执行指令集的标识和待执行指令集内指令的标识;

指令队列单元,用于以并行方式将不同指令队列的待执行指令集内的指令调度至执行单元;

执行单元,用于对不同待执行指令集内的指令并行执行,且对相同待执行指令集内的指令按照指令顺序依次执行。

上述实施例中,通过在指令映射队列集内查询是否存在处于空闲状态的指令映射队列,当查询到空闲状态的指令映射队列时,表示存在与该指令映射队列对应的、且处于空闲状态的指令队列,因此可以从指令缓存中读出至少一个待执行指令集,然后将待执行指令集的标识和待执行指令集内指令的标识保存于指令映射队列,以及将各待执行指令集依次写入不同的指令队列,从而存在可以并行的指令队列可以调度指令,不同指令队列之间的指令可以并行调度并通过执行单元执行,相同指令队列内的指令可以依序调度并通过执行单元执行,从而可以提升指令的执行效率,以及可以提升使用执行单元的概率,进而有效地提高了AI芯片的吞吐量和执行效率。

在一个实施例中,指令调度单元,还用于从存储器中依序读取编译计算机程序所得的指令;将读取的指令写入指令缓存中相应的待执行指令集;通过指令选通子单元基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令。

在一个实施例中,指令分发子单元,还用于查询已写入其它指令队列、且与待执行指令集之间存在依赖关系的目标指令集;

状态查询单元,还用于获取目标指令集内各指令的执行状态;

指令选通子单元,还用于若执行状态为已执行状态,则基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令。

在一个实施例中,指令分发子单元,还用于查找与待执行指令集对应的隔离指令;从隔离指令中读取目标指令集标识;在其它指令队列中,按照目标指令集标识查询与待执行指令集存在依赖关系的目标指令集标识。

在一个实施例中,如图3所示,该状态查询单元包括:队列状态查询子单元和指令队列映射子单元;其中:

队列状态查询子单元,还用于在指令映射队列集内,查找存储了目标指令集标识的目标指令映射队列;

指令队列映射子单元,用于在目标指令映射队列中获取各指令的执行状态。

上述实施例中,从指令缓存中读取待执行指令集时,需要判断与其具有依赖关系的目标指令集是否执行完,只有在执行完时,才会基于先入先出方式或指令指针方式,从指令缓存中读出待执行指令集内的指令,一方面可以确保读出的待执行指令集可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在一个实施例中,该人工智能芯片还包括:编译单元;

编译单元,用于编译计算机程序得到对应的指令;将所得的指令保存至存储器;

指令调度单元,还用于当处理器上电后,或获取到执行所得的指令时所需的预备数据后,从存储器中依序读取所保存的指令。

在一个实施例中,指令调度单元,还用于若保存于存储器中的指令在执行时依赖预备数据时,则从存储器或目标缓存中获取预备数据并进行加载;预备数据包括通过已执行的指令所产生的数据。

上述实施例中,在执行待执行指令集内的指令时,先获取执行该待执行指令所必要的数据,然后执行该待执行指令集内的指令,一方面可以确保待执行指令集内的指令可以顺利执行,另一方面可以避免因该待执行指令集占用指令队列和执行单元而使其它待执行指令集无法使用指令集和执行单元,可以有效地提高指令执行效率。

在一个实施例中,队列状态查询子单元,用于检测指令队列中指令的执行状态;

指令队列子单元,还用于当根据执行状态确定指令队列中的目标指令执行完成时,清除指令队列中的目标指令;

指令队列映射子单元,还用于在与指令队列关联的指令映射队列中,将目标指令的标识删除。

在一个实施例中,队列状态查询子单元,用于检测指令队列中指令的执行状态;

当根据执行状态确定指令队列中的目标指令执行完成时,在与指令队列关联的指令映射队列中,将目标指令的标记为已执行状态;

指令队列映射子单元,还用于当指令队列中的所有指令执行完成时,则对与指令队列关联的指令映射队列进行清理;

指令队列子单元,还用于清除指令队列中的所有指令。

在一个实施例中,指令和目标指令包括粗粒度指令。

上述实施例中,通过对已执行的指令的标识从指令映射队列进行删除,以及将已执行的指令从执行队列中删除,可以避免已执行的指令占用缓存空间,有利于提高缓存空间的有效利用率。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

28页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于SR锁存器的异步微流水线控制器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!