掌桥专利:专业的专利平台
掌桥专利
首页

硬件队列调度方法及处理器、电子设备和存储介质

文献发布时间:2023-06-19 19:28:50


硬件队列调度方法及处理器、电子设备和存储介质

技术领域

本申请涉及计算机技术领域,尤其涉及一种硬件队列调度方法及处理器、电子设备和存储介质。

背景技术

相关技术中,CUDA(Compute Un ified Device Arch itecture,统一计算设备架构)的操作流(Stream)的特点是:在一个操作流上面的所有命令都是串行执行。

这是因为,通常情况下,一个操作流是映射到一个硬件队列的,所以对于某个操作流的所有操作命令,都是在同一个硬件队列上面执行。而硬件队列的特点就是串行执行,即:在一个队列中,前一个操作命令完成之后,后一个操作命令才会开始执行。如果一个操作流中有多种操作命令,即使这些操作命令之间没有依赖,也会被串行执行,这样就会降低操作命令执行的并行性,进而降低处理器的执行效率。

发明内容

本申请提出了一种硬件队列调度方法及处理器、电子设备和存储介质,可以改善现有技术中处理器的命令执行效率低的问题。

第一方面,本申请实施例提供一种硬件队列调度方法,所述方法应用于处理器,所述处理器包括多个硬件队列和至少一个处理单元簇,每个处理单元簇包括至少一个处理单元,其中,在同一处理单元簇内任意两个处理单元的类型是不相同的,所述处理单元用于处理来自硬件队列的操作命令,每个硬件队列对应一个处理单元簇中的一种处理单元;

所述方法包括:

获取待处理的操作流,所述操作流包括至少一个操作命令,每个操作命令具有命令信息;

根据所述命令信息,将所述操作流中包括的至少一个操作命令分发至所述多个硬件队列中的至少一个硬件队列;

分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元;

处理单元执行接收到的至少一个操作命令。

在本申请实施例中,处理器包括多个硬件队列,每个硬件队列对应一个处理单元簇中的一个不同的处理单元,利用处理器这样的硬件性质,将获取到的待处理操作流中包括的各操作命令分发至相应的硬件队列,并对各硬件队列中的操作命令进行按序分发,使得每个硬件队列中的操作命令被分发至对应的处理单元,以使对应处理单元执行各自接收到的这些操作命令。这样,可以基于处理器的硬件性质,将操作流中的多个操作命令分发到多个硬件队列后,单个硬件队列中的多个操作命令能够被串行处理,多个硬件队列中没有依赖关系的多个操作命令能够被并行处理,实现对操作流中多个操作命令的串行和/或并行处理,可以使操作流的各操作命令在处理单元上被高效且正确执行,提高处理器的效率。

第二方面,本申请实施例提供一种处理器,包括:多个硬件队列和至少一个处理单元簇,每个处理单元簇包括至少一个处理单元,其中,在同一处理单元簇内任意两个处理单元的类型是不相同的,所述处理单元用于处理来自硬件队列的操作命令,每个硬件队列对应一个处理单元簇中的一种处理单元;所述处理器通过执行软件驱动,获取待处理的包括至少一个操作命令的操作流,每个操作命令具有用于反映命令类型的命令信息;根据所述命令信息,将所述操作流中包括的至少一个操作命令分发至所述多个硬件队列中的至少一个硬件队列;分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元;处理单元执行接收到的至少一个操作命令。

第三方面,本申请实施例提供一种电子设备,包括:存储器和处理器;所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时执行上述第一方面提供的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述第一方面提供的方法。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。

图1示出根据本申请实施例的一种硬件队列调度方法的流程图。

图2示出根据本申请实施例的一种硬件队列调度方法的应用示意图。

图3示出根据本申请实施例的一种硬件队列调度方法的示意图。

图4示出根据本申请实施例的处理器的一种架构示意框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。

另外,为了更好地说明本申请,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本申请同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本申请的主旨。

在现代高性能计算处理器或图像处理器中,通常会利用硬件队列(或称硬件命令队列)来执行数据处理任务。当某一程序代码在该处理器上执行时,首先会通过该处理器的软件驱动将程序代码解析为硬件可执行的操作命令,然后将这些操作命令分配至硬件队列中等待处理。硬件队列接收来自软件驱动产生的操作流(也可称为操作命令流),将该硬件队列中的操作命令按照先后次序分发至处理单元进行处理。然而,相关技术中,一个操作流对应一个硬件队列,会降低操作命令执行的并行性,影响处理器的处理效率。

有鉴于此,本申请的实施例提出了一种硬件队列调度方案,其中,一个操作流可对应处理器内的多个硬件队列,每个硬件队列对应一个处理单元簇中的一种处理单元,利用处理器这样的硬件性质,可以将获取到的待处理操作流中包括的多个操作命令分发至多个硬件队列,并分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元,以使处理单元执行接收到的至少一个操作命令。这样,可以基于处理器的硬件性质,对多个硬件队列进行调度管理来提高处理器的并行度和处理效率,实现多个操作命令的串行和/或并行处理,从而让操作流(Stream)的各操作命令在处理单元上被高效且正确执行,提高处理器的效率。

图1示出根据本申请实施例的一种硬件队列调度方法的流程图,如图1所示,所述硬件队列调度方法包括:

在步骤S11中,获取待处理的操作流,所述操作流包括至少一个操作命令,每个操作命令具有用于反映命令类型的命令信息;

在步骤S12中,根据所述命令信息,将所述操作流中包括的至少一个操作命令分发至多个硬件队列中的至少一个硬件队列;

在步骤S13中,分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元;

在步骤S14中,处理单元执行接收到的至少一个操作命令。

在一种可能的实现方式中,所述方法应用于处理器,所述方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现,所述处理器可包括多个硬件队列(Hardware Queue)和至少一个处理单元簇(Cl uster),每个处理单元簇包括至少一个处理单元,其中,在同一处理单元簇内任意两个处理单元的类型是不相同的,不同类型的处理单元可实现不同的功能。示例性的,一个处理单元簇中可包括这些处理单元:用于处理通用运算任务的计算单元(Compute Un it,CU),用于处理张量运算任务的张量单元(Tensor Unit,TU),用于数据搬运或传输的直接存储器访问单元(Di rect Memory Access,DMA)等。

所述处理单元可用于处理来自硬件队列的操作命令,每个硬件队列对应一个处理单元簇中的一种处理单元。一个处理单元对应一个硬件队列。

其中,所述处理单元的类型可包括计算单元、张量单元、直接存储器访问单元中的至少一种,本申请实施例对处理器具体包括的处理单元的类型不作限制。

在一种可能的实现方式中,在步骤S11中,当某一程序代码在该处理器上执行时,可以通过该处理器的软件驱动(Dr ive)将程序代码解析为待处理的操作流(Stream),该操作流可包括一系列的硬件可执行的操作命令。其中,在操作流中的这些操作命令可按照软件驱动生成操作命令的先后顺序(即符合代码编程的原始命令顺序)串行排列,每个操作命令具有命令信息。

在步骤S11获取到待处理的操作流,可在步骤S12中,根据操作流中各操作命令的命令信息,将操作流中包括的至少一个操作命令分发至多个硬件队列中的至少一个硬件队列,其中,一个硬件队列对应一个处理单元簇中的一个处理单元。处理器可通过运行上述软件驱动,完成步骤S11和S12。

举例来说,假设某一个操作流包括了N个(N≥1)操作命令,可以根据N个操作命令中每个操作命令的命令信息,将该操作流包括的N个操作命令分发至多个(例如8个、16个等)不同的硬件队列。其中,各硬件队列可指向不同的处理单元,使每个硬件队列各自负责一个处理单元簇中的一个处理单元的操作命令。每个操作命令的命令信息可用于确定执行该操作命令的目标处理单元(例如某一处理单元簇中的张量单元),以将该操作命令分发至该目标处理单元对应的目标硬件队列(例如某一处理单元簇中的张量单元对应的硬件队列),使该操作命令能够通过该目标硬件队列被分发至对应的目标处理单元。

这样,可以将一个操作流扩展到多个硬件队列,并且,在硬件结构层面,设置为在相同的处理单元簇中任意两个处理单元的类型是不相同的(例如,在任一处理单元簇中每种类型的处理单元只有一个),每个硬件队列各自负责一个处理单元簇中的一个处理单元的操作命令,可以使得单个硬件队列上的操作命令天然串行,有利于不同硬件队列上的操作命令的并行处理,进而提高处理器内部执行的并行度和处理效率。

在步骤S12将操作流中包括的N个操作命令分发至多个硬件队列,可在步骤S13中,分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元。

其中,在每个硬件队列内部,顺序分发操作命令,使每个硬件队列中的操作命令被串行执行。例如,硬件队列在分发出一个操作命令后,会等待该操作命令执行完成后,再分发下一操作命令。

在步骤S13分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元,在步骤S14中,每个处理单元可响应于接收到的至少一个操作命令,执行接收到的至少一个操作命令。例如,计算单元可响应于接收到的计算操作命令,执行计算操作命令,得到计算结果;张量单元可响应于接收到的张量操作命令,执行张量操作命令,得到张量运算结果;直接存储器访问单元可响应于接收到的直接存储器访问操作命令(例如用于将数据从一个地址空间复制到另外一个地址空间),执行关于直接存储器访问的操作命令,得到访问操作结果。

在本申请的实施例中,处理器可包括多个硬件队列,每个硬件队列对应一个处理单元簇中的一个不同的处理单元,利用处理器这样的硬件性质,可以将获取到的待处理操作流中包括的各操作命令分发至相应的硬件队列,并对各硬件队列中的操作命令进行按序分发,使得每个硬件队列中的操作命令被分发至对应的处理单元,以使对应处理单元执行各自接收到的这些操作命令。这样,可以基于处理器的硬件性质,将操作流中的多个操作命令分发到多个硬件队列后,单个硬件队列中的多个操作命令能够被串行处理,多个硬件队列中没有依赖关系的多个操作命令能够被并行处理,实现对操作流中多个操作命令的串行和/或并行处理,从而使操作流的各操作命令在处理单元上被高效且正确执行,提高处理器的效率。

下面对本申请实施例的硬件队列调度方法进行示例性的说明。

图2示出根据本申请实施例的一种硬件队列调度方法的应用示意图。如图2所示,在步骤S11获取到软件驱动产生的待处理的操作流,可在步骤S12中,将操作流中包括的各操作命令分发至相应的硬件队列(例如硬件队列0~硬件队列n)。

