CN116107635A - 命令分发器、命令分发方法、调度器、芯片、板卡、设备 - Google Patents
命令分发器、命令分发方法、调度器、芯片、板卡、设备 Download PDFInfo
- Publication number
- CN116107635A CN116107635A CN202310189842.5A CN202310189842A CN116107635A CN 116107635 A CN116107635 A CN 116107635A CN 202310189842 A CN202310189842 A CN 202310189842A CN 116107635 A CN116107635 A CN 116107635A
- Authority
- CN
- China
- Prior art keywords
- command
- command queue
- queue
- stream
- 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.)
- Pending
Links
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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本公开实施例提供一种命令分发器、命令分发方法、调度器、芯片、板卡、设备,所述命令分发器包括:调度器,第一命令队列,第二命令队列和仲裁器;所述调度器,用于获取命令流,所述命令流中命令的数量大于所述第一命令队列可缓存的命令的总数;在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到所述第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中;所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
Description
技术领域
本公开涉及芯片技术领域,尤其涉及命令分发器、命令分发方法、调度器、芯片、板卡、设备。
背景技术
目前,在对命令流中的命令进行分发时,一般是通过主机将命令流下拉到设备端的命令队列中,再由设备端的命令队列将命令流中的命令分发到执行单元进行执行。命令流从主机下拉到设备端的过程将会影响命令流中的命令的执行效率,因此,有必要对命令流的下拉过程进行改进。
发明内容
第一方面,本公开实施例提供一种命令分发器,所述命令分发器包括:调度器,第一命令队列,第二命令队列和仲裁器;所述调度器,用于获取命令流,所述命令流中命令的数量大于所述第一命令队列可缓存的命令的总数;在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到所述第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中;所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
在一些实施例中,所述调度器,用于:在所述第一命令队列处于非阻塞状态的情况下,将所述命令流中的命令发送到所述第一命令队列,直到所述第一命令队列存满。
在一些实施例中,在满足以下任一条件的情况下,所述第一命令队列处于阻塞状态:所述第一命令队列向所述仲裁器发送已存储的命令,且尚未发送完成;所述第一命令队列对所述调度器下拉的命令进行存储,且已存储的命令的总数达到所述第一命令队列可存储的命令的数量上限。
在一些实施例中,在满足以下条件的情况下,所述第一命令队列处于准备状态:所述第一命令队列向所述仲裁器发送已存储的命令,且已发送的命令的数量达到预设的数量阈值。
在一些实施例中,所述第一命令队列中存储有第一标志位,用于表征所述第一命令队列是否处于阻塞状态;所述调度器,用于:读取所述第一标志位;基于所述第一标志位确定所述第一命令队列是否处于阻塞状态。
在一些实施例中,所述第一命令队列中存储有第二标志位,用于表征所述第一命令队列是否处于准备状态;所述调度器,用于:读取所述第二标志位;基于所述第二标志位确定所述第一命令队列是否处于准备状态。
在一些实施例中,所述命令流的数量、所述第一命令队列的数量和所述第二命令队列的数量均大于1,每个命令流对应于一个第一命令队列和一个第二命令队列;所述调度器,用于:在一个命令流对应的第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到所述命令流对应的第二命令队列,并在所述命令流对应的第一命令队列处于准备状态的情况下,将所述命令流对应的第二命令队列中的命令下拉到所述命令流对应的第一命令队列中。
在一些实施例中,所述调度器中存储有所述第一命令队列和所述第二命令队列之间的对应关系;所述调度器,用于:获取所述第一命令队列的标识信息;基于所述第一命令队列的标识信息和所述对应关系,将所述命令流中的至少部分命令下拉到所述第二命令队列。
在一些实施例中,所述第一命令队列的标识信息与所述命令流的存储地址关联存储于环形缓存器的目标元素中;所述调度器,用于:从所述目标元素中读取所述存储地址和所述标识信息;基于所述存储地址获取所述命令流,并基于所述第一命令队列的标识信息和所述对应关系,将所述命令流中的至少部分命令下拉到所述第二命令队列。
在一些实施例中,所述调度器,用于:记录所述第二命令队列中的命令的数量以及所述第二命令队列中已下拉到所述第一命令队列的命令的偏移量;基于所述数量和所述偏移量,将所述第二命令队列中的命令下拉到所述第一命令队列中。
在一些实施例中,所述调度器,用于:在将所述第二命令队列中的至少一个命令下拉到所述第一命令队列之后,对所述数量和所述偏移量进行更新;和/或,在所述命令流中被下拉到所述第二命令流的命令未被全部发送到所述第一命令队列,且所述命令流中包括至少一个未被下拉到所述第二命令队列的命令的情况下,将所述命令流中未被下拉到所述第二命令队列的命令下拉到所述命令流中已存入所述第二命令队列的最后一个命令之后,并更新所述数量和所述偏移量。
在一些实施例中,所述命令流包括至少两个子命令流,每个子命令流包括至少一个命令,且不同的子命令流的存储地址分别存储在环形缓存器中不同的目标元素中;所述调度器,用于:按照各个子命令流在所述命令流中的位置关系,依次从各个目标元素中获取同一命令流中各个子命令流的存储地址,并从获取的存储地址中获取所述命令流中的各个子命令流;在所述第一命令队列处于阻塞状态的情况下,依次将所述命令流中各个子命令流的命令下拉到对应于所述命令流的第二命令队列中。
第二方面,本公开实施例提供一种命令分发器,所述命令分发器包括:调度器,多个第一命令队列,以及仲裁器;所述调度器,用于获取多个命令流,并基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
在一些实施例中,在所述多个命令流中包括存在依赖关系的至少两个命令流的情况下,所述目标下拉策略为第一下拉策略,所述第一下拉策略用于指示将所述至少两个命令流下拉到相同的第一命令队列。
在一些实施例中,所述至少两个命令流存储在相同的命令流缓存器中,所述命令流缓存器与所述第一命令队列一一对应;所述调度器,用于:在所述目标下拉策略为所述第一下拉策略的情况下,将所述至少两个命令流下拉到与用于存储所述至少两个命令流的命令流缓存器对应的第一命令队列。
在一些实施例中,在所述多个命令流中不包括存在依赖关系的命令流的情况下,所述下拉策略为第二下拉策略,所述第二下拉策略用于指示所述多个命令流中的任意两个命令流能够下拉到不同的第一命令队列。
在一些实施例中,不同的下拉策略对应不同的策略标识;所述策略标识存储在所述调度器的寄存器中;或者所述策略标识由所述调度器从环形缓存器的元素中读取。
在一些实施例中,每个第一命令队列对应于一个第二命令队列;所述调度器,用于:在一个第一命令队列处于非阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列,直到所述第一命令队列存满,或者待下拉到所述第一命令队列的命令流中的全部命令均被下拉到所述第一命令队列;在一个第一命令队列处于阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列对应的第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第一命令队列对应的第二命令队列中的命令下拉到所述第一命令队列中。
第三方面,本公开实施例提供一种命令分发方法,所述方法包括:获取命令流,所述命令流中命令的数量大于第一命令队列可缓存的命令的总数;在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到第二命令队列;在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中,以使仲裁器从所述第一命令队列获取命令,并对获取的命令进行分发。
第四方面,本公开实施例提供一种命令分发方法,所述方法包括:获取多个命令流;基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;所述第一命令队列中的命令用于发送到仲裁器,以使所述仲裁器对接收到的命令进行分发。
第五方面,本公开实施例提供一种调度器,用于执行本公开任一实施例所述的方法。
第六方面,本公开实施例提供一种芯片,所述芯片包括本公开任一实施例所述的调度器,或者包括本公开任一实施例所述的命令分发器。
第七方面,本公开实施例提供一种板卡,所述板卡包括封装有至少一个如本公开任一实施例所述芯片的封装结构。
第八方面,本公开实施例提供一种电子设备,所述电子设备包括本公开任一实施例所述的芯片,或者包括本公开任一实施例所述的板卡。
第九方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开任一实施例所述的方法。
本公开实施例将第二命令队列作为第一命令队列的扩展命令队列,在第一命令队列因存满或者处于非空闲状态而无法将命令流下拉到第一命令队列的情况下,调度器仍可以将命令流下拉到第二命令队列中,这样,主机下发命令流的过程不会被堵塞,从而提高了命令下发效率。
本公开实施例设置了命令流的多个下拉策略,并根据实际需求从多个下拉策略中选择合适的目标下拉策略来将获取的多个命令流下拉到第一命令队列,使得命令流的下拉策略与应用场景相匹配,从而提高了命令流的下拉效率。
应当理解,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
图1是本公开实施例的命令分发器的示意图。
图2是本公开实施例的环形缓存器的示意图。
图3是本公开实施例的写指针的示意图。
图4A和图4B分别是本公开实施例的命令流的下拉过程的示意图。
图5是本公开实施例的第二命令队列中的偏移量的示意图。
图6是本公开实施例的不同子命令流的存储地址在环形缓存器中的存储方式的示意图。
图7是本公开实施例的不同子命令流中的命令在第二命令队列中的存储方式的示意图。
图8A是本公开实施例的整体架构的示意图。
图8B是本公开实施例的整体流程图。
图9是本公开实施例的命令分发方法的流程图。
图10是本公开另一实施例的命令分发方法的流程图。
图11是本公开实施例的板卡的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
目前,在对命令流(stream)中的命令(kernel)进行分发时,一般是通过主机将命令流下发到设备端的命令队列中,再由设备端的命令队列将命令流中的命令分发到执行单元进行执行。在设备端可以采用一个或多个命令队列(Stream Queue,SQ)进行命令分发。在采用多个SQ的情况下,各个SQ可以并行地进行命令分发,以提高命令分发效率;相应地,主机采用一个或多个命令流缓存器(stream buffer,sbuf),每个sbuf中的命令执行要求保序,且在采用多个sbuf的情况下,不同sbuf的kernel可以并行下发。所以,需要主机的sbuf与设备端的SQ一一对应来确保kernel运行顺序的正确性。相关技术中通过主机直接将命令下发到设备端的SQ中,在该方案中,主机每下发一个命令到设备端,都需要通知设备端当前下发的命令需要存储到哪个SQ中,这会导致主机和设备端之间的交互比较频繁,从而导致命令下发效率降低。
为了解决主机和设备端之间交互频繁的问题,可以采用生产者消费者模型,即主机将需要下发的命令的信息存入环形缓存器(ring buffer)的元素中,由设备端解析ringbuffer的元素,从而按顺序完成命令包的下拉。这种方案虽然能够减少主机和设备端之间的交互,但是,会导致主机下发命令流的过程被阻塞,进而降低命令下发效率。例如,在命令流中命令的数量大于SQ中可换成的命令的总数的情况下,命令流中的命令将分多次被下拉到SQ中。在SQ被存满后,需要等待SQ将已存储的命令全部分发出去(即SQ处于空闲状态),才能将命令流中剩余的命令再次下发到SQ中,从而导致主机下发命令流的过程被阻塞。上述现象也称为ring buffer阻塞。
基于此,本公开实施例提供一种命令分发器,参见图1,所述命令分发器包括:
调度器101,第一命令队列102,第二命令队列103和仲裁器104;
调度器101,用于获取命令流,命令流中命令的数量大于第一命令队列102可缓存的命令的总数;在第一命令队列102处于阻塞状态的情况下,将命令流中的至少部分命令下拉到第二命令队列103,并在第一命令队列102处于准备状态的情况下,将第二命令队列103中的命令下拉到第一命令队列102中;
仲裁器104,用于从第一命令队列102获取命令,并对获取的命令进行分发。
本公开实施例的命令分发器可以设置在设备端。命令流可以存储在主机的命令流缓存器(sbuf)中。命令流的数量可以大于或等于1,不同的命令流可以存储在命令流缓存器中不同的存储地址下。各个命令流中包括的命令的数量可以相等,也可以不相等。为了便于描述,下面以每个命令流均包括v(v为正整数)个命令为例,对本公开实施例的方案进行说明。
在命令流的数量为k的情况下,第一命令队列102的数量和第二命令队列103的数量也可以是k,每个第一命令队列102对应于一个命令流,且每个第二命令队列103对应于一个命令流,即,每个第一命令队列102对应于一个第二命令队列103。
命令流的存储地址可以记录在主机中除命令流缓存区以外的另一个缓存区域(例如,环形缓存器)中。环形缓存器可以包括多个元素(ring entry),每个元素可以用于记录一个存储地址。每个元素均可以是环形缓存器中大小相等的一块子区域,假设环形缓存器的大小为1MB,每个元素的大小为16B,则环形缓存器中共可以包括216个元素,可以将其中的一个或多个元素用于记录存储地址。主机可以依次将各个命令流的存储地址写入环形缓存器中的元素,参见图2,假设环形缓存器中的各个元素分别记为P1,P2,……,Pm(m为正整数),各个命令流分别记为stream1,stream2,……streamk(k为正整数),则可以将stream1的存储地址记录在元素P1中,将stream2的存储地址记录在元素P2中,以此类推。此外,环形缓存器中的元素还可以用于记录命令流被写入的第一命令队列102的标识信息。不同的命令流可以写入不同的第一命令队列102。除了记录命令流的存储地址和第一命令队列102的标识信息之外,环形缓存器中的元素还可以用于记录其他信息,此处不再一一列举。为了便于描述,将一个元素中存储的各项信息的集合称为一组数据。
调度器101可以在一个命令流对应的第一命令队列102处于阻塞状态的情况下,将命令流中的至少部分命令下拉到命令流对应的第二命令队列103,并在命令流对应的第一命令队列102处于准备状态的情况下,将命令流对应的第二命令队列103中的命令下拉到命令流对应的第一命令队列102中。上述过程可以基于环形缓存器中的元素中存储的命令流的存储地址和第一命令队列102的标识信息实现。
例如,假设各个第一命令队列102分别记为SQ1,SQ2,……,SQk,各个第二命令队列103分别记为ESQ1,ESQ2,……,ESQk,SQ1和ESQ1对应,且均对应于命令流stream1,SQ2和ESQ2对应,且均对应于命令流stream2,依次类推,则可以将SQ1的标识信息写入上述元素P1,以便使调度器101从元素P1中获取命令流stream1的存储地址,并将命令流stream1中的一部分命令下拉到第一命令队列102SQ1,将命令流stream1中的另一部分命令下拉到第二命令队列103ESQ1,或者将命令流stream1中的全部命令均下拉到第二命令队列103ESQ1;还可以将SQ2的标识信息写入上述元素P2,以便使调度器101从元素P2中获取命令流stream2的存储地址,并将命令流stream2中的一部分命令下拉到第一命令队列102SQ2,将命令流stream2中的另一部分命令下拉到第二命令队列103ESQ2,或者将命令流stream2中的全部命令均下拉到第二命令队列103ESQ2;以此类推。
在一些实施例中,第一命令队列102中存储有第一标志位,用于表征第一命令队列102是否处于阻塞状态。调度器101可以读取所述第一标志位;基于所述第一标志位确定第一命令队列102是否处于阻塞状态。所述第一标志位可以存储在第一寄存器中,该第一寄存器可以通过硬件方式连接到调度器101,从而提高第一标志位的获取效率。可选地,第一标志位可以是一个1比特的二进制数,例如,用“1”表示阻塞状态,用“0”表示非阻塞状态。
在一些实施例中,调度器101中可以存储第一命令队列102和第二命令队列103之间的对应关系。这样,调度器101就可以在获取到第一命令队列102的标识信息之后,基于第一命令队列102的标识信息和所述对应关系,将命令流中的至少部分命令下拉到第二命令队列103。
进一步地,调度器101可以从环形缓存器的任意一个目标元素中读取所述存储地址和所述标识信息;基于所述存储地址获取命令流,并基于第一命令队列102的标识信息和所述对应关系,将命令流中的至少部分命令下拉到第二命令队列103。
第二命令队列103可以采用随机存取存储器(Random Access Memory,RAM)实现。在一些实施例中,可以基于应用场景确定第二命令队列103的长度,例如,第二命令队列103的长度可以大于或等于该应用场景下命令流的最大长度,这样,能够通过第一命令队列102和第二命令队列103对一个命令流中的全部命令进行存储。当然,实际应用不限于此。即便第二命令队列103仅能存下一个命令流中的部分命令,但由于采用了第二命令队列103来对第一命令队列102的容量进行了扩展,因此,相比于相关技术,本公开实施例的方案仍然能够提高命令下发效率。
在一些实施例中,第二命令队列103可以包括多个第二子队列,各个第二子队列可以有不同的存储优先级。其中,在第一命令队列102处于阻塞状态的情况下,调度器101可以基于各个第二子队列的优先级将命令流中的命令下拉到各个第二子队列中。假设各个第二子队列分别记为E1,E2,……,Et,且E1,E2,……,Et的存储优先级依次降低,调度器101可以先将命令流中的命令下拉到优先级最高的第二子队列(即E1),在优先级最高的第二子队列E1存满的情况下,再将命令流中剩余的命令下拉到优先级次高的第二子队列E2,以此类推,直到命令流中的命令全部存入第二命令队列103。
在上述实施例中,每组数据均可由主机写入环形缓存器的元素中。由于主机只需要将第一命令队列102的标识信息写入环形缓存器的元素,调度器101即可根据实际情况自动选择将命令流下拉到第一命令队列102或者第二命令队列103,因此,上述过程主机是无感知的。即便第一命令队列102阻塞,主机也可以继续无阻滞地进行命令分发。
在一些实施例中,环形缓存器中还可以包括一个写指针,用于指向环形缓存器中下一个待写入的元素。主机每次可以将一组或多组数据写入环形缓存器,每个元素被写入一组数据。假设主机一次向环形缓存器写入r(r为正整数)组数据,则指针的取值增加r。在环形缓存器中有新的元素被写入数据的情况下,调度器101可以基于写入数据前后指针的取值,确定从哪个或哪些元素中获取数据。具体来说,主机可以预先将环形缓存器的基地址写入调度器101,调度器101可以根据该基地址以及写入数据前后指针的取值各自对应的偏移量,确定数据被写入到了哪个或哪些元素中。参见图3,假设写指针初始的位置如图中Pointer1所示,即指向元素P1,在主机向环形缓存器写入3组数据(r=3)之后,写指针的取值增加3,此时写指针的位置如图中Pointer2所示,即指向元素P2。
在确定被写入数据的元素之后,调度器101可以基于该元素中的存储地址读取命令流,并将命令流下拉到第一命令队列102或第二命令队列103中。仲裁器104可以仅从第一命令队列102获取命令,并将从第一命令队列102获取的命令分发到执行单元上进行执行。所述执行单元可以是运算单元,例如,加法单元、乘法单元、卷积处理单元等,或者,也可以是其他类型的执行单元,本公开对此不做限制。这样,仲裁器104对第二命令队列103的存在也是无感知的,从主机端的命令被下发到命令队列,到命令队列中的命令被发送到仲裁器104,再到仲裁器104进行命令分发的整个过程可以无阻滞地进行,提高了命令分发效率。下面结合图4A和图4B对调度器101选择第一命令队列102或第二命令队列103的具体策略进行举例说明。在图4A和图4B中,假设不同的命令流分别存储在不同的命令流缓存器中,为了简洁,图中仅画出了四个命令流缓存器,分别记为sbuf1,sbuf2,sbuf3和sbuf4,并假设命令流在sbuf1,sbuf2,sbuf3和sbuf4中的存储地址对应记录在元素P1,P2,P3和P4中,第一命令队列102的数量和第二命令队列103的数量均假设为32。各个第一命令队列102分别记为SQ1,SQ2,……,SQ32各个第二命令队列103分别记为ESQ1,ESQ2,……,ESQ32。
在一些实施例中,调度器101可以基于第一命令队列102的状态确定将命令流下拉到第一命令队列102或第二命令队列103。其中,第一命令队列102的状态包括阻塞状态和非阻塞状态。在第一命令队列102处于阻塞状态的情况下,调度器101不能从主机获取命令流;在第一命令队列102处于非阻塞状态的情况下,调度器101可以从主机获取命令流。进一步地,阻塞状态包括非空闲(busy)状态和存满状态。其中,第一命令队列102处于非空闲状态是指第一命令队列102在向仲裁器104发送命令的过程中,第一命令队列102中包括至少一个未下发到仲裁器104的命令。第一命令队列102处于存满状态是指第一命令队列102在对调度器101下拉的命令进行存储的过程中,第一命令队列102中已存储的命令的数量达到第一命令队列102可缓存的命令的总数。相对地,非阻塞状态包括空闲(idle)状态和未存满状态。其中,第一命令队列102处于空闲状态是指第一命令队列102中的命令均已下发到仲裁器104。第一命令队列102处于未存满状态是指第一命令队列102中已存储的命令的数量小于第一命令队列102可缓存的命令的总数。
在第一命令队列102处于非阻塞状态的情况下,调度器101可以先将命令流中的命令发送到第一命令队列102,直到第一命令队列102处于存满,再将命令流中的命令发送到第二命令队列103。在第一命令队列102处于阻塞状态的情况下,调度器101可以直接将命令流中的至少部分命令下拉到第二命令队列103。
具体来说,在第一命令队列102处于空闲状态的情况下,调度器101可以从主机端将命令流下拉到第一命令队列102中。而在第一命令队列102处于非空闲状态的情况下,调度器101可以将命令流中的命令下拉到第二命令队列103中。在将命令流下拉到第一命令队列102的情况下,由于命令流中命令的数量大于第一命令队列102可缓存的命令的总数,因此,在第一命令队列102存满的情况下,命令流中仍存在至少一个命令(称为命令流中的溢出部分)尚未下拉到第一命令队列102中。调度器101可以将溢出部分下拉到第二命令队列103中。
例如,在图4A中,假设各个第一命令队列的初始状态均为空闲状态,调度器101可以先根据元素P1,P2,P3和P4中记录的存储地址和第一命令队列102的标识信息,将sbuf1,sbuf2,sbuf3和sbuf4中的命令流对应下拉到SQ1,SQ2,SQ3和SQ4中。假设在将sbuf1中的命令流中的部分命令下拉到SQ1之后,SQ1存满,则sbuf1中的命令流的溢出部分下拉到ESQ1中。
又例如,在图4B中,假设SQ1和SQ4均处于非空闲状态,则并不会将sbuf1中的命令流下拉到SQ1中,或者将sbuf4中的命令下拉到SQ4中,而是直接将sbuf1中的命令流下拉到ESQ1中,并将sbuf4中的命令流下拉到ESQ4中。将sbuf2中的命令流下拉到SQ2和ESQ2的过程与图4A中下拉sbuf1中命令流的过程类似,即,先将sbuf2中的命令流下拉到SQ2,在SQ2存满之后,再将溢出部分下拉到ESQ2。同理,先将sbuf3中的命令流下拉到SQ3中,且由于SQ3尚未存满,因此,无需将sbuf3中的命令流下拉到ESQ3中。
其中,调度器101可以按照命令流中的各个命令在命令流中的位置关系,将各个命令依次下拉到第一命令队列102或第二命令队列103中,以保证同一命令流中各个命令的先后顺序。假设命令流中的命令依次为kernel1,kernel2,……,kernelv,则在将命令流中的命令全部下拉到第二命令队列103的情况下,第二命令队列103中存储的命令也依次为kernel1,kernel2,……,kernelv。在将命令流中的部分命令下拉到第一命令队列102,且将命令流中的溢出部分下拉到第二命令队列103的情况下,第一命令队列102中存储的命令依次为kernel1,kernel2,……,kernelδ,第二命令队列103中存储的命令依次记为kernelδ+1,kernelδ+2,……,kernelv,δ为小于v的正整数。
上述实施例将第二命令队列103作为第一命令队列102的扩展命令队列,在第一命令队列102因存满或者处于非空闲状态而无法将命令流下拉到第一命令队列102的情况下,调度器101仍可以将命令流下拉到第二命令队列103中,这样,主机下发命令流的过程不会被堵塞,从而提高了命令下发效率。
进一步地,第一命令队列102的状态还可以包括准备状态。其中,在第一命令队列102向所述仲裁器104发送已存储的命令的过程中,若第一命令队列102中已发送的命令的数量达到预设的数量阈值,则第一命令队列102处于准备状态;在第一命令队列102向所述仲裁器104发送已存储的命令的过程中,若第一命令队列102中已发送的命令的数量未达到的数量阈值,则第一命令队列102处于非准备状态。所述数量阈值可以根据实际需要设置为大于或等于0的值,其中,所述数量阈值既可以设置为一个绝对数量,例如,5,又可以设置为一个相对数量,例如,第一命令队列102可缓存的命令的总数的50%。由于命令流中的命令在第二命令队列103中也是按顺序存储的,因此,可以直接按照各个命令在第二命令队列103中的存储顺序,将第二命令队列103中的各个命令发送到第一命令队列102。接着前面的例子,可以将第二命令队列103中存储的命令kδ+1,kδ+2,……,kv依次发送到第一命令队列102。
第二命令队列103中的命令可以根据实际情况,一次性发送到第一命令队列102,或者分批次发送到第一命令队列102。在第二命令队列103分批次将存储的命令发送到第一命令队列102的情况下,每个批次发送给第一命令队列102的命令的数量可配置。在一些实施例中,调度器101可以包括控制寄存器,用于存储控制状态信息,所述控制状态信息可以包括启用状态和未启用状态。可以通过1比特的二进制数来表示所述控制状态信息,例如,将启用状态表示为“1”,将未启用状态表示为“0”。在从第二命令队列103发送到第一命令队列102的命令的数量达到预先配置的数量的情况下,调度器101可以将所述控制状态信息设置为启用状态,第二命令队列103可以响应于所述控制状态信息被设置为启用状态,开始向第一命令队列102发送命令,直到本次发送的命令的数量达到某个数量阈。
进一步地,所述命令分发器还包括计数器,用于对从第二命令队列103发送到第一命令队列102的命令的数量进行计数,第二命令队列103每将一个命令发送到第一命令队列102,使能该计数器将计数值加1。调度器101可以读取计数值,在计数值达到所述数量阈值的情况下,将所述控制状态信息设置为未启用状态,并清空计数器的计数值。第二命令队列103可以响应于所述控制状态信息被设置为未启用状态,停止向第一命令队列102发送命令。
在一些实施例中,第一命令队列102中存储有第二标志位,用于表征第一命令队列102是否处于准备状态。调度器101可以读取所述第二标志位;基于所述第二标志位确定第一命令队列102是否处于准备状态。所述第二标志位可以存储在第二寄存器中,该第二寄存器可以通过硬件方式连接到调度器101,从而提高第二标志位的获取效率。可选地,第二标志位可以是一个1比特的二进制数,例如,用“1”表示准备状态,用“0”表示非准备状态。
为了便于确定需要发送到第一命令队列102的命令在第二命令队列103中的位置,调度器101可以记录第二命令队列103中的命令的数量以及第二命令队列103中已下拉到第一命令队列102的命令的偏移量;基于所述数量和所述偏移量,将第二命令队列103中的命令下拉到第一命令队列102中。偏移量可以用于表征命令流中下一个需要下拉到第一命令队列102的命令与命令流中存入第二命令队列103的首个命令之间的距离。假设命令流中存入第二命令队列103的首个命令的存储地址为A0,下一个需要下拉到第一命令队列102的命令为第二命令队列103中第i个命令,则偏移量为i,根据该偏移量可以得到第二命令队列103中下一个需要下拉到第一命令队列102的命令(即第i个命令)的存储地址为A0+i*x,其中,x为每个命令在第二命令队列103中的存储位宽。每将第二命令队列103中的一个命令下拉到第一命令队列102中,可以将偏移量加1。在第二命令队列103中的命令的数量为0的情况下,可以认为第二命令队列103中的命令已全部被下拉到第一命令队列102中。
参见图5,假设同一命令流中被下发到第二命令队列103中的命令有5个,按照下发到第二命令队列的先后顺序依次记为kernel1,kernel2,kernel3,kernel4和kernel5,并假设kernel1和kernel2已经被发送到第一命令队列102,则当前的偏移量为2,表示该命令流中下一个将要从第二命令队列103发送到第一命令队列102的命令与该命令流中第一个被下发到第二命令队列103的命令(即kernel1)之间的距离为2。由于kernel1和kernel2已经被发送到第一命令队列102,因此,第二命令队列103中的命令的数量为3。
调度器101在将第二命令队列103中的至少一个命令下拉到第一命令队列102之后,可以对所述数量和所述偏移量进行更新。例如,假设第二命令队列103中原来存储的命令的数量为M,在调度器101将第二命令队列103中的△M个命令下拉到第一命令队列102之后,第二命令队列103中存储的命令的数量更新为M-△M,偏移量更新为原偏移量与△M之和。
调度器101还可以在一个命令流中被下拉到第二命令流的命令未被全部发送到第一命令队列102,且该命令流中包括至少一个未被下拉到第二命令队列103的命令的情况下,将该命令流中未被下拉到第二命令队列103的命令下拉到该命令流中已存入第二命令队列103的最后一个命令之后,并更新第二命令队列103中的数量。进一步地,如果在上述过程中,还将第二命令队列103中的命令发送到第一命令队列102,则同时更新第二命令队列103中的偏移量。例如,仍假设命令流中的命令的数量为v,依次记为kernel1,kernel2,……,kernelv,并假设从该命令流中的第δ+1个命令开始,将该命令流中的命令下拉到第二命令队列103中。如果当前被下拉到第二命令队列103中的命令包括kernelδ+1,kernelδ+2,……,kernelv-j,j为正整数,则该命令流中已存入第二命令队列103的最后一个命令为kernelv-j,可以将kernelv-j+1,kernelv-j+2,……,kernelv依次存入第二命令队列103中的kernelv-j之后,并根据第二命令队列103中当前的命令数量和下一个待发送到第一命令队列102中的命令的位置,更新所述数量和偏移量。
在一些实施例中,命令流包括至少两个子命令流,每个子命令流包括至少一个命令,且不同的子命令流的存储地址分别存储在环形缓存器中不同的目标元素中。例如,可以将命令流stream1拆分成子命令流stream11,stream12,……,stream1h,将子命令流stream11,stream12,……,stream1h分别存入不同的存储地址,并将子命令流stream11的存储地址记录在环形缓存器中的目标元素P11中,将子命令流stream12的存储地址记录在环形缓存器中的目标元素P12中,以此类推。图6示出了h等于3的情况,其中,子命令流stream11,stream12和stream13的存储地址分别存储在目标元素P11、P12和P13中。
在此基础上,调度器101可以按照各个子命令流在命令流中的位置关系,依次从各个目标元素中获取同一命令流中各个子命令流的存储地址,并从获取的存储地址中获取命令流中的各个子命令流;在第一命令队列102处于阻塞状态的情况下,依次将命令流中各个子命令流的命令下拉到对应于命令流的第二命令队列103中。拆分之后,调度器101可以从各个目标元素P1,P2,……Ph中获取对应子命令流stream11,stream12,……,stream1h的存储地址,从获取的存储地址中获取子命令流stream11,stream12,……,stream1h,并将这些子命令流中的命令先下拉到对应于该命令流的第一命令队列102中,再将溢出部分下拉到第二命令队列103中,或者全部下拉到该命令流对应的第二命令队列103中。
如图7所示,以子命令流stream11,stream12,……,stream1h中的命令均下拉到第二命令队列103中为例,假设h的取值为3,即,命令流stream1中包括的子命令流的数量为3,并假设每个子命令流中均包括5个命令。如图中所示,三个子命令流stream11,stream12和stream13中的命令均被下拉到同一个第二命令队列103(即ESQ1),且子命令流stream11,stream12和stream13中的各个命令在ESQ1中的顺序与这些命令在命令流stream1中的顺序相同。
在相关技术中,将同一个命令流拆分成多个子命令流之后,可能无法保持该命令流中各个命令之间的依赖关系。例如,假设将命令流stream1拆分成子命令流stream11,stream12,……,stream1h,子命令流stream11中包括命令kernel5:c=a+b,子命令流Stream12中包括命令kernel20:d=c+1,即。在拆分前的命令流stream1中,由于子命令流stream11在子命令流stream12之前,因此,可以保证kernel5在kernel20之前被执行,即,能够保证kernel5与kernel20之间的依赖关系。然而,拆分以后,kernel5和kernel20会被下拉到不同的命令队列中,因此,无法再保证kernel5与kernel20之间的依赖关系。本公开实施例通过采用上述方案,能够将同一命令流中的各个子命令流下拉到同一个第一命令队列102或下拉到同一个第二命令队列103中,从而保证了同一命令流中各个命令之间的依赖关系。在一些实施例中,环形缓存器中的各个目标元素中还可以包括子命令流所属的命令流的标识信息,调度器101可以根据该标识信息确定各个子命令流是否属于同一命令流。
本公开实施例的整体架构如图8A所示,整体架构分为主机(host)端和设备(device)端,ring buffer位于主机端,由ring buffer的驱动单元(ring buffer server)驱动;调度器、SQ、ESQ和dispatcher均位于设备端。主机端的上层软件将命令流stream插入到sbuf中,命令流中包括一个或多个命令,各个命令可以封装成命令包。P1,P2,……,Pm等为单个ring entry(简称entry),在每个entry中会存在指向命令流在sbuf中的存储地址的指针。当有新的stream插入到sbuf时,会触发一个中断信号,用于使设备端下拉命令流,然后设备端从ring buffer中获取新插入的entry并解析,以获取entry中记录的SQ ID(即第一命令队列的标识信息)和sbuf地址(即命令流的存储地址),当SQ空闲的时候,将命令包直接下拉到SQ中,溢出部分下拉到ESQ中;当SQ非空闲的时候,将命令包直接下拉到ESQ中,当第一命令队列处于准备状态时,触发ESQ预取中断,从而将ESQ中的命令包搬移到SQ中。仲裁器解析命令包,将各命令包分发到目的运算单元中,运算单元接收命令包后按照顺序执行,在执行结束后返回ACK给仲裁器。在命令包下发时,如果SQ非空,则将命令包直接下拉到ESQ中,设备侧的调度器维护下拉位置及结构,保证不堵塞ring,主机的上层软件可以继续插入新的stream。ESQ可以位于高带宽存储器(High Bandwidth Memory,HBM)中,当触发ESQ预取中断时,基于直接存储器访问(Direct Memory Access,DMA)寄存器(即上述第二寄存器)中的第二标志位,将ESQ中的命令包搬移到SQ中,此时需要更新ESQ中的命令包的数量及偏移量,在SQ对应的ESQ将命令包均搬移到SQ之后,ESQ维护的数量会设置为0。当ESQ中的命令包没有全部搬移到SQ时,如果此时ring有更新(即ring中新的entry被插入了信息),则继续更新到ESQ现有数据的后面,同时更新ESQ中的命令包的数量及偏移量。
由于上层软件的命令包下发没有延迟就可以继续插入新的stream,所以对于上层软件来说此动作是无感的,因此可以提升处理速度。
此外,上层软件在将stream插入到sbuf时,会存在拆分成多次下发的情况,对于同一个stream来说,其多次下发的子命令流会下发到同一个SQ中,所以根据命令分发器的保序机制,可以保证命令包顺序执行。
针对上层软件的堵塞问题,本公开实施例采用软硬件配合实现命令流调度,并且支持stream与SQ一一对应,命令流保序更高效,采用硬件加速,减少了命令流阻塞,提升了命令分发效率,减少了软件同步开销。
在一些实施例中,调度器101可以基于不同的下拉策略将获取的命令流下拉到第一命令队列102或第二命令队列103。其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列102的不同的下拉方式。在一些实施例中,所述目标下拉策略包括第一下拉策略,略用于指示将所述至少两个命令流下拉到相同的第一命令队列102。在另一些实施例中,所述目标下拉策略包括第二下拉策略,用于指示获取的任意两个命令流能够下拉到不同的第一命令队列102。
在一个第一命令队列102处于非阻塞状态的情况下,调度器101可以先基于所述下拉策略将获取的每个命令流下拉到对应的第一命令队列102,在第一命令队列102存满之后,如果一个命令流中还有剩余的命令,再将该命令流中剩余的命令下拉到第一命令队列102对应的第二命令队列103。
在一个第一命令队列102处于阻塞状态的情况下,调度器101可以基于所述下拉策略将获取的每个命令流下拉到对应的第二命令队列103,在一个第二命令队列103对应的第一命令队列102处于准备状态的情况下,再将第二命令队列103中的命令下拉到第一命令队列102。
在一些实施例中,在所述多个命令流中包括存在依赖关系的至少两个命令流的情况下,所述目标下拉策略为第一下拉策略。在这种情况下,如果所述多个命令流中包括存在依赖关系的至少两个命令流,则调度器101可以采用第一下拉策略,从而将所述至少两个命令流下拉到同一个第一命令队列。例如,假设所述多个命令流包括命令流stream1,stream2和stream3,且命令流stream1和stream2存在依赖关系,则,调度器101可以采用第一下拉策略,从而将stream1和stream2下拉到同一个第一命令队列(记为Q00),而由于stream3与stream1和stream2均不存在依赖关系,因此,调度器101可以将stream3下拉到不同于Q00的另一个第一命令队列(记为Q01)。进一步地,存在依赖关系的至少两个命令流可以存储在相同的命令流缓存器中,且命令流缓存器与第一命令队列一一对应。接着前面的例子,stream1和stream2可以存储在命令流缓存器sbuf00中,stream3可以存储在命令流缓存器sbuf01中,且sbuf00和sbuf01分别对应于第一命令队列Q00和Q01,则调度器101可以根据第一命令队列与命令流缓存器之间的对应关系,将stream1和stream2下拉到第一命令队列Q00,并将stream3下拉到第一命令队列Q01。
在另一些实施例中,在所述多个命令流中不包括存在依赖关系的命令流的情况下,所述下拉策略为第二下拉策略。在这种情况下,如果所述多个命令流中不包括存在依赖关系的至少两个命令流,则调度器101可以采用第二下拉策略,从而任意两个命令流均可以下拉到不同的第一命令队列。进一步地,不存在依赖关系的任意两个命令流均可以存储在不同的命令流缓存器中,且命令流缓存器与第一命令队列之间可以不存在一一对应关系。这样,调度器在调度时,可以将各个命令流缓存器中的命令流随机下拉到一个第一命令队列或该第一命令队列对应的第二命令队列,或者按照round robin的方式下拉到第一命令队列或该第一命令队列对应的第二命令队列,或者按照其他方式进行下拉。
在一些实施例中,不同的下拉策略对应不同的策略标识,策略标识用于对下拉策略进行唯一标识。例如,用“1”表示第一下拉策略,用“0”表示第二下拉策略。调度器可以读取策略标识,从而确定下拉策略。其中,所述策略标识可以存储在所述调度器的寄存器中,调度器101可以从寄存器中直接读取策略标识。或者,所述策略标识可以存储在环形缓存器的元素中,并由所述调度器从环形缓存器的元素中读取。
本公开实施例设置了命令流的多个下拉策略,并根据实际需求从多个下拉策略中选择合适的目标下拉策略来将获取的多个命令流下拉到第一命令队列,使得命令流的下拉策略与应用场景相匹配,从而提高了命令流的下拉效率。
在一些实施例中,本公开还提供一种命令分发器,所述命令分发器包括:
调度器,多个第一命令队列,以及仲裁器;
所述调度器,用于获取多个命令流,并基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;
所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
在一些实施例中,在所述多个命令流中包括存在依赖关系的至少两个命令流的情况下,所述目标下拉策略为第一下拉策略,所述第一下拉策略用于指示将所述至少两个命令流下拉到相同的第一命令队列。
在一些实施例中,所述至少两个命令流存储在相同的命令流缓存器中,所述命令流缓存器与所述第一命令队列一一对应;所述调度器,用于:在所述目标下拉策略为所述第一下拉策略的情况下,将所述至少两个命令流下拉到与用于存储所述至少两个命令流的命令流缓存器对应的第一命令队列。
在一些实施例中,在所述多个命令流中不包括存在依赖关系的命令流的情况下,所述下拉策略为第二下拉策略,所述第二下拉策略用于指示所述多个命令流中的任意两个命令流能够下拉到不同的第一命令队列。
在一些实施例中,不同的下拉策略对应不同的策略标识;所述策略标识存储在所述调度器的寄存器中;或者所述策略标识由所述调度器从环形缓存器的元素中读取。
在一些实施例中,每个第一命令队列对应于一个第二命令队列;所述调度器,用于:在一个第一命令队列处于非阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列,直到所述第一命令队列存满,或者待下拉到所述第一命令队列的命令流中的全部命令均被下拉到所述第一命令队列;在一个第一命令队列处于阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列对应的第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第一命令队列对应的第二命令队列中的命令下拉到所述第一命令队列中。
本公开实施例的命令分发器的结构以及调度器执行的具体步骤可以参考前述实施例,具体细节此处不再赘述。
本公开实施例还提供一种命令分发方法,如图9所示,所述方法包括:
步骤901:获取命令流,所述命令流中命令的数量大于第一命令队列可缓存的命令的总数;
步骤902:在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到第二命令队列;
步骤903:在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中,以使仲裁器从所述第一命令队列获取命令,并对获取的命令进行分发。
本公开实施例还提供一种命令分发方法,如图10所示,所述方法包括:
步骤1001:获取多个命令流;
步骤1002:基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;
其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;所述第一命令队列中的命令用于发送到仲裁器,以使所述仲裁器对接收到的命令进行分发。
上述方法可以由前述任一实施例中的命令分发器中的调度器101执行,方法实施例的具体细节可参照前述命令分发器的实施例,此处不再赘述。
本公开实施例还提供一种调度器,用于执行前述任一实施例中的方法。该调度器可用于前述任一实施例中的命令分发器中。
本公开实施例还提供一种芯片,所述芯片包括本公开任一实施例所述的调度器,或者包括权本公开任一实施例所述的命令分发器。
本公开实施例还提供一种板卡,所述板卡包括封装有至少一个如本公开任一实施例所述芯片的封装结构。
参阅图11,其提供了一种示例性的板卡,上述板卡包括上述芯片1101,还可以包括其他的部件,包括但不限于:存储器1102、接口器件1103和处理器1104。
所述存储器1102与所述芯片封装结构内的芯片1101通过总线连接,用于存储数据。所述存储器1102可以包括多组存储单元1102a,例如:DDR SDRAM(英文:Double DataRate SDRAM,双倍速率同步动态随机存储器)等,存储器1102可用于实现前述第一命令队列102和第二命令队列103。每一组所述存储单元1102a与所述芯片1101通过总线连接。
所述接口器件1103与所述芯片封装结构内的芯片1101电连接。所述接口器件1103用于实现所述芯片1101与外部设备D(例如:终端、服务器、摄像头等)之间的数据传输。在一个实施例中,所述接口器件1103可以是PCIE接口,还可以是网络接口、或者其他的接口,本公开不做限制。
所述处理器1104可以生成命令流。该命令流可以发送到芯片1101,所述芯片1101可以采用前述任一实施例的芯片,该芯片1101中的调度器在获取到命令流之后,可以采用前述实施例中所描述的方式,将命令流下拉到第一命令队列102或者第二命令队列103。
本公开实施例还提供一种电子设备,所述电子设备包括本公开任一实施例所述的芯片,或者包括本公开任一实施例所述的板卡。
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述任一实施例所述的方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机装置或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
Claims (17)
1.一种命令分发器,其特征在于,所述命令分发器包括:
调度器,第一命令队列,第二命令队列和仲裁器;
所述调度器,用于获取命令流,所述命令流中命令的数量大于所述第一命令队列可缓存的命令的总数;在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到所述第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中;
所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
2.根据权利要求1所述的命令分发器,其特征在于,所述调度器,用于:
在所述第一命令队列处于非阻塞状态的情况下,将所述命令流中的命令发送到所述第一命令队列,直到所述第一命令队列存满。
3.根据权利要求1或2所述的命令分发器,其特征在于,在满足以下任一条件的情况下,所述第一命令队列处于阻塞状态:所述第一命令队列向所述仲裁器发送已存储的命令,且尚未发送完成;所述第一命令队列对所述调度器下拉的命令进行存储,且已存储的命令的总数达到所述第一命令队列可存储的命令的数量上限;
和/或,
在满足以下条件的情况下,所述第一命令队列处于准备状态:所述第一命令队列向所述仲裁器发送已存储的命令,且已发送的命令的数量达到预设的数量阈值。
4.根据权利要求1至3任一项所述的命令分发器,其特征在于,所述第一命令队列中存储有第一标志位,用于表征所述第一命令队列是否处于阻塞状态;所述调度器,用于:
读取所述第一标志位;
基于所述第一标志位确定所述第一命令队列是否处于阻塞状态;
和/或
所述第一命令队列中存储有第二标志位,用于表征所述第一命令队列是否处于准备状态;所述调度器,用于:
读取所述第二标志位;
基于所述第二标志位确定所述第一命令队列是否处于准备状态;
和/或
所述命令流的数量、所述第一命令队列的数量和所述第二命令队列的数量均大于1,每个命令流对应于一个第一命令队列和一个第二命令队列;所述调度器,用于:
在一个命令流对应的第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到所述命令流对应的第二命令队列,并在所述命令流对应的第一命令队列处于准备状态的情况下,将所述命令流对应的第二命令队列中的命令下拉到所述命令流对应的第一命令队列中;
和/或
所述调度器中存储有所述第一命令队列和所述第二命令队列之间的对应关系;所述调度器,用于:
获取所述第一命令队列的标识信息;
基于所述第一命令队列的标识信息和所述对应关系,将所述命令流中的至少部分命令下拉到所述第二命令队列。
5.根据权利要求4所述的命令分发器,其特征在于,在所述调度器中存储有所述第一命令队列和所述第二命令队列之间的对应关系的情况下,所述第一命令队列的标识信息与所述命令流的存储地址关联存储于环形缓存器的目标元素中;所述调度器,用于:
从所述目标元素中读取所述存储地址和所述标识信息;
基于所述存储地址获取所述命令流,并基于所述第一命令队列的标识信息和所述对应关系,将所述命令流中的至少部分命令下拉到所述第二命令队列。
6.根据权利要求1至5任意一项所述的命令分发器,其特征在于,所述调度器,用于:
记录所述第二命令队列中的命令的数量以及所述第二命令队列中已下拉到所述第一命令队列的命令的偏移量;
基于所述数量和所述偏移量,将所述第二命令队列中的命令下拉到所述第一命令队列中。
7.根据权利要求6所述的命令分发器,其特征在于,所述调度器,用于:
在将所述第二命令队列中的至少一个命令下拉到所述第一命令队列之后,对所述数量和所述偏移量进行更新;
和/或,在所述命令流中被下拉到所述第二命令流的命令未被全部发送到所述第一命令队列,且所述命令流中包括至少一个未被下拉到所述第二命令队列的命令的情况下,将所述命令流中未被下拉到所述第二命令队列的命令下拉到所述命令流中已存入所述第二命令队列的最后一个命令之后,并更新所述数量和所述偏移量。
8.根据权利要求1至7任一项所述的命令分发器,其特征在于,所述命令流包括至少两个子命令流,每个子命令流包括至少一个命令,且不同的子命令流的存储地址分别存储在环形缓存器中不同的目标元素中;所述调度器,用于:
按照各个子命令流在所述命令流中的位置关系,依次从各个目标元素中获取同一命令流中各个子命令流的存储地址,并从获取的存储地址中获取所述命令流中的各个子命令流;
在所述第一命令队列处于阻塞状态的情况下,依次将所述命令流中各个子命令流的命令下拉到对应于所述命令流的第二命令队列中。
9.一种命令分发器,其特征在于,所述命令分发器包括:
调度器,多个第一命令队列,以及仲裁器;
所述调度器,用于获取多个命令流,并基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;
所述仲裁器,用于从所述第一命令队列获取命令,并对获取的命令进行分发。
10.根据权利要求9所述的命令分发器,其特征在于,在所述多个命令流中包括存在依赖关系的至少两个命令流的情况下,所述目标下拉策略为第一下拉策略,所述第一下拉策略用于指示将所述至少两个命令流下拉到相同的第一命令队列;
和/或
在所述多个命令流中包括存在依赖关系的至少两个命令流的情况下,所述目标下拉策略为第一下拉策略,所述第一下拉策略用于指示将所述至少两个命令流下拉到相同的第一命令队列;所述至少两个命令流存储在相同的命令流缓存器中,所述命令流缓存器与所述第一命令队列一一对应;所述调度器,用于:
在所述目标下拉策略为所述第一下拉策略的情况下,将所述至少两个命令流下拉到与用于存储所述至少两个命令流的命令流缓存器对应的第一命令队列。
11.根据权利要求9至10任一项所述的命令分发器,其特征在于,在所述多个命令流中不包括存在依赖关系的命令流的情况下,所述下拉策略为第二下拉策略,所述第二下拉策略用于指示所述多个命令流中的任意两个命令流能够下拉到不同的第一命令队列;
和/或
不同的下拉策略对应不同的策略标识;所述策略标识存储在所述调度器的寄存器中;或者,所述策略标识由所述调度器从环形缓存器的元素中读取;
和/或
每个第一命令队列对应于一个第二命令队列;所述调度器,用于:
在一个第一命令队列处于非阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列,直到所述第一命令队列存满,或者待下拉到所述第一命令队列的命令流中的全部命令均被下拉到所述第一命令队列;
在一个第一命令队列处于阻塞状态的情况下,将待下拉到所述第一命令队列的命令流中的至少部分命令下拉到所述第一命令队列对应的第二命令队列,并在所述第一命令队列处于准备状态的情况下,将所述第一命令队列对应的第二命令队列中的命令下拉到所述第一命令队列中。
12.一种命令分发方法,其特征在于,所述方法包括:
获取命令流,所述命令流中命令的数量大于第一命令队列可缓存的命令的总数;
在所述第一命令队列处于阻塞状态的情况下,将所述命令流中的至少部分命令下拉到第二命令队列;
在所述第一命令队列处于准备状态的情况下,将所述第二命令队列中的命令下拉到所述第一命令队列中,以使仲裁器从所述第一命令队列获取命令,并对获取的命令进行分发;或者
获取多个命令流;
基于从多个下拉策略中选择的目标下拉策略,将所述多个命令流下拉到所述多个第一命令队列中的至少一个命令队列;
其中,不同的下拉策略用于指示所述多个命令流下拉到所述多个第一命令队列的不同的下拉方式;所述第一命令队列中的命令用于发送到仲裁器,以使所述仲裁器对接收到的命令进行分发。
13.一种调度器,其特征在于,用于执行权利要求12所述的方法。
14.一种芯片,其特征在于,所述芯片包括权利要求13所述的调度器,或者包括权利要求1至11任意一项所述的命令分发器。
15.一种板卡,其特征在于,所述板卡包括封装有至少一个如权利要求14所述芯片的封装结构。
16.一种电子设备,其特征在于,所述电子设备包括权利要求14所述的芯片,或者包括权利要求15所述的板卡。
17.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求12所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310189842.5A CN116107635A (zh) | 2023-02-28 | 2023-02-28 | 命令分发器、命令分发方法、调度器、芯片、板卡、设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310189842.5A CN116107635A (zh) | 2023-02-28 | 2023-02-28 | 命令分发器、命令分发方法、调度器、芯片、板卡、设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116107635A true CN116107635A (zh) | 2023-05-12 |
Family
ID=86263809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310189842.5A Pending CN116107635A (zh) | 2023-02-28 | 2023-02-28 | 命令分发器、命令分发方法、调度器、芯片、板卡、设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116107635A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680088A (zh) * | 2023-08-03 | 2023-09-01 | 青岛本原微电子有限公司 | 一种针对多寄存器存储的多模块同时访问系统及访问方法 |
-
2023
- 2023-02-28 CN CN202310189842.5A patent/CN116107635A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116680088A (zh) * | 2023-08-03 | 2023-09-01 | 青岛本原微电子有限公司 | 一种针对多寄存器存储的多模块同时访问系统及访问方法 |
CN116680088B (zh) * | 2023-08-03 | 2023-10-13 | 青岛本原微电子有限公司 | 一种针对多寄存器存储的多模块同时访问系统及访问方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7277982B2 (en) | DRAM access command queuing structure | |
KR102380670B1 (ko) | 메모리 제어기에서의 세분화된 대역폭 프로비저닝 | |
US20200218662A1 (en) | Data caching device and control method therefor, data processing chip, and data processing system | |
US20130282933A1 (en) | Direct memory access buffer utilization | |
US8683126B2 (en) | Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory | |
TW201234188A (en) | Memory access device for memory sharing among multiple processors and access method for the same | |
US20190129876A1 (en) | Devices and methods for data storage management | |
JP2012523619A (ja) | データストレージデバイスのコマンド及び割り込みのグループ化 | |
JP2012128644A (ja) | メモリシステム | |
KR20120029366A (ko) | 트래픽 클래스들과 관련된 포트들을 갖는 다중 포트 메모리 제어기 | |
CN107783727B (zh) | 一种内存设备的访问方法、装置和系统 | |
US11093399B2 (en) | Selecting resources to make available in local queues for processors to use | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
CN116107635A (zh) | 命令分发器、命令分发方法、调度器、芯片、板卡、设备 | |
CN114706531A (zh) | 数据处理方法、装置、芯片、设备及介质 | |
KR101103619B1 (ko) | 멀티 포트 메모리 및 그 억세스 제어 방법 | |
US11221971B2 (en) | QoS-class based servicing of requests for a shared resource | |
US20100058024A1 (en) | Data Transfer Apparatus, Data Transfer Method And Processor | |
CN106776393B (zh) | 一种无中断的串口数据接收方法和装置 | |
CN111343404B (zh) | 成像数据处理方法及装置 | |
EP3771164B1 (en) | Technologies for providing adaptive polling of packet queues | |
US20160062925A1 (en) | Method and system for managing storage device operations by a host device | |
EP2902910A1 (en) | Electronic device, and method for accessing data in electronic device | |
KR20210061583A (ko) | 적응형 딥러닝 가속 장치 및 방법 | |
CN114741214B (zh) | 一种数据传输方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |