CN114116015B - 用于管理硬件命令队列的方法及*** - Google Patents
用于管理硬件命令队列的方法及*** Download PDFInfo
- Publication number
- CN114116015B CN114116015B CN202210068762.XA CN202210068762A CN114116015B CN 114116015 B CN114116015 B CN 114116015B CN 202210068762 A CN202210068762 A CN 202210068762A CN 114116015 B CN114116015 B CN 114116015B
- Authority
- CN
- China
- Prior art keywords
- command
- queue
- sequence number
- hardware
- commands
- 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
- 238000000034 method Methods 0.000 title claims abstract description 36
- 238000012545 processing Methods 0.000 claims abstract description 93
- 230000004044 response Effects 0.000 claims description 27
- 230000000903 blocking effect Effects 0.000 abstract description 18
- 230000001419 dependent effect Effects 0.000 abstract description 7
- 230000007246 mechanism Effects 0.000 abstract description 6
- 238000007726 management method Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本发明的实施例提供了用于管理硬件命令队列的方法和***,在硬件队列内部采用非阻塞的方式执行命令,硬件命令队列可以将当前没有任何依赖关系的命令发射到数据处理模块进行处理,而不需要等待前一条命令的完成;对于待处理的与其他命令有依赖关系的命令,检测其依赖的命令是否执行完毕,如果没有,则可以将该命令暂时缓存,并继续处理后续的命令,从而充分提高了数据并行处理的效率,而且利用简单的机制实现了各硬件命令队列之间的有效同步,既不需要复杂的软件编程,也避免了由于读取外部存储而引起的无效等待。
Description
技术领域
本发明涉及高性能计算,尤其涉及管理硬件命令队列的方法及***。
背景技术
本部分的陈述仅仅是为了提供与本申请的技术方案有关的背景信息,以帮助理解,其对于本申请的技术方案而言并不一定构成现有技术。
在现代高性能计算处理器中通常包括多个硬件命令队列(也可简称为硬件队列)来并行执行命令。每个硬件命令队列中命令的执行通常包括三个步骤:命令读取和解析,命令的调度,命令的分发。
通常,在每个硬件队列内部,命令是串行执行的,即同一硬件命令队列内部都是顺序解析命令和顺序分发命令的。在命令调度阶段,硬件命令队列往往会在发射出一个命令后,需要等待该命令执行完成后,才能再发射下一条命令,即在硬件队列内部是阻塞执行的模式。这样编程用户就不需要关心一个命令队列内部的命令之间的先后关系,从而降低了用户的编程复杂度,但这也降低了命令执行的并行性。特别是当硬件命令队列较少情况下,不能发挥并行计算***的数据处理效率。比如一个典型的通用并行计算处理器包括了若干数据搬运模块和若干数据运算模块,以一笔数据的处理为例,其中的操作流程是:首先,由第一数据搬运模块把待处理数据从主机端的存储单元(远端)搬运到设备端的存储单元(本地);其次,当数据搬运完毕后,由数据运算模块对设备端的数据进行处理,得到最终运算结果,存到设备端存储器中;最后再由第二数据搬运模块将运算结果从设备端的存储单元(本地)搬运到主机的存储单元(远端)。一种软件驱动的实现方式是把这三个操作放到同一个硬件队列中。如果处理两笔数据,那么这个硬件队列中的命令顺序就是:第一笔数据从远端到本地搬运,第一笔数据的本地计算,第一笔数据从本地到远端搬运,第二笔数据从远端到本地搬运,第二笔数据的本地计算,第二笔数据从本地到远端搬运。虽然第二笔数据处理和第一笔没有任何依赖关系,但由于硬件命令队列本身是阻塞的执行模式,数据运算模块和数据搬运模块都会出现空闲。因此,可以通过多个硬件队列来改善数据处理的并行性。
通常,在各个硬件队列之间,命令是可以并行执行的,从而可利用这个特性提高数据处理的并行性。对上述数据处理的例子,一种提高并行性能的办法是可以把不同批次的数据处理分别放到不同的硬件队列中,这样提高数据处理的并行性,但这种方法往往受限于硬件队列的数目,当数据批次较多时,并行性就会下降。而增加硬件队列的数目,往往会增加硬件成本,同时硬件队列过多,也往往会增加软件驱动管理的复杂度。另外一种实现,是把这三个模块的操作命令分别放到三个硬件序列中,即所有从远端到本地数据搬运命令放到队列1中,所有计算命令放到队列2中,所有从本地到远端数据搬运命令放到队列3中。通过三个队列配合共同完成每笔数据操作。即当队列2中的数据运算模块在处理第一笔数据时,队列1中的数据搬运模块可以处理第二笔数据,避免了数据搬运模块的空闲。但是当队列2中数据运算模块需要处理第二笔数据时,必须等待队列1中数据搬运模块完成第二笔数据的搬运。也就是说在不同队列中的命令互相之间可能存在依赖关系,这就需要软件驱动***等待命令。这种***等待命令的操作也被称为命令队列之间的同步。目前常见的命令队列的同步方法主要包括,利用外部存储的栅栏机制(fence)和硬件旗语信号(semaphore)。栅栏机制是一种消费和生产者模式,需要利用外部存储在硬件命令队列之间进行数据交换,这种机制会由于访问外部存储而造成硬件延迟,并且需要软件对外部存储进行管理。硬件旗语信号的方法是利用硬件命令队列芯片内部电路来传递旗语信号,这种方法对于队列数目较少(比如2个)的同步比较方便,一旦硬件命令队列数目增大,其算法会相当复杂,难以有效实现硬件命令队列同步。而且,发明人还发现这些同步机制往往还会造成命令队列的阻塞,这是因为某个命令队列一旦执行等待命令,该命令队列就要停止运行。一直需要等到等待命令结束后,才能继续后续命令的执行,即便后续没有任何依赖关系的指令也无法执行。这也降低了并行计算***的效率,特别是当数据处理模块较多时,这种等待造成的问题更明显。
需要说明的是,上述内容仅用于帮助理解本申请的技术方案,并不作为评价本申请的现有技术的依据。
发明内容
针对上述问题,本发明提出了一种新的非阻塞的硬件命令队列管理方法和***,来改善数据处理的并行性。
上述目的是通过以下技术方案实现的:
根据本发明实施例的第一方面,提供了一种用于管理硬件命令队列的方法,为依次分配至硬件队列中的命令按顺序分配相应的命令序号,命令序号按其产生的顺序保存在与硬件队列对应的命令序号队列中;从硬件队列选择一个或多个命令分发至处理单元;响应于确定相应命令已经被处理单元执行完毕,将命令的命令序号保存在与硬件队列对应的完成命令序号缓存中;响应于确定当前处于命令序号队列顶部的命令序号与完成命令序号缓存中的命令序号相匹配,从命令序号队列顶部移除命令序号,并将移除的命令序号保存在与硬件队列对应的命令序号寄存器中。
在本发明的一些实施例中,该方法还可包括:响应于确定待分配至硬件命令队列的当前命令与已分配至硬件命令队列的命令之间存在依赖关系,生成等待命令,等待命令中包含已分配至硬件命令队列的命令所在的硬件命令队列的标识及其在该硬件命令队列中的命令序号;将所生成的等待命令与当前命令作为一个整体命令分配至同一个硬件命令队列中,并为该整体命令分配相应的命令序号。
在本发明的一些实施例中,从硬件队列选择一个或多个命令分发至处理单元可以包括:响应于确定所选择的命令中包含等待命令,若确定等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,则将所选择的命令分发至处理单元,否则将所选择的命令暂存在命令等待单元;以及响应于确定等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,从命令等待单元中提取包含等待命令的命令分发至处理单元。
在本发明的一些实施例中,判断等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕可以包括:将该等待命令中包含的命令序号与在硬件命令队列标识所指示的硬件队列的命令序号寄存器中保存的命令序号进行比较,若该等待命令中包含的命令序号小于或等于该命令序号寄存器中保存的命令序号,则确定命令已经执行完毕。
在本发明的一些实施例中,从硬件队列选择一个或多个命令分发至处理单元可以包括从硬件队列中选择多个不包含等待命令的命令同时分发至处理单元。
根据本发明实施例的第二方面,提供了一种用于管理硬件命令队列的***,其包括命令分配模块以及与每个硬件队列对应的队列管理模块、命令序号寄存器、命令序号队列、完成命令序号缓存和序号检查器、其中命令分配模块用于将来自上层的命令分配至多个硬件队列中。队列管理模块用于为依次分配至所述硬件队列中的命令按顺序分配相应的命令序号,所述命令序号按其产生的顺序保存在与所述硬件队列对应的命令序号队列中;从所述硬件队列选择一个或多个命令分发至处理单元;响应于确定相应命令已经被所述处理单元执行完毕,将所述命令的命令序号保存在与所述硬件队列对应的完成命令序号缓存中;以及响应于经由所述序号检查器确定当前处于命令序号队列顶部的命令序号与所述完成命令序号缓存中的命令序号相匹配,从所述命令序号队列顶部移除所述命令序号,并将所述移除的命令序号保存在与所述硬件队列对应的命令序号寄存器中。
在一些实施例中,命令分配模块还可以被配置为用于:响应于确定待分配至硬件命令队列的当前命令与已分配至硬件命令队列的命令之间存在依赖关系,生成等待命令,等待命令中包含已分配至硬件命令队列的命令所在的硬件命令队列的标识及其在该硬件命令队列中的命令序号;以及将所生成的等待命令与当前命令作为一个整体命令分配至同一个硬件命令队列中,并为该整体命令分配相应的命令序号。
在一些实施例中,该***还可以包括命令等待单元,其中队列管理模块还用于:响应于确定所选择的命令中包含等待命令,判断该等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕,若已经执行完毕,则将该命令分发至处理单元,否则将命令暂存在命令等待单元;以及响应于确定等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,从命令等待单元中提取相应命令分发至处理单元。
根据本发明实施例的第三方面,还提供了一种处理器,其被配置为利用根据本发明实施例第二方面提供的***管理多个硬件命令队列。
本发明实施例的技术方案可以包括以下有益效果:
在硬件队列内部采用非阻塞的方式执行命令,提高了数据并行处理的效率,而且利用简单的机制实现了各硬件命令队列之间的有效同步,既不需要复杂的软件编程,也避免了由于读取外部存储而引起的无效等待。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了根据本发明一个实施例的用于管理硬件命令队列的方法的流程示意图。
图2示出了根据本发明一个实施例的用于管理硬件命令队列的***的功能模块示意图。
图3示出了根据本发明一个实施例的硬件队列中各模块之间的交互流程示意图。
图4示出了三个将要进入硬件队列的软件命令流的示例。
图5示出了根据现有的以阻塞方式工作的硬件队列针对图4的软件命令流1的执行过程示意。
图6示出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流1的执行过程示意。
图7示出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流2的执行过程示意。
图8示出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流3的执行过程示意。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动下获得的所有其他实施例,都属于本发明保护的范围。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
在现代高性能计算处理器或图像处理器中通常包括多个硬件命令队列(也可简称为硬件队列)来并行执行数据处理任务。当某一程序代码在该处理器上执行时,首先会通过该处理器的软件驱动将程序代码解析为硬件可执行的数据处理命令,然后将这些数据处理命令分配至多个硬件队列中等待处理。每个硬件命令队列接收来自软件驱动产生的命令流,将该队列中的命令按照先后次序分发至数据处理模块进行处理。同一硬件命令队列中命令是顺序执行的,而不同硬件命令队列中命令可以并行执行的。如上文提到的,处于不同队列中的命令之间可能会存在依赖关系。这样的依赖关系是在对程序代码进行编程时所确定或设置的,例如某一指令的执行要依赖于前一指令的运算结果。
在本发明的实施例中,提供了一种新的硬件命令队列管理方法,其中硬件命令队列可以将当前没有任何依赖关系的命令发射到数据处理模块(也可称为处理单元)进行处理,而不需要等待前一条命令的完成,是一种非阻塞的管理办法。对有依赖关系的数据处理命令可以产生等待命令,该等待命令包含了该数据处理命令所依赖的命令所在的硬件队列标识及其在该硬件序列中的命令序号,接着将该等待命令和数据处理命令作为一个整体分配至硬件命令队列中。当硬件队列中待处理的命令包含等待命令时,检测其依赖的命令是否执行完毕,如果没有,则可以将该命令暂时缓存,并继续处理后续的命令。这样,即使当前数据处理命令由于有依赖关系需要进行等待时,该硬件队列仍可以继续解析后续的命令,找出没有任何依赖关系的命令提前发射到数据处理模块,从而充分提高了数据处理模块的利用率。
但硬件队列的非阻塞的命令执行模式会引起检查命令前后依赖关系的困难,因为后面的命令可能会被数据处理单元提前执行,改变了原来的编程顺序。在本发明的实施例中为了解决这个问题,对进入硬件队列中的每个命令都会编码一个序号,被称为命令序号,这个序号根据软件驱动生成命令的顺序(即命令进入硬件队列的顺序),其数值会依次递增。序号越小,说明这个命令被软件驱动产生的就越早。当然,作为另一种实施方式,命令序号的数值还可以根据软件驱动生成命令的顺序依次递减,序号越大,说明这个命令被软件驱动产生的就越早。在其他实施方式中,还可以预先存储序号表,该序号表中存储有大量序号,各个序号按照顺序排列,其排列的顺序和序号的数值可以相关,也可以不相关,对于进入硬件队列中的每个命令按照序号表的序号顺序依次进行编号。本申请实施例对编号的规则不做限定。并且,为了保证命令之间的依赖关系符合原始编程的预期,在不增加软件驱动复杂度的情况下,在本发明的实施例中提供了基于命令序号的保序机制,对于每个硬件命令队列,按进入队列的先后次序为每个命令分配相应的命令序号,并将这些命令序号保存至与该硬件队列对应的命令序号队列中,命令序号和数据处理命令可以一起由硬件命令队列发送到数据处理模块中。由于硬件队列的非阻塞特性,一个硬件命令队列可以发出多个命令到数据处理模块,而且这些命令可能按不同的顺序执行完成。当数据处理模块的命令执行完成后,可以将完成的命令序号保存到硬件队列对应的完成命令序号缓存中,这个缓存可以存储若干个完成命令序号,缓存的大小决定了该命令队列发射数据处理命令的能力。将完成命令序号缓存中的命令序号与当前处于命令序号队列顶部(即队列的头部)的命令序号进行比较,一旦发现有匹配的命令序号,意味着软件最早产生的命令已经完成,该命令序号就会从命令序号队列的顶端取出,更新到一个寄存器中,这个寄存器被称为命令序号寄存器中。这个寄存器所储存的命令序号用来表明该硬件队列按软件编程的顺序当前完成到了第几个命令,这个寄存器值的更新顺序是和软件驱动产生命令的顺序是一致的。通过读取硬件队列的命令序号寄存器中的当前命令序号就可以判断该硬件队列当前已经执行至哪个命令。这样,当硬件队列中待处理的命令包含等待命令时,可以通过检查相应硬件队列的命令序号寄存器来判断其依赖的命令是否执行完毕。实际上,等待命令的执行,就是一个硬件命令队列读取相应硬件队列的命令序号寄存器中的值(当前按序完成的命令序号),并和所等待的命令序号值进行比较。以命令序号编号规则为数值依次递增为例,由于一个队列里面命令序列号是依次递增的,如果查询到所依赖的命令所在硬件队列当前完成的命令序号值等于或大于所等待的命令序号,意味着需要所依赖的相应命令已经完成,否则需要继续执行该等待命令。而本硬件队列的后续的无关的命令不需要阻塞,如果和其他命令没有任何依赖性,或者已经完成了其等待关系,便可以在队列中继续执行,但某个命令执行完后,其命令序号可能不会立刻更新所在硬件队列的命令序号寄存器。该命令序号寄存器的更新需要按该硬件队列的命令序号队列中的顺序依次更新。在本发明的实施例中的命令序号寄存器是片上资源,从而可避免一般同步指令需要的访存操作,提高了效率,降低了功耗。对于传统的设计,等待或同步命令一般只是用于队列之间的,本发明实施例中的等待命令也可以适用于队列内部,更具有通用性。
图1给出了根据本发明一个实施例的用于管理硬件队列的方法的流程示意图。在步骤S101,为依次分配至硬件队列中的命令顺序分配相应的命令序号。例如,硬件队列中每个命令的命令序号随着命令进入硬件队列的顺序依次递增并按其产生的顺序保存在与该硬件队列对应的命令序号队列中。在一个示例中,该命令序号队列可以通过先进先出缓存(FIFO)实现。这里保存的命令序号的顺序是符合代码编程的原始命令顺序的,即软件驱动产生命令的顺序。在一个实施例中,在将来自上层的命令分配至多个硬件队列时,可以通过生成等待命令来表示命令之间的依赖关系。例如,如果确定待分配至硬件命令队列的当前命令与已经分配至硬件命令队列的某个命令之间存在依赖关系,则可以生成与该当前命令对应的等待命令,该等待命令会指明该当前命令需要等待哪个队列中的哪个命令的完成。例如,所生成的等待命令中可以包含当前命令所依赖的那个已分配至硬件命令队列的命令所在的硬件命令队列的标识及其在该硬件命令队列中的命令序号。接着将为当前命令所生成的等待命令与该当前命令作为一个整体命令分配至同一个硬件命令队列中,并为该个整体命令分配相应的命令序号。
在步骤S102,对于每个硬件队列,都可以从硬件队列选择一个或多个命令分发至处理单元进行执行。例如可以根据当前可用的处理单元的数量选择相应数量的命令发送至处理单元进行执行。每个硬件命令队列都以非阻塞方式管理其命令的执行,可以将当前没有任何依赖关系的多个命令发射至处理单元进行处理,而不需要等待前一条命令的完成。在一个实施例中,如果硬件队列检测到待处理的命令是等待命令或包含等待命令,则可以判断该等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕,若已经执行完毕,则可以将该命令分发至处理单元,否则可以暂时缓存该命令,例如将该当前命令暂存在命令等待单元,然后接着处理下一条命令。等后续检测到该等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,则可以从命令等待单元中提取相应命令分发至处理单元。在又一个实施例中,在步骤S102可以从硬件队列中选择多个不包含等待命令的命令同时分发至处理单元。
在步骤S103,响应于确定相应命令已经执行完毕,将该命令的命令序号保存在与该硬件队列对应的完成命令序号缓存中。当命令被处理单元执行完成后,完成的命令序号会保存到硬件队列的完成命令序号缓存中,这个缓存可以存储若干个完成命令序号,缓存的大小决定了该硬件命令队列发射数据处理命令的能力。
在步骤S104,对于每个硬件队列,当检测到当前处于其命令序号队列顶端的命令序号与完成命令序号缓存中的命令序号相匹配,从命令序号队列顶端移除该命令序号,并将其保存在与该硬件队列对应的命令序号寄存器中。这个命令寄存器所储存的命令序号用来表明该硬件队列按软件编程的顺序当前完成到了第几个命令,因此当硬件队列中待处理的命令包含等待命令时,可以通过检查相应硬件队列的命令序号寄存器来判断其依赖的命令是否执行完毕。例如,可以将等待命令中包含的命令序号与在其硬件命令队列标识所指示的硬件队列的命令序号寄存器中保存的命令序号进行比较,若该等待命令中包含的命令序号小于或等于在相应硬件队列的命令序号寄存器中保存的命令序号,则确定所等待的命令已经执行完毕。
在本发明的又一个实施例中,提供了一种处理器,其可以包括多个硬件命令队列和多个处理单元,其中多个处理单元用于并行处理从多个硬件命令队列发出的命令,其中所述处理器被设置为利用上文结合图1所述的方法管理多个硬件命令队列。
在本发明的又一个实施例中提供了一种用于管理硬件命令队列的***,其包括命令分配模块和队列管理模块。其中命令分配模块用于将来自上层的命令分配至多个硬件队列。队列管理模块用于如上文结合步骤S101-步骤S104所述的方法管理多个硬件队列命令的执行和同步。其被配置为用于为依次分配至硬件队列中的命令顺序分配相应的命令序号并按其产生的顺序保存在与该硬件队列对应的命令序号队列中;从硬件队列选择一个或多个命令分发至处理单元;响应于确定相应命令已经执行完毕,将该命令的命令序号保存在与该硬件队列对应的完成命令序号缓存中;以及响应于确定当前处于所述命令序号队列顶部的命令序号与所述完成命令序号缓存中的命令序号相匹配,从所述命令序号队列顶部移除该命令序号,并将其保存在与该硬件队列对应的命令序号寄存器中。在又一个实施例中,命令分配模块还被配置为用于响应于确定待分配至硬件命令队列的当前命令与已分配至硬件命令队列的命令之间存在依赖关系,生成等待命令,并将所生成的等待命令与所述当前命令作为一个整体命令分配至同一个硬件命令队列中,并为该整体命令分配相应的命令序号。在又一个实施例中,所述队列管理模块还被配置为响应于确定所选择的命令中包含等待命令,判断该等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕,若已经执行完毕,则将该命令分发至处理单元,否则将命令暂存在命令等待单元;以及响应于确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,从命令等待单元中提取相应命令分发至处理单元。其中判断等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕包括:将该等待命令中包含的命令序号与在所述硬件命令队列标识所指示的硬件队列的命令序号寄存器中保存的命令序号进行比较,若该等待命令中包含的命令序号小于或等于该命令序号寄存器中保存的命令序号,则确定所述命令已经执行完毕。
图2示出了根据本发明的一个实施例的一种用于管理硬件命令队列的***,其包括命令分配模块、与每个硬件队列相对应的队列管理模块、命令序号寄存器、命令序号队列、完成命令序号缓存和序号检查器。其中命令分配模块用于将来自上层的命令分配至多个硬件队列。对于每个硬件队列,相对应的命令序号寄存器用于保存命令序号以用来表明该硬件队列按软件编程的顺序当前完成到了第几个命令;命令序号队列用于保存为依次分配至硬件队列中的命令顺序分配的命令序号;完成命令序号缓存用于保存硬件队列中已经执行完毕的命令的命令序号;序号检查器用于将当前处于命令序号队列顶端的命令序号与完成命令序号缓存中的命令序号进行比较;队列管理模块用于根据上文结合图1所述的方法来进行硬件队列中命令的调度、分发以及与其他硬件队列中命令的同步等。在一个实施例中,命令分配模块还被配置为响应于确定待分配至硬件命令队列的当前命令与已分配至硬件命令队列的命令之间存在依赖关系,生成等待命令,并将所生成的等待命令与所述当前命令作为一个整体命令分配至同一个硬件命令队列。在又一个实施例中,该***还可以包含命令等待单元,用于暂时缓存需要等待的命令。其中当队列管理模块确定所选择的命令中包含等待命令时,判断该等待命令中包含的硬件命令队列标识及命令序号所对应的命令是否已经执行完毕,若已经执行完毕,则将该命令分发至处理单元,否则将命令暂存在命令等待单元。当后续确定该等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕时,从命令等待单元中提取相应命令分发至处理单元。
图3给出了根据本发明的一个实施例的硬件队列中各模块之间的交互流程示意图。如图3所示,该硬件队列的队列管理模块包括命令读取解析模块、命令队列调度模块、命令分发模块。其中命令读取解析模块接受来自上层软件驱动(例如命令分配模块)产生的命令流,为每个进入该硬件队列的命令分配唯一且按照进入该队列的次序递增的命令序号,并将该命令序号保存到按进入由FIFO实现的命令序号队列中,这个FIFO也可称为解析命令序号FIFO,这个FIFO里面命令序号的顺序是符合编程的原始命令顺序的,即软件驱动产生命令的顺序。在FIFO顶端的命令是硬件队列最早解析的命令,也是软件编程最早产生的命令。命令序号会和数据处理命令一起由命令分发模块发送到数据处理模块以进行处理。命令队列调度模块可以从硬件队列中选择多个命令,并指示命令分发模块将所选择的多个命令发送至多个数据处理模块。当数据处理模块的命令执行完成后,完成的命令序号会保存到硬件队列的完成命令序号缓存中,这个缓存可以是一个并行查找结构,可以存储若干个完成命令序号,缓存的大小决定了该硬件队列发射数据处理命令的能力。序号检查器会对完成命令序号缓存中的所有命令序号和解析命令序号FIFO顶端的命令序号进行比较,一旦发现有和FIFO顶端的命令序号相同的完成命令序号,就是意味着软件最早产生的命令已经完成,该命令序号就会从FIFO的顶端取出,更新到命令序号寄存器中。该命令序号寄存器所储存的就是该硬件队列当前完成的命令序号,用来表明该队列按软件编程的顺序当前完成到了第几个命令,这个寄存器值的更新顺序是和软件驱动产生命令的顺序是一致的。
继续参考图3,分配至每个硬件队列的命令流可以由命令分配模块产生,并保存在存储器中。每个硬件队列的命令读取解析模块可以从存储器中读取相应的命令流进行解析,为读取的每个命令分配命令序号并将其保存到解析命令序号FIFO中,同时将解析的一个个命令送入到命令队列调度模块进行调度。当一个命令含有或者是等待命令,命令调度模块会从等待命令指明的相应硬件序列中读取命令序号寄存器中的值,并进行等待命令判断。如果需要等待,将该命令存入命令等待单元进行等待。为了尽可能提高并行性,命令队列调度模块可能包括不止一个命令等待单元。当命令等待单元中的等待关系解除时,其相应的数据处理命令可以发给命令分发模块;如果该命令是单独的等待命令,不会发生任何数据处理操作,其完成命令序号要存入完成命令序号缓存中。命令分发模块根据当前每个数据处理模块的命令执行情况,选择将数据处理命令发送到一个或多个数据处理模块中。在将命令发向数据处理模块的同时,可以将其命令序号一起发送出去。当数据处理模块执行完命令时,可以将完成信号和完成命令的命令序号返回给对应的硬件命令队列。例如将该命令序号存入与该硬件队列对应的完成命令序号缓存中。在一个实例中,如果一个命令被分配给多个数据处理模块共同执行,针对这个命令序号还需要做一个收集完成信号的工作,即等待该命令的所有数据处理模块完成后,才能将完成序号存入完成序号缓存中。序号检查器会对完成命令序号缓存中的所有命令序号和解析命令序号FIFO顶端的命令序号进行比较,当发现有和FIFO顶端的命令序号相同的完成命令序号,就将该命令序号从FIFO的顶端取出,更新到命令序号寄存器中。
图4示出了的三个将要进入硬件队列的软件命令流的示例。其中软件命令流1中包括三个毫无任何依赖关系的数据处理命令和一个含有等待命令的数据处理命令。软件命令流2中包括一个独立的等待命令。软件命令流3中包含两个独立等待命令和一个有依赖关系的数据处理命令。
图5示出了利用现有的以阻塞方式工作的硬件队列针对图4的软件命令流1的执行过程示意。从图5可以看出每个命令之间都需要等待。图6给出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流1的执行过程示意。从图6可以看出非阻塞硬件命令队列的执行避免了命令之间的无效等待,而且命令4可以不需要等待命令3完成而提前执行。
图7示出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流2的执行过程示意。其中命令3是一个单独的等待命令,在该例子中和前后命令无关,但会影响该命令队列的命令序号的更新。命令4需要等待队列1的命令1完成后再执行。如果命令4比命令3先执行完,该队列的命令序号寄存器也不能立刻更新为命令4。需要等待命令3执行完后,先更新为命令3的序号,再更新为命令4的序号。图8给出了根据本发明一个实施例的以非阻塞方式工作的硬件队列针对图4的软件命令流3的执行过程示意。其中命令2和命令3是等待命令,命令4需要等待命令3完成后才能执行。这三个命令在实际执行过程中虽然是顺序的,但可能存在于命令队列调度模块的不同的等待单元中,都是同时等待的,保证了命令队列的非阻塞的特性。
在本发明的又一个实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序或可执行指令,当所述计算机程序或可执行指令被执行时实现如前述实施例中所述的技术方案,其实现原理类似,此处不再赘述。在本发明的实施例中,计算机可读存储介质可以是任何能够存储数据且可以被计算装置读取的有形介质。计算机可读存储介质的实例包括硬盘驱动器、网络附加存储器(NAS)、只读存储器、随机存取存储器、CD-ROM、CD-R、CD-RW、磁带以及其它光学或非光学数据存储装置。计算机可读存储介质也可以包括分布在网络耦合计算机***上的计算机可读介质,以便可以分布式地存储和执行计算机程序或指令。
本说明书中针对“各个实施例”、“一些实施例”、“一个实施例”、或“实施例”等的参考指代的是结合所述实施例所描述的特定特征、结构、或性质包括在至少一个实施例中。因此,短语“在各个实施例中”、“在一些实施例中”、“在一个实施例中”、或“在实施例中”等在整个说明书中各地方的出现并非必须指代相同的实施例。此外,特定特征、结构、或性质可以在一个或多个实施例中以任何合适方式组合。因此,结合一个实施例中所示出或描述的特定特征、结构或性质可以整体地或部分地与一个或多个其他实施例的特征、结构、或性质无限制地组合,只要该组合不是非逻辑性的或不能工作。
本说明书中“包括”和“具有”以及类似含义的术语表达,意图在于覆盖不排他的包含,例如包含了一系列步骤或单元的过程、方法、***、产品或设备并不限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。“一”或“一个”也不排除多个的情况。另外,本申请附图中的各个元素仅仅为了示意说明,并非按比例绘制。
虽然本发明已经通过上述实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所做出的各种改变以及变化。
Claims (8)
1.一种用于管理硬件命令队列的方法,包括:
为依次分配至硬件队列中的命令按顺序分配相应的命令序号,所述命令序号按其产生的顺序保存在与所述硬件队列对应的命令序号队列中;
从所述硬件队列选择一个或多个命令分发至处理单元;
响应于确定相应命令已经被处理单元执行完毕,将所述命令的命令序号保存在与所述硬件队列对应的完成命令序号缓存中;
响应于确定当前处于所述命令序号队列顶部的命令序号与所述完成命令序号缓存中的命令序号相匹配,从所述命令序号队列顶部移除所述命令序号,并将所述移除的命令序号保存在与所述硬件队列对应的命令序号寄存器中;
其中,该方法还包括:
响应于确定待分配至所述硬件命令队列的当前命令与已分配至所述硬件命令队列的命令之间存在依赖关系,生成等待命令,所述等待命令中包含所述已分配至所述硬件命令队列的命令所在的硬件命令队列的标识及其在硬件命令队列中的命令序号;
将所生成的所述等待命令与所述当前命令作为一个整体命令分配至同一个硬件命令队列中,并为所述整体命令分配相应的命令序号;
其中,从所述硬件队列选择一个或多个命令分发至处理单元,包括:
响应于确定所选择的命令中包含等待命令,若确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,则将所述所选择的命令分发至所述处理单元,否则将所述所选择的命令暂存在命令等待单元,并继续处理后续的命令。
2.根据权利要求1所述的方法,还包括响应于确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,从所述命令等待单元中提取包含所述等待命令的命令分发至所述处理单元。
3.根据权利要求2所述的方法,确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕包括:
将所述等待命令中包含的命令序号与在所述硬件命令队列标识所指示的硬件队列的命令序号寄存器中保存的命令序号进行比较,若所述等待命令中包含的命令序号小于或等于所述命令序号寄存器中保存的命令序号,则确定所述命令已经执行完毕。
4.根据权利要求1所述的方法,从所述硬件队列选择一个或多个命令分发至所述处理单元,包括:
从所述硬件队列中选择多个不包含等待命令的命令同时分发至所述处理单元。
5.一种用于管理硬件命令队列的***,包括命令分配模块以及与每个硬件队列对应的队列管理模块、命令序号寄存器、命令序号队列、完成命令序号缓存和序号检查器,其中:
所述命令分配模块,用于将来自上层的命令分配至多个硬件队列中;
所述队列管理模块,用于为依次分配至所述硬件队列中的命令按顺序分配相应的命令序号,所述命令序号按其产生的顺序保存在与所述硬件队列对应的命令序号队列中;从所述硬件队列选择一个或多个命令分发至处理单元;响应于确定相应命令已经被所述处理单元执行完毕,将所述命令的命令序号保存在与所述硬件队列对应的完成命令序号缓存中;以及响应于经由所述序号检查器确定当前处于命令序号队列顶部的命令序号与所述完成命令序号缓存中的命令序号相匹配,从所述命令序号队列顶部移除所述命令序号,并将所述移除的命令序号保存在与所述硬件队列对应的命令序号寄存器中;
其中所述命令分配模块还用于:
响应于确定待分配至所述硬件命令队列的当前命令与已分配至所述硬件命令队列的命令之间存在依赖关系,生成等待命令,所述等待命令中包含所述已分配至硬件命令队列的命令所在的硬件命令队列的标识及其在该硬件命令队列中的命令序号;
将所生成的所述等待命令与所述当前命令作为一个整体命令分配至同一个硬件命令队列中,并为所述整体命令分配相应的命令序号;
其中,所述***还包括命令等待单元,其中所述队列管理模块还用于:
响应于确定所选择的命令中包含等待命令,若确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,则将所述所选择的命令分发至所述处理单元,否则将所述所选择的命令暂存在命令等待单元,并继续处理后续的命令。
6.根据权利要求5所述的***,其中所述队列管理模块还用于响应于确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕,从所述命令等待单元中提取包含所述等待命令的命令分发至所述处理单元。
7.根据权利要求6所述的***,确定所述等待命令中包含的硬件命令队列标识及命令序号所对应的命令已经执行完毕包括:
将所述等待命令中包含的命令序号与在所述硬件命令队列标识所指示的硬件队列的命令序号寄存器中保存的命令序号进行比较,若所述等待命令中包含的命令序号小于或等于所述命令序号寄存器中保存的命令序号,则确定所述命令已经执行完毕。
8.一种处理器,其被配置为利用如权利要求5-7中任一项所述的***管理多个硬件命令队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210068762.XA CN114116015B (zh) | 2022-01-21 | 2022-01-21 | 用于管理硬件命令队列的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210068762.XA CN114116015B (zh) | 2022-01-21 | 2022-01-21 | 用于管理硬件命令队列的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114116015A CN114116015A (zh) | 2022-03-01 |
CN114116015B true CN114116015B (zh) | 2022-06-07 |
Family
ID=80360971
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210068762.XA Active CN114116015B (zh) | 2022-01-21 | 2022-01-21 | 用于管理硬件命令队列的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116015B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579288B (zh) * | 2022-05-09 | 2022-09-02 | 成都登临科技有限公司 | 一种任务处理的方法、装置以及计算机设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3518510B2 (ja) * | 2001-01-10 | 2004-04-12 | 日本電気株式会社 | リオーダバッファの管理方法及びプロセッサ |
JP3878508B2 (ja) * | 2001-11-08 | 2007-02-07 | 松下電器産業株式会社 | 回路群制御システム |
JP5436033B2 (ja) * | 2009-05-08 | 2014-03-05 | パナソニック株式会社 | プロセッサ |
US10228951B1 (en) * | 2015-08-20 | 2019-03-12 | Apple Inc. | Out of order store commit |
CN111488205B (zh) * | 2019-01-25 | 2024-03-19 | 上海登临科技有限公司 | 面向异构硬件架构的调度方法和调度*** |
CN111638965B (zh) * | 2020-05-22 | 2023-04-11 | 中国人民解放军国防科技大学 | 基于栅栏复制与握手的命令队列间栅栏同步方法及*** |
CN112596681B (zh) * | 2020-12-25 | 2023-12-22 | 深圳大普微电子科技有限公司 | 一种重读命令处理方法、闪存控制器及固态硬盘 |
-
2022
- 2022-01-21 CN CN202210068762.XA patent/CN114116015B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114116015A (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6557095B1 (en) | Scheduling operations using a dependency matrix | |
US6334182B2 (en) | Scheduling operations using a dependency matrix | |
TW539997B (en) | Method and apparatus for identifying splittable packets in a multithreaded VLIW processor | |
US9110714B2 (en) | Systems and methods for multi-tasking, resource sharing, and execution of computer instructions | |
JP5887418B2 (ja) | ストリームデータ多重処理方法 | |
EP1271315B1 (en) | Run queue management | |
US20080077928A1 (en) | Multiprocessor system | |
US7664938B1 (en) | Semantic processor systems and methods | |
EP0947926A2 (en) | System and method for multi-tasking, resource sharing, and execution of computer instructions | |
JP2003044295A (ja) | スリープキュー管理 | |
JPH03282958A (ja) | 電子計算機 | |
US20110283093A1 (en) | Minimizing program execution time for parallel processing | |
JP2003263331A (ja) | マルチプロセッサシステム | |
US8140503B2 (en) | Information processing apparatus having process units operable in parallel | |
CN114116015B (zh) | 用于管理硬件命令队列的方法及*** | |
KR20140030260A (ko) | 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당 | |
US20240036921A1 (en) | Cascading of Graph Streaming Processors | |
US20040199749A1 (en) | Method and apparatus to limit register file read ports in an out-of-order, multi-stranded processor | |
CN110515659B (zh) | 一种原子指令的执行方法和装置 | |
US20030014558A1 (en) | Batch interrupts handling device, virtual shared memory and multiple concurrent processing device | |
Tang et al. | A network load perception based task scheduler for parallel distributed data processing systems | |
KR101725408B1 (ko) | 실시간 운영체제의 태스크 스케줄링 방법 | |
US20090031118A1 (en) | Apparatus and method for controlling order of instruction | |
US8683181B2 (en) | Processor and method for distributing load among plural pipeline units | |
US6550003B1 (en) | Not reported jump buffer |
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 |