在一种可能的实现方式中,每个操作命令具有命令信息。步骤S12可包括:根据操作命令的命令信息,将所述操作流中包括的至少一个操作命令分发至多个硬件队列中的至少一个硬件队列。

其中,所述命令信息包括簇信息和类型信息,所述簇信息用于指示处理所述操作命令的处理单元簇,所述类型信息用于指示处理所述操作命令的处理单元的类型。

可选的,对于操作流中的目标操作命令,可根据该目标操作命令的簇信息和类型信息,确定用于执行该目标操作命令的目标处理单元簇以及目标处理单元,并将该目标操作命令分发至该目标处理单元簇和目标处理单元对应的目标硬件队列,以使该目标操作命令能够通过该目标硬件队列被分发至该目标处理单元簇中的目标处理单元。

由于处理器的每个硬件队列可对应一个处理单元簇中的一个不同的处理单元,所以,对于操作流中包括的任一操作命令,在根据该操作命令的命令信息中的簇信息,确定了该操作命令应该往哪个处理单元簇分发,以及根据该操作命令的命令信息中的类型信息,确定了该操作命令应该往哪类型的处理单元分发,就可以确定该操作命令该往哪个硬件队列分发。

因此,可根据操作命令的命令信息,确定操作流中各操作命令分别对应的硬件队列,并将操作流中的各操作命令分发至其对应的硬件队列上,操作命令进入硬件队列后可以等待按序(例如软件驱动生成操作命令的先后顺序)被分发出去。

这样,在处理器接收到几十个操作命令(或者更多数量的操作命令)的情况下,处理器可基于操作流将这几十个操作命令(或者更多的操作命令)分发至多个硬件队列,每个硬件队列上都会有一些操作命令,然后每个硬件队列上存储的这些操作命令等待分发给对应的处理单元。这样的话,不同类型处理单元(例如前述的计算单元、张量单元、直接存储器访问单元等)的操作命令在硬件队列上就可以被区分了。

示例性地,如图2所示,硬件队列0可对应处理单元簇0中的计算单元,硬件队列1可对应处理单元簇0中的张量单元。

如果操作流中某一操作命令的命令信息,指示出用于处理该操作命令的处理单元簇为处理单元簇0,以及用于处理该操作命令的处理单元的类型为计算单元,可以将该操作命令分发至硬件队列0;

如果操作流中某一操作命令的命令信息,指示出用于处理该操作命令的处理单元簇为处理单元簇0,以及用于处理该操作命令的处理单元的类型为张量单元,可以将该操作命令分发至硬件队列1。

其中,硬件队列0负责处理单元簇0中计算单元的操作命令,并且,在处理单元簇0中,类型为计算单元类型的处理单元的数量为一个,硬件队列0会等发送至处理单元簇0的计算单元的操作命令被执行完,才会发送下一个操作命令至该计算单元。让一个硬件队列负责一个处理单元簇上的某个类型的处理单元的命令,可使得单个硬件队列上的操作命令天然串行,有利于不同硬件队列的操作命令的并行处理。

因为从硬件设计上,每个处理单元簇上各类型的处理单元的数量为一个,如图2所示,对处理单元簇0来说,有一个计算单元,一个张量单元,往处理单元簇0的计算单元分发操作命令的硬件队列0不会再给其他处理单元簇(例如处理单元簇1)的计算单元发操作命令;同理,往处理单元簇0的张量单元分发操作命令的硬件队列1,不会给其他处理单元簇(例如处理单元簇1)的张量单元发操作命令。

通过这种方式,根据操作命令的命令信息,将操作流中各操作命令分发至对应的硬件队列,有利于实现在不同硬件队列上的操作命令的并行,提高处理器的并行度和处理效率。

如图2所示,在步骤S12将操作流中包括的至少一个操作命令分发至多个硬件队列(例如硬件队列0~硬件队列n),可在步骤S13中,分别从每个硬件队列选择至少一个操作命令分发至每个硬件队列对应的处理单元,例如,硬件队列0可以顺序分发其存储的操作命令至处理单元簇0的计算单元,硬件队列1可以顺序分发其所存储的操作命令至处理单元簇0的张量单元。在步骤S14中,处理单元可执行接收到的操作命令,例如可包括对全局存储器(G loba l memory)进行各种读写操作。

其中,在步骤S14处理单元执行完接收到的硬件队列发送的当前操作命令,也可以触发步骤S13,硬件队列可选择下一操作命令分发至处理单元,本申请的实施例对步骤S13和步骤S14的先后顺序不作限制。

在上述过程中,已知操作流中的操作命令可按照软件驱动生成操作命令的先后顺序(即符合代码编程的原始命令顺序)串行排列,如果将一个操作流映射到一个硬件队列,往一个硬件队列上面发送操作命令是不用关心操作命令之间是否有依赖关系(比如某一操作命令的执行会依赖另一操作命令的执行结果)。因为,同一个硬件队列中的各操作命令之间本就是串行执行的,即使同一硬件队列中的各操作命令之间有依赖关系,被依赖的操作命令也会被排序在先,按照各操作命令在该硬件队列中的排列顺序按序执行。

然而,一个操作流对应一个硬件队列会导致硬件队列调度方法的并行度比较低,会影响处理器的处理效率。在本申请的实施例中,一个操作流可扩展为对应多个硬件队列,可对多个硬件队列进行调度管理来提高处理器的并行度和处理效率。在这种情况下,就需要考虑操作流中各操作命令之间的依赖关系,如果不考虑操作命令之间的依赖关系,并行执行所有的操作命令,可能得到因操作命令的执行时序而导致的错误执行结果。例如,在操作命令1依赖于操作命令2的执行结果的情况下,如果操作命令1和操作命令2同步执行(或者操作命令1在操作命令2之前执行),所得到的操作命令1的执行结果明显是不准确的。

因此,为了提高处理准确率,本申请的实施例在将操作流中的各操作命令分发到不同硬件队列之前,会对所述操作流中的操作命令进行依赖关系的识别处理,得到所述操作流中操作命令之间的依赖关系;根据所述操作流中操作命令之间的依赖关系,从所述操作流中选择至少一个操作命令分发至对应的所述硬件队列。

其中,所述依赖关系可以是在对程序代码进行编程时所确定或设置的,例如某一操作命令的执行要依赖于前一操作命令的执行结果。如果操作流中的操作命令之间需要存在依赖关系,可以基于依赖关系建立操作命令之间的等待机制,并根据建立的操作命令之间的等待机制,从所述操作流中选择至少一个操作命令分发至对应的所述硬件队列,以使被依赖的操作命令可以在先被执行。如果操作流中的操作命令之间不需要存在依赖关系,可以不用建立操作命令之间的等待机制,直接将从操作流中选择至少一个操作命令分发至对应的所述硬件队列,不用再进一步关心各操作命令之间的执行时序。

示例性地,假设操作流中存在操作命令1和操作命令2,操作命令1用于执行多层卷积神经网络中第一网络层的卷积运算,会将待处理数据与第一网络层的卷积核进行卷积运算;操作命令2用于执行多层卷积神经网络中第二网络层的卷积运算,将操作命令1的执行结果与第二网络层的卷积核进行卷积运算。在这种情况下,对操作流中的操作命令1和操作命令2进行依赖关系识别处理,就可以识别出操作命令1和操作命令2之间存在依赖关系,操作命令2依赖操作命令1。

示例性地,假设操作流中存在操作命令1和操作命令2,操作命令1用于对待处理图像A执行滤波处理,操作命令2用于对待处理图像B执行分割处理,图像A和图像B无关。在这种情况下,对操作流中的操作命令1和操作命令2进行依赖关系识别处理,可以识别出操作命令1和操作命令2之间不存在依赖关系。

考虑到大部分的操作命令会使用硬件资源(例如内存),可以通过跟踪分析这些硬件资源,更精确地识别操作命令之间的依赖关系。其中,一个内存块可对应一个物理地址,操作命令可通过访问不同的物理地址来访问不同的内存块。

在一种可能的实现方式中,按照所述操作流中各操作命令的排列顺序进行识别,在识别到所述操作流中的第一操作命令与第二操作命令需要对相同的硬件资源进行访问,并且所述第一操作命令和所述第二操作命令中有任一者需要对该相同的硬件资源执行写操作的情况下,确定所述第一操作命令依赖所述第二操作命令;其中,所述第一操作命令为所述操作流中待分配至所述硬件队列的当前操作命令,所述第二操作命令为所述操作流中排列顺序在所述第一操作命令之前的命令。

其中,若该第一操作命令与该第二操作命令是需要同一处理单元处理的命令,会按序被分到同一硬件队列等待按序处理。若第一操作命令与第二操作命令是需要不同处理单元处理的命令,即,第一操作命令是需要与第二操作命令分配至不同硬件队列的操作命令,则需要为依赖该第二操作命令的第一操作命令建立等待机制。

示例性地,如果存在两个操作命令会用到相同的硬件资源中存储的资源数据,可能要其中一个操作命令执行完,另一个操作命令才会有效。所以,对操作流中待分配至各硬件队列的操作命令,可进行资源分析,来识别操作流中各操作命令之间的依赖关系,以利于后续可以根据操作命令之间的依赖关系建立等待关系,使各操作命令可以按照正确的时序执行。

假设按照操作流中操作命令之间的顺序,待分配至某一硬件队列A的第二操作命令在处理时序上先于待分配至另一硬件队列B的第一操作命令。

如果第二操作命令是会对其中一个目标硬件资源进行写操作的命令,第一操作命令是会对该目标硬件资源进行读操作的命令,第一操作命令和第二操作命令读写的硬件资源有相同之处,可以识别为第一操作命令和第二操作命令之间存在依赖关系,也即,第一操作命令依赖第二操作命令。在后续操作命令被执行时,可等待第二操作命令对该硬件资源写操作执行完,才可以让第一操作命令去执行读操作。

如果第二操作命令是会对硬件资源进行读操作的命令,第一操作命令是会对硬件资源进行写操作的命令,并且第一操作命令和第二操作命令读写的硬件资源相同,可以识别为第一操作命令和第二操作命令之间存在依赖关系,也即,第一操作命令依赖第二操作命令。在后续操作命令被执行时,可等待第二操作命令对该硬件资源读操作执行完,才让第一操作命令去执行写操作。

如果第一操作命令和第二操作命令都是会对相同硬件资源进行写操作的命令,可以识别为第一操作命令和第二操作命令存在依赖关系,也即,第一操作命令依赖第二操作命令。在后续操作命令被执行时,可等待第二操作命令对该硬件资源写操作执行完,才可以让第一操作命令去执行写操作。

如果第一操作命令和第二操作命令都是会对相同硬件资源进行读操作的命令,由于这两个操作命令都是读操作,不会更改硬件资源对应的存储内容,可以识别为这两个操作命令之间不存在依赖关系。在后续操作命令被执行时,可以不对这两个操作命令的执行时序作要求。

可选的,在上述过程中,考虑到同一个硬件队列中的各操作命令之间本就是串行执行的,即使该硬件队列中的各操作命令之间有依赖关系,被依赖的操作命令也会被排序在先,按照各操作命令在该硬件队列中的排列顺序按序执行。所以,为了提高处理效率,对于操作流中待分配至同一硬件队列的各操作命令,可以省略分析或忽略那些需要被分至同一硬件队列的各操作命令之间的依赖关系。

应当理解,在实际的应用过程中,一个操作命令可能要用很多硬件资源,比如,一个操作命令用十几个资源访问多个地址都是有可能的,所以,一个操作命令有可能会依赖一个或多个操作命令,本申请对操作命令用到的硬件资源数量,以及每个操作命令可能会依赖的操作命令数量不作限制。

通过上述实现方式,可以对操作流中待分配至硬件队列的各操作命令进行硬件资源分析,分析每个操作命令会用哪些硬件资源,以及操作命令与每个硬件资源的读写关系,有利于更准确地识别出操作流中各操作命令之间的依赖关系。

在识别出操作流中各操作命令之间的依赖关系的情况下,可以根据依赖关系,从操作流中选择至少一个操作命令分发至对应的硬件队列。

在一种可能的实现方式中,响应于确定所述第一操作命令依赖所述第二操作命令,且,确定所述第一操作命令和所述第二操作命令为需要不同处理单元处理的命令,生成与所述第一操作命令对应的等待命令,所述等待命令用于使所述第一操作命令在等待所述第二操作命令已经执行完毕后才执行;在所述操作流中的所述第一操作命令之前插入所述等待命令;将所述等待命令与所述第一操作命令作为一个整体命令,分发至所述第一操作命令对应的所述硬件队列。

示例性地,如果操作流中的操作命令之间不存在依赖关系,在将操作流中的各操作命令分发至对应的硬件队列,各硬件队列可以串行和/或并行地对操作命令进行分发,在这种情况下,并不会因为各操作命令的执行时序而产生错误的执行结果。其中,为了提高处理器的处理效率,各硬件队列可以并行地进行操作命令的分发。

例如,对于操作流中待分配至硬件队列0的memcpy(内存拷贝的操作命令)和待分配至硬件队列1的l aunchkerne l(执行内核的操作命令),如果这两个操作命令之间不存在依赖关系,将这两个操作命令分别发送至各自对应的硬件队列后,无论是硬件队列0先将memcpy发送至其对应的处理单元,硬件队列1再将l aunchkerne l发送至其对应的处理单元;还是硬件队列1先将l aunchkerne l发送至其对应的处理单元,硬件队列0再将memcpy发送至其对应的处理单元;亦或是硬件队列0和硬件队列1同步地将memcpy和l aunchkernel分别发送至对应的处理单元,都不会影响memcpy和l aunchkerne l这两个命令的执行结果。

或者,如果操作流中的操作命令之间存在依赖关系,并且这些操作命令为需要相同处理单元处理的命令,这些操作会被分发至同一硬件队列(即相同处理单元对应的硬件队列),考虑到同一个硬件队列中的各操作命令之间本就是串行执行的,即使该硬件队列中的各操作命令之间有依赖关系,被依赖的操作命令也会被排序在先,按照各操作命令在该硬件队列中的排列顺序按序执行。在这种情况下,也不会因为各操作命令的执行时序而产生错误的执行结果。

例如,若操作流中的待分配至硬件队列1中的l aunchkerne l(执行内核的操作命令),依赖排序在先的待分配至相同的硬件队列1中的memcpy(内存拷贝的操作命令),会先将排序在先的memcpy分发至硬件队列1,再将排序在后的l aunchkerne l分发至该硬件队列1,以使硬件队列1中memcpy的排序在l aunchkerne l之前。这样,硬件队列1就可以先将memcpy发送至其对应的处理单元,以使l aunchkerne l在memcpy执行之后被执行,并不会影响memcpy和l aunchkerne l这两个命令的执行结果。

相反的,如果操作流中的操作命令之间存在依赖关系,并且这些操作命令为需要不同处理单元处理的命令,操作流中存在依赖关系的各操作命令会被分发至不同的硬件队列。这样,各操作命令在执行的过程中,如果不考虑操作命令的执行时序,大概率会产生错误的执行结果。因此,在这种情况下,在将操作流中的各操作命令分发至各硬件队列的过程中,可以根据操作流中操作命令之间的依赖关系建立一个硬件级别的操作命令等待机制,这样,操作命令虽然是放在了不同的硬件队列上被分发,但是由于建立了等待机制,操作命令会按照正确的执行时序被执行(例如被依赖的操作命令会被先执行),以得到正确的执行结果。

例如,若操作流中的待分配至硬件队列1中的launchkerne l(执行内核的操作命令)依赖待分配至硬件队列0中memcpy(内存拷贝的操作命令),如果硬件队列1先将发送至其对应的处理单元,以使l aunchkerne l在memcpy执行之前先被执行了,这样,launchkerne l的执行结果明显是不正确的。

所以,在识别到待分配至硬件队列1中的l aunchkerne l依赖待分配至硬件队列0中memcpy,可以为待分配至硬件队列1中的l aunchkerne l生成一个等待命令,用于使launchkerne l的执行等待memcpy已经执行完毕。可以在操作流中待分配至硬件队列1中的launchkerne l之前插入该等待命令,并将l aunchkerne l与等待命令作为一个整体命令分发至硬件队列1。在此情况下,硬件队列1在将l aunchkerne l分发至对应的处理单元之前,可以先通过等待命令检测memcpy是否已经执行完毕,如果memcpy还未执行,硬件队列1可以等待memcpy执行完毕后,再将l aunchkerne l分发至对应的处理单元。

这样,虽然各操作命令会放在不同的硬件队列上面被分别分发,但是由于建立了等待关系可以按照正确的执行时序被串行执行,减少了位于不同硬件队列上的两个操作命令在存在依赖关系的情况下,可能会被并行执行的概率。

通过这种方式,在操作流中需要不同处理单元来处理的操作命令之间存在依赖关系的情况下,可以根据操作流中操作命令之间的依赖关系建立操作命令之间的等待机制,有利于让各操作命令在处理器中被高效且正确执行,提高处理器的执行效率和执行精准度。

在一种可能的实现方式中,为了更高效更准确的识别操作流中操作命令之间的依赖关系,可以为所述操作流中的操作命令,构建动态依赖关系表,所述动态依赖关系表用于反映每个操作命令对于处理器中各硬件资源的地址读写关系;根据所述动态依赖关系表,确定所述操作流中各操作命令之间的依赖关系。

示例性地,表1示出根据操作流中待分配至不同硬件队列中的操作命令构建的一种动态依赖关系表。

表1动态依赖关系表

在表1中,硬件资源1~硬件资源6可具有不同的物理地址。可通过不同的物理地址访问不同的硬件资源。例如,在表1中,可通过硬件资源1的物理地址1访问硬件资源1,可通过硬件资源2的物理地址2访问硬件资源2,以此类推,可通过硬件资源6的物理地址6访问硬件资源6。

其中,所述动态依赖关系表可包括:操作命令编号、命令信息、操作命令对应的硬件资源数量、每个硬件资源的地址、操作命令与每个硬件资源的读写关系中的至少一种,本申请对动态依赖关系表的具体内容和形式不作限制。

可以理解的是,上述表1仅作为示例,形式并不唯一,动态依赖关系表可以是用于进行分析、进行状态更新的表,本申请对表1的具体形式不作限制。

在构建好动态依赖关系表,可通过查询动态依赖关系表,确定操作流中操作命令之间的依赖关系。例如,通过表1可知,操作流中待分配至硬件队列1的操作命令2依赖待分配至硬件队列0的操作命令0;操作流中待分配至硬件队列2的操作命令6依赖待分配至硬件队列1的操作命令2和待分配至硬件队列0的操作命令3;操作流中待分配至硬件队列0的操作命令7依赖待分配至硬件队列1的操作命令4;操作流中待分配至硬件队列1的操作命令8依赖待分配至硬件队列2的操作命令6和待分配至硬件队列0的操作命令7。

然后,可以根据动态依赖关系表确定的依赖关系,建立操作命令之间的等待关系,例如,操作命令2等待操作命令1执行完毕、操作命令6等待操作命令2和3执行完毕、操作命令7等待操作命令4执行完毕、操作命令8等待操作命令6和7执行完毕。

可根据操作命令之间的等待关系,分别从操作流中将各操作命令分发至对应的硬件队列0~硬件队列2。

示例性地,图3示出根据本申请实施例的一种硬件队列调度方法的示意图,如图3所示,可根据操作流中操作命令之间的等待关系,为操作命令2生成一个等待操作命令1执行完毕的等待命令,并将该等待命令与操作命令2打包成一个命令发送至硬件队列1;类似地,由于操作命令6等待操作命令2和3执行完毕,可以为操作命令6生成一个等待操作命令2和操作命令3执行完毕的等待命令,并将该等待命令与操作命令6打包成一个命令发送至硬件队列2;由于操作命令7等待操作命令4执行完毕,可以为操作命令7生成一个等待操作命令4的等待命令,并将该等待命令与操作命令7打包成一个命令发送至硬件队列0;由于操作命令8等待操作命令6和7执行完毕,可以为操作命令8生成一个等待操作命令6和操作命令7执行完毕的等待命令,并将该等待命令与操作命令8打包成一个命令发送至硬件队列1。

这样,硬件队列0~2收到从操作流中分发的各操作命令,就可以按照正确的时序处理各操作命令。

例如,硬件队列0和硬件队列2可以并行处理,分别将操作命令1和操作命令5分发至各自对应的处理单元;

硬件队列1中操作命令2对应的等待命令检测到硬件队列0分发至对应处理单元的操作命令1执行完毕,硬件队列1可以分发操作命令2,并且,硬件队列1可以和硬件队列0可以并行处理,分别将操作命令2和操作命令3分发至各自对应的处理单元;

等待硬件队列1分发至对应处理单元的操作命令2执行完毕,可以继续将该硬件队列1中的操作命令4分发至其对应的处理单元;

硬件队列2中操作命令6对应的等待命令检测到硬件队列1分发至对应处理单元的操作命令2执行完毕,并且硬件队列0分发至对应处理单元的操作命令3也执行完毕,可以将该硬件队列2中的操作命令6分发至其对应的处理单元;

硬件队列0中操作命令7对应的等待命令检测到硬件队列1分发至对应处理单元的操作命令4执行完毕,可以将硬件队列1中的操作命令7分发至其对应的处理单元;

硬件队列1中操作命令8对应的等待命令检测到硬件队列0分发至对应处理单元的操作命令7执行完毕,并且硬件队列2分发至对应处理单元的操作命令6也执行完毕,可以将该硬件队列1中的操作命令8分发至其对应的处理单元。

通过这种方式,基于动态依赖关系表建立操作命令之间的等待机制,并基于建立的等待机制将操作流的各操作命令分发至对应的硬件队列,有利于让各操作命令在处理器中被高效且正确执行,提高处理器的执行效率和执行精准度。

除了上文描述的以操作命令为主体,通过对操作流中各操作命令之间的硬件资源分析,识别出操作流中各操作命令之间的依赖关系,并基于依赖关系将操作流中的操作命令准确高效地分发至各自对应的硬件队列。本申请的实施例还可以以硬件资源为主体,对硬件资源进行操作命令的执行跟踪,进一步减少硬件队列调度过程中出现调度错误的概率。

在一种可能的实现方式中,为所述操作流中每个操作命令分配一个命令编号;将所述处理器中的每个硬件资源,分别封装成对应的软件资源对象(或为硬件资源生成对应的软件资源对象),所述软件资源对象用于存储操作命令的命令编号;按照所述操作流中操作命令的排列顺序,确定待分配至硬件队列的当前的第一操作命令对应的硬件资源的信息;

在所述硬件资源对应的软件资源对象中没有存储命令编号的情况下,确定所述第一操作命令不依赖任一操作命令,将所述第一操作命令的命令编号存入所述硬件资源对应的软件资源对象;

或者,在所述硬件资源的软件资源对象中存储有命令编号的情况下,确定所述第一操作命令依赖所述软件资源对象中存储的命令编号对应的操作命令,并将所述硬件资源的软件资源对象中存储的命令编号替换为所述第一操作命令的命令编号。

示例性地,假设处理器中存在硬件资源H1和硬件资源H2(硬件资源H1和硬件资源H2可以是具有不同地址的内存块),对于处理器中的每一个硬件资源,软件驱动可以将其封装成对应的软件资源对象,即:将硬件资源H1封装成软件资源对象Obj1,将硬件资源H2封装成软件资源对象Obj2。

其中,每个硬件资源可对应一个不同的软件资源对象,在任一软件资源对象中,可以包括用于区分不同操作命令的命令编号(I D),例如上一次访问该硬件资源的操作命令的命令编号。

应当理解,任一对硬件资源执行的操作命令,可以拥有一个唯一的命令编号,命令编号可以包括数字、字母、符号等,本申请对命令编号的具体形式不作限制。

进一步,软件资源对象还可以包括其他附加信息,例如,硬件资源(内存)本身的地址信息、大小、对应哪个处理单元簇,上一次被什么操作命令处理、上一次的读写关系等等,本申请对此不作限制。

按照所述操作流中操作命令的排列顺序,对于操作流中待分配至所述硬件队列的当前的第一操作命令,获取该第一操作命令会使用的硬件资源,例如:硬件资源H1和硬件资源H2。

如果硬件资源H1对应的软件资源对象Obj1,以及硬件资源H2对应的软件资源对象Obj2,都没有存储命令编号的情况下,可以将第一操作命令的命令编号分别存入硬件资源H1对应的软件资源对象Obj1和硬件资源H2对应的软件资源对象Obj2,并识别为第一操作命令不依赖任一操作命令。

或者,如果硬件资源H1对应的软件资源对象Obj1没有保存任何命令编号,硬件资源H2对应的软件资源对象Obj2存在命令编号。

由于硬件资源H1对应的软件资源对象Obj1没有保存任何命令编号,可以将当前的第一操作命令的命令编号存入硬件资源H1的软件资源对象Obj1;由于硬件资源H2对应的软件资源对象Obj2上存在有一个命令编号(例如,上一次访问过该硬件资源H2的上一操作命令对应的命令编号),可以识别为第一操作命令依赖该命令编号对应的操作命令,并同步地,将硬件资源H2对应的软件资源对象Obj2上的命令编号更新为当前的第一操作命令的命令编号。

通过这种方式,可以为硬件资源保存一个上次使用该硬件资源的操作命令的命令编号,有利于实现对硬件资源的跟踪,有利于高效准确地识别操作操作命令之间的依赖关系。

在一种可能的实现方式中,响应于所述第一操作命令依赖所述命令编号对应的操作命令,且,确定所述第一操作命令和所述命令编号对应的操作命令为需要不同处理单元处理的命令,生成与所述第一操作命令对应的等待命令,所述等待命令用于使所述第一操作命令在等待所述命令编号对应的操作命令已经执行完毕后才执行;在所述操作流中的所述第一操作命令之前插入所述等待命令;将所述等待命令与所述第一操作命令作为一个整体命令,分发至所述第一操作命令对应的所述硬件队列。

示例性地,如果当前的第一操作命令访问硬件资源H2对应的软件资源对象Obj2,发现软件资源对象Obj2保存了某一命令编号,并且当前的第一操作命令和软件资源对象Obj2保存的命令编号对应的操作命令为需要不同处理单元处理的命令。说明第一操作命令依赖软件资源对象Obj2保存的命令编号对应的操作命令,并且这两个操作命令对应的是不同的硬件队列,在这种情况下,可以为当前的第一操作命令生成一个等待命令,并在操作流中的当前的第一操作命令之前插入这个等待命令,将该等待命令与第一操作命令作为一个整体命令分发至第一操作命令对应的所述硬件队列。

各硬件队列在接收到操作流分发的操作命令,每个硬件队列可以顺序分发接收到的操作命令,使每个硬件队列中的操作命令被串行执行。

其中,对于当前待分发至处理单元的第一操作命令,如果第一操作命令存在对应的等待命令,可以响应于所述第一操作命令对应的所述等待命令已经执行完毕,将所述第一操作命令分发至对应的所述处理单元。

通过这种方式,第一操作命令能够等待上次使用相同硬件资源的操作命令结束,有利于各操作命令被处理单元高效且正确执行。

综上所述,本申请的实施例提出了一种基于处理单元的多硬件队列的调度方法,处理器可包括多个硬件队列,每个硬件队列对应一个处理单元簇中的一个不同的处理单元,利用处理器这样的硬件性质,可以将获取到的待处理操作流中包括的各操作命令分发至相应的硬件队列,并对各硬件队列中的操作命令进行按序分发,使得每个硬件队列中的操作命令被分发至对应的处理单元,以使对应处理单元执行各自接收到的这些操作命令。这样,可以基于处理器的硬件性质,将操作流中的多个操作命令分发到多个硬件队列后,单个硬件队列中的多个操作命令能够被串行处理,多个硬件队列中没有依赖关系的多个操作命令能够被并行处理。

进一步,还可以通过识别操作流中各操作命令之间的依赖关系,并在各操作命令为需要不同处理单元处理的命令的情况下,建立操作命令之间的等待关系,并根据等待关系从操作流中选择至少一个操作命令分发至对应的硬件队列,实现多个操作命令的串行和/或并行处理,从而让操作流的各操作命令在处理单元上被高效且正确执行,提高处理器的效率。

可以理解,本申请提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本申请不再赘述。本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

此外,本申请还提供了处理器、电子设备、计算机可读存储介质、程序,前述产品均可用来实现本申请提供的任一种硬件队列调度方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。

图4示出根据本申请实施例的处理器40的一种架构示意框图,如图4所示,所述处理器40包括:多个硬件队列41和至少一个处理单元簇42,每个处理单元簇42包括至少一个处理单元43,其中,在同一处理单元簇42内任意两个处理单元43的类型是不相同的,所述处理单元43用于处理来自硬件队列41的操作命令,每个硬件队列41对应一个处理单元簇中42的一种处理单元43,所述处理器40能通过执行软件驱动,获取待处理的包括至少一个操作命令的操作流,每个操作命令具有用于反映命令类型的命令信息;根据所述命令信息,将所述操作流中包括的至少一个操作命令分发至所述多个硬件队列41中的至少一个硬件队列41;分别从每个硬件队列41选择至少一个操作命令分发至每个硬件队列41对应的处理单元43;处理单元43执行接收到的至少一个操作命令。

在一些实施例中,本申请实施例提供的处理器具有的功能或包含的硬件模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。

该处理器可以是全新设计的,也可以是对已有处理器进行改进后得到的,处理器架构中的处理单元或处理单元簇的类型可以是但不限于:中央处理器(Centra l Processing Un it,CPU)、图形处理器(Graph ic Process ing Un it,GPU)、通用图形处理器(Genera l-Purpose Comput ing on Graph ics Process ing Un its,GPGPU)、数字信号处理器(Digita l Signa l Processor,DSP)、专用集成电路(App l icat ion Specific Integrated Ci rcu it,ASIC)、现场可编程门阵列(Fie ld Programmab le Gate Array,FPGA)或者其他可编程逻辑器件,还可以是微处理器或其他常规处理器。

本申请实施例还提出一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。计算机可读存储介质可以是易失性或非易失性计算机可读存储介质。

本申请实施例还提出一种电子设备,包括存储器以及执行上文所述的硬件队列调度方法的处理器。电子设备可以被提供为电脑、手机、服务器、车载设备或其它形态的设备。

电子设备包括如上所述的处理器,以及存储器(用于存储可由处理器执行的指令,例如应用程序、驱动程序,甚至操作系统的程序指令)。处理组件被配置为执行存储器存储的计算机可读指令,以实现上述的方法。

可选的,电子设备还可以包括更多组件,例如电源组件、有线或无线网络接口、输入输出接口。电子设备的示例性组件不应理解为对本申请的限制。

本申请实施例还提供了一种计算机程序产品,包括用于实现上述方法的软件功能模块,当这些软件功能模块对应的计算机可读的程序指令在电子设备的处理器中运行时,执行上述的方法。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分(实现原理及产生的技术效果)互相参见即可。

以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。

技术分类

06120115921558