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

命令分发装置、方法、芯片、计算机设备及存储介质

文献发布时间:2023-06-19 11:54:11


命令分发装置、方法、芯片、计算机设备及存储介质

技术领域

本公开涉及计算机技术领域,具体而言,涉及一种命令分发装置、方法、芯片、计算机设备及存储介质。

背景技术

随着人工智能的广泛使用,深度学习的模型大小急剧增加,模型结构也越来越复杂,需要分发给运算单元的命令的数量急剧增长,对命令分发单元的分发效率提出了更高的要求。

发明内容

本公开实施例至少提供一种命令分发装置、方法、芯片、计算机设备及存储介质。

第一方面,本公开实施例提供了一种命令分发装置,其特征在于,包括:至少一个分发电路、以及至少一个运算单元信息缓存器;其中,每一分发电路与所述至少一个运算单元信息缓存器连接;

所述至少一个运算单元信息缓存器中的各运算单元信息缓存器,用于存储对应运算单元中当前未处理完命令的命令数量、以及所述运算单元对应的命令数阈值;所述至少一个分发电路中的各分发电路,用于从与该分发电路对应的命令队列读取当前待发送命令后,基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;响应于所述命令数量满足预设条件,向仲裁电路发送仲裁请求信号。

这样,命令分发装置中的各分发电路会在命令数量满足预设条件情况下,向仲裁电路发送仲裁请求信号,因此,能够避免命令在某些运算单元发生堆积而其他运算单元无可执行命令的情况,提升命令的执行效率,增加运算单元的计算资源利用率。

此外,各分发电路在命令数量不满足预设条件情况下,不会参与到权限仲裁过程,因此也就不会占用总线;而获得分发权限的分发电路同样也不会长时间的占用总线,提高命令分发的效率。

且通过硬件实现命令分发,可以减少资源开销,同时提高命令分发的效率。

在一种可能的实施方式中,所述预设条件包括:所述命令数量小于所述命令数阈值。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路,还用于在所述命令数量等于所述命令数阈值的情况下,实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述仲裁电路发送所述仲裁请求信号。

这样,能够确保分发电路能在当前待发送命令对应的第一运算单元能接收当前待发送命令的情况下,重新参与仲裁电路的仲裁,获得向第一运算单元发送当前待发送命令的机会,提高命令分发的效率。

在一种可能的实施方式中,所述至少一个运算单元信息缓存器中的各运算单元信息缓存器,还用于获取动态配置的所述对应运算单元的命令数阈值;其中,所述对应运算单元的命令数阈值,是基于所述对应运算单元中当前未处理完命令所占据的数据存储空间大小、以及所述对应运算单元的数据存储总空间大小确定的。

这样,在每个命令的命令行行数不同的情况下,可以根据每一运算单元接收到的未处理完的命令占据的数据存储空间大小、以及该运算单元的数据存储总空间的大小动态配置该运算单元的命令数阈值,减小命令在某个运算单元拥塞的概率,同时,提升运算单元的处理效率。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路,还用于在接收到所述仲裁电路基于所述仲裁请求信号返回的权限许可信号后,向与所述运算单元标识对应的第一运算单元发送所述当前待发送命令。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路,在从与该分发电路对应的命令队列读取当前待发送命令时,用于:从与该分发电路对应的命令队列读取当前待发送命令的当前命令行;该分发电路,在基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值时,用于:在所述当前命令行为所述当前待发送命令的首行命令行的情况下,基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值。

这样,各分发电路在读取到一个新命令后,可以判断该新命令对应的第一运算单元已经接收到还未处理完毕的命令数是否达到命令数阈值。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路,还用于:在所述当前命令行为所述当前待发送命令的非首行命令行的情况下,向所述仲裁电路发送所述仲裁请求信号。

这样,当解析电路读取的当前命令行为当前待发送命令的非首行命令行的情况下,可以直接向仲裁电路发送仲裁请求信号,参与仲裁电路的仲裁,提高分发效率。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路,还用于:判断所述当前命令行是否为首行命令行。

在一种可能的实施方式中,所述分发电路,在响应于所述命令数量满足预设条件,向仲裁电路发送仲裁请求信号时,用于:基于所述首行命令行确定与所述首行命令行对应的命令状态是否为就绪状态;若是,则向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述就绪状态包括:所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元相同;或者,所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元不相同,但所述最近已发送命令被所述第二运算单元处理完毕。

这样,可保证同一个命令队列中的各个命令即使在不同的运算单元进行处理时,可以按照每一命令在该命令队列中的存储顺序对每一命令进行顺序处理,保证同一个命令队列中的命令被按照顺序处理。

在一种可能的实施方式中,所述分发电路包括:解析电路、以及命令行缓存器;所述解析电路分别和所述命令行缓存器、以及所述运算单元信息缓存器连接;所述解析电路,用于从所述命令队列中读取所述当前待发送命令的当前命令行,并确定所述当前命令行是否为首行命令行;在所述当前命令行为首行命令行的情况下,基于所述首行命令行中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;在所述命令数量小于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行;所述命令行缓存器,用于在接收所述解析电路发送的所述首行命令行后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述解析电路,还用于:在所述命令数量等于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行、以及第一暂停指令;所述命令行缓存器,还用于在接收所述解析电路发送的所述首行命令行以及所述第一暂停指令后,暂停向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述解析电路,还用于实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述命令行缓存器发送第一启动指令;所述命令行缓存器,还用于在接收到所述第一启动指令后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述分发电路还包括:命令行计数器;所述命令行计数器与所述解析电路连接;所述解析电路,在确定所述当前命令行是否为首行命令行时,用于从所述命令队列中读取所述当前命令行后,从所述命令行计数器读取第一计数数值;在所述第一计数数值等于第一预设数值、或等于原始数值的情况下,确定所述当前命令行为所述当前待发送命令中的首行命令行;其中,所述第一预设数值,是基于所述当前待发送命令的命令行行数确定的。

这样,解析电路通过读取命令行计数器的第一计数数值,并将第一计数数值与当前计数阈值做比较就可判断读取的当前命令行是否为当前待发送命令的首行命令行,通过低成本的方式实现对同一队列中不同命令的识别。

在一种可能的实施方式中,所述解析电路,还用于在确定所述当前命令行为首行命令行的情况下,基于所述当前待发送命令的命令行行数更新第一预设数值并向所述命令行计数器发送重置指令;所述命令行计数器,还用于接收到所述解析电路发送的重置指令后,将当前所述命令行计数器对应的第一计数数值重置为原始数值后,增加第一数值。

这样,能保证解析电路在读取新的待发送命令时,命令行计数器重新开始对解析电路读取的新的待发送命令的命令行的行数进行计数。

在一种可能的实施方式中,所述分发电路还包括:判断电路;所述判断电路分别与所述解析电路、所述命令行缓存器连接;所述解析电路,还用于在确定所述当前命令行为所述首行命令行,且在所述命令数量小于所述命令数阈值的情况下,从所述首行命令行中解析所述当前待发送命令对应所述第一运算单元的运算单元标识,并向所述判断电路发送所述运算单元标识,以及向所述命令行缓存器发送所述当前命令行、以及所述运算单元标识;所述判断电路,用于接收所述解析电路发送的所述运算单元标识,并在基于所述运算单元标识判断判断所述第一运算单元和所述命令队列的最近已发送命令对应的第二运算单元不同、且所述最近已发送命令未被所述第二运算单元处理完毕的情况下,向所述命令行缓存器发送第二暂停指令;所述命令行缓存器,还用于在接收到所述判断电路发送的所述第二暂停指令的情况下,暂停向所述仲裁电路发送所述仲裁请求信号。

这样,同一个命令队列中的两个相邻的命令发往不同的运算单元时,不会因为运算单元的处理效率印象该相邻的两个命令的处理顺序,在最近发送的命令没有处理完毕的情况下,命令行缓存器不参与仲裁电路的仲裁,保证当前的命令不下发,保证同一命令队列中的命令的处理顺序。

在一种可能的实施方式中,所述分发电路还包括:命令计数器;所述命令计数器与所述判断电路连接;所述判断电路,还用于在接收到所述解析电路发送的所述运算单元标识后,从所述命令计数器中读取第二计数数值,并在所述第二计数数值大于预设数值的情况下,确定所述最近已发送命令未被所述第二运算单元处理完毕;其中,所述命令计数器,用于对与所述命令队列对应的当前已发送但未被处理完毕的命令进行计数。

这样,判断电路将从命令计数器读取的第二计数数值与预设数值进行比较,便可以知道与该判断电路对应的命令队列中最近已发送的命令有没有被处理。

在一种可能的实施方式中,所述判断电路,还用于在确定所述最近已发送命令未被所述第二运算单元处理完毕的情况下,监测所述命令计数器中的第二计数数值是否变化为第二预设数值;并在监测到所述命令计数器的第二计数数值变化为第二预设数值的情况下,向所述命令行缓存器发送第二启动指令;所述命令行缓存器,还用于在接收到所述第二启动指令后,向所述仲裁电路发送所述仲裁请求信号。

这样,运算单元信息缓存器可以在对应的运算单元将某一命令队列中已发送的命令处理完毕之后,向该命令队列对应的命令计数器发送第二计数指令,命令计数器接收到第二计数指令后,将当前的第二计数数值减少第二数值,表征该命令队列已发送的一个命令被处理完毕。

在一种可能的实施方式中,所述命令计数器与所述解析电路连接;所述解析电路,还用于在所述当前命令行为首行命令行的情况下,在监测到所述命令行缓存器将所述当前命令行向所述第一运算单元发送后,向所述命令计数器发送第二计数指令;所述命令计数器,用于在接收到所述第二计数指令后,将所述命令计数器当前的第二计数数值增加第二数值。

这样,命令计数器可以记录对应的命令队列已经发送的命令的数量。

在一种可能的实施方式中,所述运算单元信息缓存器与多个命令队列分别对应的命令计数器连接;所述第一运算单元信息缓存器,还用于在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,基于所述命令行队列标识、以及所述确认信息,向所述命令队列标识对应的命令计数器发送第三计数指令;所述命令计数器,用于在接收到所述第一运算单元信息缓存器发送的第三计数指令后,将所述命令计数器的当前第二计数数值减少第二数值。

这样,判断电路可以实时在对应的命令队列中最近已发送的命令被处理完毕后,通知命令行缓存器参加仲裁电路的仲裁,发送当前待发送命令的首个命令行。

在一种可能的实施方式中,所述第一运算单元信息缓存器,还用于在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,更新所述命令数量。

这样,能够确保分发电路能在当前待发送命令对应的第一运算单元能接收当前待发送命令的情况下,重新参与仲裁电路的仲裁,获得向第一运算单元发送当前待发送命令的机会,提高命令分发的效率。

第二方面,本公开实施例还提供一种命令分发方法,应用于命令分发装置,所述命令分发装置包括:至少一个分发电路、以及至少一个运算单元信息缓存器;其中,每一分发电路与所述至少一个运算单元信息缓存器连接;所述命令分发方法包括:所述至少一个运算单元信息缓存器中的各运算单元信息缓存器存储对应运算单元中当前未处理完命令的命令数量、以及所述运算单元对应的命令数阈值;所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令后,基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;响应于所述命令数量满足预设条件,向仲裁电路发送仲裁请求信号。

在一种可能的实施方式中,所述预设条件包括:所述命令数量小于所述命令数阈值。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路在所述命令数量等于所述命令数阈值的情况下,实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个运算单元信息缓存器中的各运算单元信息缓存器获取动态配置的所述对应运算单元的命令数阈值;其中,所述对应运算单元的命令数阈值,是基于所述对应运算单元中当前未处理完命令所占据的数据存储空间大小、以及所述对应运算单元的数据存储总空间大小确定的。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路在接收到所述仲裁电路基于所述仲裁请求信号返回的权限许可信号后,向与所述运算单元标识对应的第一运算单元发送所述当前待发送命令。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令,包括:所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令的当前命令行;该分发电路在基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值,包括:在所述当前命令行为所述当前待发送命令的首行命令行的情况下,基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路,在所述当前命令行为所述当前待发送命令的非首行命令行的情况下,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路判断所述当前命令行是否为首行命令行。

在一种可能的实施方式中,所述分发电路响应于所述命令数量满足预设条件,向仲裁电路发送仲裁请求信号,包括:基于所述首行命令行确定与所述首行命令行对应的命令状态是否为就绪状态;若是,则向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述就绪状态包括:所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元相同;或者,所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元不相同,但所述最近已发送命令被所述第二运算单元处理完毕。

在一种可能的实施方式中,所述分发电路包括:解析电路、以及命令行缓存器;所述解析电路分别和所述命令行缓存器、以及所述运算单元信息缓存器连接;所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令的首行命令行后,基于所述首行命令行中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;在所述命令数量小于所述命令数阈值的情况下,向仲裁电路发送仲裁请求信号,包括:所述解析电路从所述命令队列中读取所述当前待发送命令的当前命令行,并确定所述当前命令行是否为首行命令行;在所述当前命令行为首行命令行的情况下,基于所述首行命令行中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;在所述命令数量小于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行;所述命令行缓存器在接收所述解析电路发送的所述首行命令行后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在所述命令数量等于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行、以及第一暂停指令;所述命令行缓存器在接收所述解析电路发送的所述首行命令行以及所述第一暂停指令后,暂停向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述命令行缓存器发送第一启动指令;所述命令行缓存器在接收到所述第一启动指令后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述分发电路还包括:命令行计数器;所述命令行计数器与所述解析电路连接;所述解析电路确定所述当前命令行是否为首行命令行,包括:所述解析电路从所述命令队列中读取所述当前命令行后,从所述命令行计数器读取第一计数数值;在所述第一计数数值等于第一预设数值、或等于原始数值的情况下,确定所述当前命令行为所述当前待发送命令中的首行命令行;其中,所述第一预设数值,是基于所述当前待发送命令的命令行行数确定的。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在确定所述当前命令行为首行命令行的情况下,基于所述当前待发送命令的命令行行数更新第一预设数值并向所述命令行计数器发送重置指令;所述命令行计数器接收到所述解析电路发送的重置指令后,将当前所述命令行计数器对应的第一计数数值重置为原始数值后,增加第一数值。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在确定所述当前命令行为所述当前待发送命令的非首行命令行后,向所述命令行计数器发送第一计数指令;所述命令行计数器接收到所述解析电路发送的第一计数指令后,将所述第一计数数值增加第一数值。

在一种可能的实施方式中,所述分发电路还包括:判断电路;所述判断电路分别与所述解析电路、所述命令行缓存器连接;所述命令分发方法还包括:所述解析电路在确定所述当前命令行为所述首行命令行,且在所述命令数量小于所述命令数阈值的情况下,从所述首行命令行中解析所述当前待发送命令对应所述第一运算单元的运算单元标识,并向所述判断电路发送所述运算单元标识,以及向所述命令行缓存器发送所述当前命令行、以及所述运算单元标识;所述判断电路接收所述解析电路发送的所述运算单元标识,并在基于所述运算单元标识判断判断所述第一运算单元和所述命令队列的最近已发送命令对应的第二运算单元不同、且所述最近已发送命令未被所述第二运算单元处理完毕的情况下,向所述命令行缓存器发送第二暂停指令;所述命令行缓存器在接收到所述判断电路发送的所述第二暂停指令的情况下,暂停向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述分发电路还包括:命令计数器;所述命令计数器与所述判断电路连接;所述命令分发方法还包括:所述判断电路在接收到所述解析电路发送的所述运算单元标识后,从所述命令计数器中读取第二计数数值,并在所述第二计数数值大于预设数值的情况下,确定所述最近已发送命令未被所述第二运算单元处理完毕;其中,所述命令计数器,用于对与所述命令队列对应的当前已发送但未被处理完毕的命令进行计数。

在一种可能的实施方式中,所述命令分发方法还包括:所述判断电路在确定所述最近已发送命令未被所述第二运算单元处理完毕的情况下,监测所述命令计数器中的第二计数数值是否变化为第二预设数值;并在监测到所述命令计数器的第二计数数值变化为第二预设数值的情况下,向所述命令行缓存器发送第二启动指令;所述命令行缓存器在接收到所述第二启动指令后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令计数器与所述解析电路连接;所述命令分发方法还包括:所述解析电路在所述当前命令行为首行命令行的情况下,在监测到所述命令行缓存器将所述当前命令行向所述第一运算单元发送后,向所述命令计数器发送第二计数指令;所述命令计数器在接收到所述第二计数指令后,将所述命令计数器当前的第二计数数值增加第二数值。

在一种可能的实施方式中,所述运算单元信息缓存器与多个命令队列分别对应的命令计数器连接;所述命令分发方法还包括:所述第一运算单元信息缓存器在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,基于所述命令行队列标识、以及所述确认信息,向所述命令队列标识对应的命令计数器发送第三计数指令;所述命令计数器在接收到所述第一运算单元信息缓存器发送的第三计数指令后,将所述命令计数器的当前第二计数数值减少第二数值。

在一种可能的实施方式中,所述命令分发方法还包括:所述第一运算单元信息缓存器在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,更新所述命令数量。

第三方面,本公开可选实现方式还提供一种芯片,包括:如上述第一方面、或第一方面任一项所述的命令分发装置。

第四方面,本公开可选实现方式还提供一种计算机设备,包括:指令存储器和如上述第三方面所述的芯片。

第五方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述第二方面、或第二方面任一项所述的命令分发方法的步骤。

关于上述命令分发方法、芯片、计算机设备、及存储介质的效果描述参见上述命令分发装置的说明,这里不再赘述。

为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本公开实施例所提供的一种命令分发装置的示意图;

图2示出了本公开实施例所提供的另一种命令分发装置的示意图;

图3示出了本公开实施例所提供的一种分发电路的结构示意图;

图4示出了本公开实施例所提供的一种命令分发方法的示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

经研究发现,微控制单元进行命令分发时,将命令发送给命令分发单元,命令分发单元接收到命令后,利用部署在命令分发单元中的软件程序,将命令分发给各个运算单元;命令分发单元在向运算单元发送命令时,会占用总线;若分发给某个运算单元的命令过多,总线资源一直会被该运算单元占用,可能造成命令在该运算单元发生堆积,但其他的运算单元无命令可执行的情况,进而造成命令的执行效率较低,且运算单元的计算资源无法得到充分的利用。

在另外一种情况下,当运算单元对命令的接收能力有限时,若某个运算单元已经接收到的命令已经达到了上限,但此时命令分发单元依然可以根据分发策略,向其分发新的命令;新的命令虽然无法到达运算单元,但会一直占用总线资源,直至运算单元执行了当前接收到的一个命令后,才会接收新的命令,这样,导致了命令在分发的时候出现拥塞,进而造成命令分发的效率较低的问题。

此外,当前的命令分发过程由软件实现,但是随着深度学习的模型大小急剧增加、以及模型结构越来越复杂,命令的数量也变得庞大,命令分发软件对大数量的命令进行分发时需要大量的资源开销,分发效率低。

基于上述研究,本公开提供了一种硬件构成的命令分发装置,通过硬件电路对命令进行分发,且命令分发装置中的各分发电路会在确定当前待发送命令对应的第一运算单元中当前未处理完命令的命令数量小于第一运算单元的命令数阈值的情况下,向仲裁电路发送仲裁请求信号,因此,能够避免命令在某些运算单元发生堆积,而其他运算单元无可执行命令的情况,提升命令的执行效率,增加运算单元的计算资源利用率。

此外,由于命令分发装置中的各分发电路会在确定当前待发送命令对应的第一运算单元中当前未处理完命令的命令数量小于第一运算单元的命令数阈值的情况下,向仲裁电路发送仲裁请求信号,也即,在当前待发送命令对应的第一运算单元中当前未处理完命令的命令数等于第一运算单元的命令数阈值的情况下,不会参与到权限仲裁过程,因此也就不会占用总线;而获得分发权限的分发电路同样也不会长时间的占用总线,提高命令分发的效率。

另外,本公开实施例提供的命令分发装置通过硬件实现,减少资源开销,同时提高命令分发的效率。

针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。

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

本公开实施例所述的连接是指硬件电路之间的连接,例如通过线路将不同的电路模块(例如分发电路、仲裁电路)接通,不同电路模块可以通过线路传递电平信号(例如高电平、低电平),不同的电平信号的组合按照约定可以表征不同的含义,例如数字1代表高电平,数字0代表低电平,两个电路模块之间可以通过设置多路电信号传递线路,在传递不同的信号时,控制不同线路传递不同的电平信号,不同电平信号的组合形成不同的二进制数,例如三个线路,在某个处理周期发送的电平信号分别为:高电平、低电平和高电平,则形成的二进制数为101,不同的二进制数根据定义代表不同的含义。

下面对本公开实施例所述的一些名词进行解释说明:

本公开实施例所述的命令队列、命令行缓存器、运算单元信息缓存器,为具有存储功能的电子元件。

本公开实施例所述的运算单元,为可以实现不同的运算的硬件电路,例如包括进行乘加运算的卷积运算单元、进行视屏编码解码的编解码运算单元等,每一运算单元都与总线连接;且每一运算单元都对应于一个运算单元信息缓存器,每一运算单元都与对应的运算单元信息缓存器连接,每一运算单元信息缓存器存储对应的运算单元没有处理完毕命令的命令数量、以及命令数阈值。每一运算单元对命令的接收能力有限,命令数阈值为运算单元可以存储接收到的未处理完命令的命令数量的最大值;因为每一运算单元对命令的处理能力不同,因此每一运算单元对应的命令数阈值可以不同,具体可以根据每一运算单元对命令的处理能力设定每一运算单元的命令数阈值,这里不做限定。

本公开实施例所述的命令,例如为一个命令包,每一命令中包含多个命令行,其中,首行命令行又称为包头行,在包头行中携带了命令要发往的运算单元的标识。命令分发装置基于该标识,将命令分发至对应的运算单元。另外,首行命令行中还包括了该命令所包括的命令行的行数。示例性的,首行命令行的前三个比特位代表该命令要被发送到的运算单元的标识、第四个比特位和第五个比特位表示该命令行所在的命令包含的命令行的行数。在除包头行外的其他命令行中,携带了该命令的具体信息,如命令要执行的操作、操作数的地址、命令状态等。具体,根据不同的命令可能会有所不同,本公开实施例不做限定。

命令行计数器、命令计数器为具有计数功能的电子元件。

解析电路、仲裁电路为通过电子元件的连接、以及电平信号(例如高电平、低电平)的传递实现对应功能的硬件电路。

参见图1所示,为本公开实施例提供的命令分发装置的示意图,所述命令分发装置包括至少一个分发电路10,以及至少一个运算单元信息缓存器20;

至少一个运算单元信息缓存器中的各运算单元信息缓存器20,用于存储对应运算单元中当前未处理完命令的命令数量、以及运算单元对应的命令数阈值;

至少一个分发电路中的各分发电路10,用于从与该分发电路对应的命令队列读取当前待发送命令后,基于当前待发送命令中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;响应于命令数量满足预设条件,向仲裁电路发送仲裁请求信号。

其中,每一分发电路10与该至少一个运算单元信息缓存器20连接。

参见图2所示,本公开另一实施例中,命令分发装置还包括仲裁电路30,仲裁电路30与至少一个分发电路10分别连接。

仲裁电路30,用于在接收到至少一个分发电路中各分发电路发送的仲裁请求信号后,对各分发电路进行权限仲裁,并基于权限仲裁的结果,向获得发送权限的分发电路返回权限许可信号。

本公开实施例的命令分发装置通过硬件实现,减少资源开销,同时提高命令分发的效率;该命令分发装置的各分发电路在读取当前待发送命令后,基于当前待发送命令中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;在命令数量小于命令数阈值的情况下,向仲裁电路发送仲裁请求信号;因此,能够避免命令在某些运算单元发生堆积,而其他运算单元无可执行命令的情况,提升命令的执行效率,增加运算单元的计算资源利用率。

且分发电路在当前待发送命令对应的第一运算单元中当前未处理完命令的命令数等于第一运算单元的命令数阈值的情况下,不会参与到权限仲裁过程,因此也就不会占用总线;而获得分发权限的分发电路同样也不会长时间的占用总线,提高命令分发的效率。

下面对本公开实施例所述的命令分发装置进行详细介绍。

针对分发电路10,在从与该分发电路对应的命令队列读取当前待发送命令时例如从与该分发电路对应的命令队列读取当前待发送命令的当前命令行。

针对至少一个运算单元信息缓存器中的各运算单元信息缓存器20,还用于获取动态配置的对应运算单元的命令数阈值。其中,对应运算单元的命令数阈值例如是基于对应运算单元中当前未处理完命令所占据的数据存储空间大小、以及对应运算单元的数据存储总空间大小确定的。

此处,动态配置例如是主机、分发电路10、以及与各运算单元信息缓存器20连接的配置单元中任一主体配置的。

示例性的,主机、或者与各运算单元信息缓存器20连接的配置单元基于对应运算单元中当前未处理完命令所占据的数据存储空间大小、以及对应运算单元的数据存储总空间大小确定该运算单元的命令数阈值;例如运算单元的数据存储总空间大小为可以存储50行命令行,该运算单元接收到的未处理完的命令的数量是3,该3个命令所占据的数据存储空间大小是30行,该运算单元还剩20行的存储空间,假设一个命令的命令行行数最大为15行,则主机或者与各运算单元信息缓存器20连接的配置单元确定该运算单元的命令数阈值为4。

或者,示例性的,分发电路10从与该分发电路10对应的命令队列读取当前待发送命令的首行命令行后,解析首行命令行得到当前待发送命令的命令行行数,向第一运算单元信息缓存器发送命令行行数;第一运算单元信息缓存器接收到分发电路发送的命令行行数后,基于命令行行数、第一运算单元中当前未处理完命令所占据的数据存储空间大小、以及第一运算单元的数据存储总空间大小确定第一运算单元对应的命令数阈值;例如,第一运算单元的数据存储总空间大小为可以存储40行命令行,该第一运算单元接收到的未处理完的命令的数量是3,该3个命令所占据的数据存储空间大小是30行,该第一运算单元还剩10行的存储空间,如果当前待发送命令的命令行行数大于10行,则第一运算单元的命令数阈值为3;如果当前待发送命令的命令行行数小于或者等于10行,则第一运算单元的命令数阈值为4。

针对至少一个分发电路中的各分发电路10,从该分发电路10对应的命令队列中读取当前待发送命令的当前命令行,并确定当前命令行是否为当前待发送命令的首行命令行。

A1:在确定当前命令行是当前待发送命令的首行命令行的情况下,分发电路10基于首行命令行中携带的运算单元标识,从与该运算单元标识对应的第一运算单元信息缓存器中读取第一运算单元中当前未处理完命令的命令数量以及该第一运算单元的命令数阈值,响应于命令数量满足预设条件,向仲裁电路发送仲裁请求信号。其中,预设条件例如包括命令数量小于命令数阈值。因此在命令数量小于命令数阈值的情况下,向仲裁电路30发送仲裁请求信号。

其中,第一运算单元为运算单元中与当前待发送命令对应的运算单元,第一运算单元信息缓存器为运算单元信息缓存器中与第一运算单元对应的运算单元信息缓存器;运算单元标识例如包括该对应运算单元的标识(例如该对应的运算单元的地址)、该对应的运算单元信息缓存器的标识(例如该对应的运算单元信息缓存器的地址)等内容中的至少一项。另外,分发电路10还可以记录该运算单元标识;在当前命令行为非首行命令行时,利用记录的运算单元标识,向运算单元标识对应的第一运算单元发送该当前命令行。

分发电路10读取的当命令行为首行命令行代表该分发电路要开始发送一个新的待发送命令,需要确定该新的待发送命令对应的第一运算单元存储的接收到的未处理完毕的命令的数量是否达到最大值;命令数量小于命令数阈值代表当前待发送命令对应的第一运算单元存储的接收到的未处理完毕的命令的数量还没有达到最大值,该第一运算单元还可以正常接收分发电路发送的当前待发送命令,此时分发电路可以向仲裁电路30发送仲裁请求信号,参与仲裁电路30的仲裁以便获得向第一运算单元发送当前待发送命令的机会。

另外,分发电路10在命令数量等于命令数阈值的情况下,实时监测第一运算单元信息缓存器中的命令数量是否变化为小于命令数阈值;在监测到命令数量变化为小于命令数阈值后,向仲裁电路30发送仲裁请求信号。

第一运算单元中存储的接收到的未处理完毕的命令的数量达到最大值时,无法接收分发电路10发送的当前待发送命令,直到将接收到的未处理完毕的命令中的至少一条命令处理完毕后,才可以接收分发电路10发送的当前待发送命令。

第一运算单元将接收到的一个命令处理完之后会给第一运算单元信息缓存器一个反馈信息,第一运算单元信息缓存器会在接收到该反馈信息后更新命令数量,例如将命令数量做减1操作,分发电路10在监测到第一运算单元信息缓存器中存储的命令数量变化为小于命令数阈值后,向仲裁电路30发送仲裁请求信号,参与仲裁电路30的仲裁以便获得向第一运算单元发送当前待发送命令的机会。

A2:在确定当前命令行是当前待发送命令的非首行命令行的情况下,分发电路10直接向仲裁电路30发送仲裁请求信号。

在当前命令行不是首行命令行的情况下,说明该分发电路10在发送该当前待发送命令的首行命令行时,已经确定当前待发送命令对应的第一运算单元存储的接收到的未处理完毕的命令的数量还没有达到最大值,因此在读取的当前命令行不是首行命令行的情况下,分发电路10在向仲裁电路30发送仲裁请求信号时无需再确定第一运算单元的命令数量是否小于命令数阈值。

且对于某个命令而言,其所有命令行被全部发送至对应的运算单元后,运算单元才会基于该命令处理与命令对应的处理任务,因此,若当前命令行为非首行命令行,可以继续将非首行命令行向对应的运算单元发送。因而,分发电路10在当前命令行为非首行命令行的情况下,直接向仲裁电路30发送仲裁请求信号。

分发电路10在向仲裁电路发送仲裁请求信号时,例如可以采用下述B1或者B2中任一种:

B1:分发电路10在命令数量小于命令数阈值的情况下,即向仲裁电路30发送仲裁请求信号。

B2:分发电路10在命令数量小于命令数阈值的情况下,基于首行命令行确定与首行命令行对应的命令状态是否为就绪状态;若是,则向仲裁电路30发送仲裁请求信号;若不是就绪状态,则不向仲裁电路30发送仲裁请求信号,直到其对应的命令状态变化至就绪状态为止。

此处,命令状态为就绪状态为:命令数量小于命令数阈值的情况下,可以将当前命令行向对应的第一运算单元发送的状态。该就绪状态例如包括下述(1)~(2)中任一种:

(1):首行命令行对应的第一运算单元、与命令队列的最近已发送命令对应的第二运算单元相同。

(2):首行命令行对应的第一运算单元、与命令队列的最近已发送命令对应的第二运算单元不相同,但最近已发送命令被第二运算单元处理完毕。

此处,对于属于同一命令队列的不同命令,其是具有先后处理顺序的;在很多情况下,后一命令的处理,需要在前一命令被处理完毕后才可以处理;因此,为了保证属于同一命令队列的不同命令之间的处理顺序,若不同命令被发送至不同的运算单元,就需要前一命令对应的运单元将该前一命令处理完毕后,再将后一命令向该后一命令对应的运算单元发送。

若不同命令被发送至相同的运算单元,由于运算单元在处理完一个命令后才会处理另一命令,因此在前一命令未被处理完毕的情况下,就可以将后一命令中的各命令行向同一运算单元发送,这样,也能够保证同一命令队列的不同命令之间的处理顺序。

因此,在上述(1)中,在第一运算单元与第二运算单元相同的情况下,将当前命令行对应的命令状态确定为就绪状态;在上述(2)中,在第一运算单元和第二运算单元不同,且最近已发送命令被第二运算单元处理完毕的情况下,将当前命令行对应的命令状态确定为就绪状态。

另外,至少一个分发电路中的各分发电路10,在接收到仲裁电路30基于仲裁请求信号返回的权限许可信号后,向与运算单元标识对应的第一运算单元发送当前待发送命令。

在命令分发装置中,还可以包括:命令分发接口40;分发电路10可以与该命令分发接口40连接,其在向第一运算单元发送当前命令行时,可以将当前命令行和运算单元标识一起发送给命令分发接口40,命令分发接口40与总线连接,基于运算单元标识,通过总线,将当前命令行发送给与总线连接的第一运算单元。

另外,命令分发接口40还可以与仲裁电路30连接;分发电路10在获得接收到权限许可信号后,将当前命令行和运算单元标识一起发送给仲裁电路30;仲裁电路30将当前命令行和运算单元标识一起发送给命令分发接口40,然后由命令分发接口40基于运算单元标识,通过总线将当前命令行发送给与总线连接的第一运算单元。

命令分发接口40在和总线连接时,例如和总线的总线接口连接。命令分发接口40将当前命令行和运算单元标识一起发送给总线接口,由总线接口通过总线、以及运算单元标识,将当前命令行发送给第一运算单元。

图3为公开实施例提供一种分发电路10的结构示意图,在该实施例中,分发电路10包括:解析电路101、以及命令行缓存器102;解析电路101分别和命令行缓存器102、以及该至少一个运算单元信息缓存器20连接;

解析电路101,用于从命令队列中读取当前待发送命令的当前命令行,并确定当前命令行是否为首行命令行;在当前命令行为首行命令行的情况下,基于首行命令行中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;在命令数量小于命令数阈值的情况下,向命令行缓存器102发送首行命令行;

命令行缓存器102,用于在接收解析电路101发送的首行命令行后,向仲裁电路发送仲裁请求信号。

针对解析电路101,参见图3所示,每一解析电路101与对应的命令队列连接,如图3中的解析电路0与命令队列0连接,解析电路1与命令队列1连接;解析电路101与对应的命令行缓存器102连接,例如图3中解析电路0与命令行缓存器0连接,解析电路1与命令行缓存器1连接。

解析电路101读取命令队列的过程例如包括:解析电路101监测其与命令队列之间电平状态,并监测其与命令行缓存器102之间的电平状态;当检测当与命令队列之间的电平状态表征命令队列中存在待发送命令,且与命令行缓存器之间的电平状态表征命令行缓存器102为空,则从命令队列中读取当前命令行。

另外,解析电路101读取命令队列的过程还可以是:命令队列在存储有待发送命令时,还向解析电路101发送第一电平信号,该第一电平信号表征在命令队列中存储有待发送命令;解析电路101在接收到该第一电平信号后,向命令行缓存器102发送第二电平信号,命令行缓存器102接收到第二电平信号后,在命令行缓存器102中没有存储任何命令行的情况下,向解析电路101发送第三电平信号,解析电路101在接收到第三电平信号后,向命令队列反馈第四电平信号,命令队列接收到第四电平信号后,向解析电路101发送待发送命令的多个命令行中的当前命令行。

命令行缓存器102存储有命令行的情况下,则向解析电路101反馈第五电平信号,解析电路101在接收到该第五电平信号后向命令队列反馈第六电平信号,命令队列接收到第六电平信号后,继续向解析电路101发送第一电平信号,直至收到解析电路101反馈的第四电平信号。

需要说明的是,上述发送第一电平信号、第二电平信号、第三电平信号、第四电平信号、第五电平信号、第六电平信号可以是一个传输状态,也可以是对应的电路模块保持该电平信号对应的状态,例如命令队列向解析电路101发送的第一电平信号是高电平,则可以是命令队列在每个时钟周期向解析电路101发送一次高电平,也可以是命令队列一直保持高电平状态。

另外,解析电路101还用于在命令数量等于命令数阈值的情况下,向命令行缓存器发送所述首行命令行、以及第一暂停指令;命令行缓存器102,在接收述解析电路发送的首行命令行以及所述第一暂停指令后,暂停向仲裁电路发送仲裁请求信号。解析电路101实时监测第一运算单元信息缓存器中的命令数量是否变化为小于命令数阈值;在监测到命令数量变化为小于命令数阈值后,向命令行缓存器102发送第一启动指令;命令行缓存器102在接收到第一启动指令后,向仲裁电路发送仲裁请求信号。

分发电路10读取到当前命令行之后,确定当前命令行是否为当前待发送命令的首行命令行,在当前命令行为当前待发送命令的首行命令行的情况下,基于首行命令行中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;在命令数量小于命令数阈值的情况下,基于首行命令行确定与首行命令行对应的命令状态是否为就绪状态;若是,则向仲裁电路30发送仲裁请求信号。

当前命令行对应的就绪状态,可以参见上述(1)~(2)任一项,在此不再赘述。

在本公开另一实施例中,分发电路10还包括:命令行计数器103;命令行计数器103与解析电路连接101;

解析电路101,用于从命令队列中读取当前命令行后,从命令行计数器103读取第一计数数值;在第一计数数值小于第一预设数值,且大于原始数值的情况下,确定当前命令行为当前待发送命令中的非首行命令行。

其中,第一预设数值,是基于当前待发送命令的命令行行数确定的。

且第一预设数值与命令行缓存器102的原始数值有关,对于同一命令,例如原始数值为m,且该命令的命令行数量为n时,则该第一预设数值可以为m+n;原始数值可以根据实际情况设定,例如原始数值可以设置为0,或者1等,具体可以根据实际的需要进行设定。

解析电路101从命令队列中读取当前命令行,并在确定当前命令行为当前待发送命令中的非首行命令行的情况下,向命令行缓存器102发送当前命令行,如图3中④所示;命令行缓存器102,在接收解析电路101发送的当前命令行后,向仲裁电路30发送仲裁请求信号如图3中⑤所示。

另外,解析电路101从命令队列中读取当前命令行后,从命令行计数器103读取第一计数数值,如图3中①、③所示;解析电路101在读取第一计数数值后,在确定了当前命令行为当前待发送命令中的非首行命令行后,向命令行计数器103发送第一计数指令,如图3中②所示;命令行计数器103接收到解析电路101发送的第一计数指令后将第一计数数值增加第一数值。

其中,第一数值根据具体应用情况设定,例如针对记录解析电路101读取的命令行的行数,第一数值例如为1。

本公开另一实施例中,解析电路101读取的第一计数数值等于第一预设数值,或等于原始数值的情况下,解析电路101确定当前命令行为当前待发送命令中的首行命令行,基于当前待发送命令的命令行行数更新第一预设数值并向命令行计数器103发送重置指令,如图3中的⑥所示;命令行计数器103接收到解析电路101发送的重置指令后,将当前命令行计数器103对应的第一计数数值重置为原始数值后增加第一数值。

解析电路10在确定当前命令行为当前待发送命令的首行命令的情况下,在当前命令行为首行命令行的情况下,基于首行命令行中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;在命令数量小于命令数阈值的情况下,基于首行命令行确定与首行命令行对应的命令状态是否为就绪状态;若是,则向仲裁电路30发送仲裁请求信号。

参见图3所示,本公开另一实施例中,分发电路10还包括了判断电路104。

解析电路101与判断电路104连接。

解析电路101,还用于在确定当前命令行为当前待发送命令中的首行命令行,且在命令数量小于命令数阈值的情况下,从首行命令行中解析当前待发送命令对应第一运算单元的运算单元标识,并向判断电路104发送运算单元标识,以及向命令行缓存器102发送当前命令行;

判断电路104,用于接收解析电路101发送的运算单元标识,并在基于运算单元标识判断判断第一运算单元和命令队列的最近已发送命令对应的第二运算单元不同、且最近已发送命令未被第二运算单元处理完毕的情况下,向命令行缓存器102发送第二暂停指令;

命令行缓存器102,还用于在接收到判断电路104发送的第二暂停指令的情况下,暂停向仲裁电路30发送仲裁请求信号。

另一实施例中,在分发电路10中还包括:命令计数器105。命令计数器105与判断电路连接104;

判断电路104,还用于在接收到解析电路101发送的运算单元标识后,从命令计数器105中读取第二计数数值,并在第二计数数值大于第二预设数值的情况下,确定最近已发送命令未被第二运算单元处理完毕;

其中,命令计数器105,用于对与命令队列对应的当前已发送但未被处理完毕的命令进行计数。

示例性的,如图3所示,解析电路101与判断电路104、以及命令计数器105连接,命令计数器105与判断电路104连接;在当前命令行为当前待发送命令中的首行命令行的情况下,解析电路101从首行命令行中解析当前待发送命令对应第一运算单元的运算单元标识,并向判断电路104发送运算单元标识,如图3中的⑦所示,以及向命令行缓存器102发送当前命令行、运算单元标识,如图3中的⑧所示;其中,运算单元标识例如为一个二进制数组,用于表征第一运算单元的地址。

判断电路104在接收到解析电路101发送的运算单元标识后,在确定运算单元标识和该命令队列最近已发送命令对应的第二运算单元的第二标识一致的情况下即为上述(1)所述的就绪状态,判断电路104保持在一个固定的电平信号例如高电平,当判断电路104保持在高电平时,命令行缓存器102在接收到解析电路101发送的当前命令行、运算单元标识后,向仲裁电路30发送仲裁请求信号如图3中⑨所示。其中,第二标识例如为一个二进制数组,用于表征第二运算单元的地址。

本公开另一实施例中,判断电路104在接收到解析电路101发送的运算单元标识后,从命令计数器105中读取第二计数数值,在第二计数数值等于第二预设数值的情况下,确定最近已发送命令已经被第二运算单元处理完毕,且在运算单元标识和该命令队列最近已发送命令对应的第二运算单元的第二标识不一致的情况下即为上述(2)所述的就绪状态,判断电路104保持在一个固定的电平信号例如高电平,当判断电路104保持在高电平时,命令行缓存器102在接收到解析电路101发送的当前命令行、运算单元标识后,向仲裁电路30发送仲裁请求信号如图3中⑨所示。

本公开另一实施例中,判断电路104在接收到解析电路101发送的运算单元标识后,从所述命令计数器105中读取第二计数数值,在第二计数数值大于第二预设数值的情况下,确定最近已发送命令未被第二运算单元处理完毕,且当运算单元标识和该命令队列最近已发送命令对应的第二运算单元的第二标识不一致的情况下,判断电路104向命令行缓存器102发送第二暂停指令如图3中

判断电路104在确定最近已发送命令未被第二运算单元处理完毕的情况下,监测命令计数器105中的第二计数数值是否变化为第二预设数值;并在监测到命令计数器105的第二计数数值变化为第二预设数值的情况下,向命令行缓存器102发送第二启动指令如图3中

仲裁电路30在接收到各个命令行缓存器102发送的仲裁请求信号后,对各命令行缓存器102进行权限仲裁,并基于权限仲裁的结果,向获得发送权限的命令行缓存器102返回权限许可信号如图3中

接收到仲裁电路30发送的权限许可信号的命令行缓存器102,在接收到仲裁电路30基于仲裁请求信号返回的权限许可信号后,向与当前待发送命令对应的第一运算单元发送当前命令行。

在一种可能的实施方式中,命令行缓存器102在接收到仲裁电路30基于仲裁请求信号返回的权限许可信号后向仲裁电路30发送当前命令行、以及第一运算单元的运算单元标识如图3中

其中,总线与每一运算单元连接,总线通过每一运算单元的标识选择出需要进行通信的运算单元。

在另一种可能的实施方式中,命令行缓存器102与命令分发接口40连接;命令行缓存器102在接收到仲裁电路30基于仲裁请求信号返回的权限许可信号后向命令分发接口40发送当前命令行、以及运算单元标识;命令分发接口40在接收到当前命令行、以及运算单元标识后,向总线接口发送当前命令行、以及运算单元标识;总线接口在接收到当前命令行、以及运算单元标识后,基于运算单元标识向第一运算单元发送当前命令行。

另外,命令行缓存器102与运算单元信息缓存器20连接;解析电路101在确定当前命令行为当前待发送命令中的首行命令行的情况下向命令行缓存器102发送命令队列的命令队列标识;命令行缓存器102在向与当前待发送命令对应的第一运算单元发送当前命令行时,向第一运算单元信息缓存器发送命令队列标识;其中,第一运算单元信息缓存器为与第一运算单元对应的运算单元信息缓存器20。

本公开另一实施例中,仲裁电路30与运算单元信息缓存器20连接;运算单元信息缓存器20与多个命令队列分别对应的命令计数器连接;命令行缓存器102向仲裁电路30发送当前命令行、运算单元标识、以及发送命令队列的命令队列标识;仲裁电路30向命令分发接口40发送当前命令行、运算单元标识时,向第一运算单元信息缓存器发送命令队列的命令队列标识如图3中

第一运算单元信息缓存器接收命令队列标识;并在接收到第一运算单元将当前待发送命令处理完毕后反馈的确认信息后如图3中

命令计数器105在接收到第一运算单元信息缓存器发送的第三计数指令后,将命令计数器105的当前第二计数数值减少第二数值。

确人信息为运算单元在将命令处理完毕之后,向运算单元信息缓存器20反馈的,确认信息例如为确认字符(Acknowledge character,ACK)。

这样,命令计数器105能够实现对与命令队列对应的当前已发送但未被处理完毕的命令进行计数。

需要说明的是,图3中的

另外,仲裁电路30每次仲裁后,只会给一个命令行缓存器102返回权限许可信号,也即总线的使用权只能同时给一个命令行缓存器102。仲裁电路30的仲裁逻辑可以基于与仲裁电路30连接的寄存器去定义,例如通过对命令队列的等级划分来仲裁,或者基于轮询的方式仲裁,这里不做限定。

本领域技术人员可以理解,在具体实施方式的上述装置中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

基于同一发明构思,本公开实施例中还提供了与命令分发装置对应的命令分发方法,由于本公开实施例中的装置解决问题的原理与本公开实施例上述命令分发装置相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

本公开实施例所提供的命令分发方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:命令分发装置、终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该命令分发方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。

下面以执行主体为命令分发装置为例对本公开实施例提供的命令分发方法加以说明。

参照图4所示,为本公开实施例提供的一种命令分发方法的示意图,包括:

S401:至少一个运算单元信息缓存器中的各运算单元信息缓存器存储对应运算单元中当前未处理完命令的命令数量、以及运算单元对应的命令数阈值;

S402:至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令的首行命令行后,基于首行命令行中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值;在命令数量小于命令数阈值的情况下,向仲裁电路发送仲裁请求信号;在接收到仲裁电路基于仲裁请求信号返回的权限许可信号后,向与运算单元标识对应的第一运算单元发送首行命令行。

在一种可能的实施方式中,所述预设条件包括:所述命令数量小于所述命令数阈值。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路在所述命令数量等于所述命令数阈值的情况下,实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个运算单元信息缓存器中的各运算单元信息缓存器获取动态配置的所述对应运算单元的命令数阈值;其中,所述对应运算单元的命令数阈值,是基于所述对应运算单元中当前未处理完命令所占据的数据存储空间大小、以及所述对应运算单元的数据存储总空间大小确定的。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路在接收到所述仲裁电路基于所述仲裁请求信号返回的权限许可信号后,向与所述运算单元标识对应的第一运算单元发送所述当前待发送命令。

在一种可能的实施方式中,所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令,包括:所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令的当前命令行;该分发电路在基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值,包括:在所述当前命令行为所述当前待发送命令的首行命令行的情况下,基于所述当前待发送命令中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路,在所述当前命令行为所述当前待发送命令的非首行命令行的情况下,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法,还包括:所述至少一个分发电路中的各分发电路判断所述当前命令行是否为首行命令行。

在一种可能的实施方式中,所述分发电路响应于所述命令数量满足预设条件,向仲裁电路发送仲裁请求信号,包括:基于所述首行命令行确定与所述首行命令行对应的命令状态是否为就绪状态;若是,则向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述就绪状态包括:所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元相同;或者,所述首行命令行对应的第一运算单元、与所述命令队列的最近已发送命令对应的第二运算单元不相同,但所述最近已发送命令被所述第二运算单元处理完毕。

在一种可能的实施方式中,所述分发电路包括:解析电路、以及命令行缓存器;所述解析电路分别和所述命令行缓存器、以及所述运算单元信息缓存器连接;所述至少一个分发电路中的各分发电路从与该分发电路对应的命令队列读取当前待发送命令的首行命令行后,基于所述首行命令行中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;在所述命令数量小于所述命令数阈值的情况下,向仲裁电路发送仲裁请求信号,包括:所述解析电路从所述命令队列中读取所述当前待发送命令的当前命令行,并确定所述当前命令行是否为首行命令行;在所述当前命令行为首行命令行的情况下,基于所述首行命令行中携带的运算单元标识,从所述运算单元标识对应的第一运算单元信息缓存器中读取所述命令数量以及所述命令数阈值;在所述命令数量小于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行;所述命令行缓存器在接收所述解析电路发送的所述首行命令行后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在所述命令数量等于所述命令数阈值的情况下,向所述命令行缓存器发送所述首行命令行、以及第一暂停指令;所述命令行缓存器在接收所述解析电路发送的所述首行命令行以及所述第一暂停指令后,暂停向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路实时监测所述第一运算单元信息缓存器中的命令数量是否变化为小于所述命令数阈值;在监测到所述命令数量变化为小于所述命令数阈值后,向所述命令行缓存器发送第一启动指令;所述命令行缓存器在接收到所述第一启动指令后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述分发电路还包括:命令行计数器;所述命令行计数器与所述解析电路连接;所述解析电路确定所述当前命令行是否为首行命令行,包括:所述解析电路从所述命令队列中读取所述当前命令行后,从所述命令行计数器读取第一计数数值;在所述第一计数数值等于第一预设数值、或等于原始数值的情况下,确定所述当前命令行为所述当前待发送命令中的首行命令行;其中,所述第一预设数值,是基于所述当前待发送命令的命令行行数确定的。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在确定所述当前命令行为首行命令行的情况下,基于所述当前待发送命令的命令行行数更新第一预设数值并向所述命令行计数器发送重置指令;所述命令行计数器接收到所述解析电路发送的重置指令后,将当前所述命令行计数器对应的第一计数数值重置为原始数值后,增加第一数值。

在一种可能的实施方式中,所述命令分发方法还包括:所述解析电路在确定所述当前命令行为所述当前待发送命令的非首行命令行后,向所述命令行计数器发送第一计数指令;所述命令行计数器接收到所述解析电路发送的第一计数指令后,将所述第一计数数值增加第一数值。

在一种可能的实施方式中,所述分发电路还包括:判断电路;所述判断电路分别与所述解析电路、所述命令行缓存器连接;所述命令分发方法还包括:所述解析电路在确定所述当前命令行为所述首行命令行,且在所述命令数量小于所述命令数阈值的情况下,从所述首行命令行中解析所述当前待发送命令对应所述第一运算单元的运算单元标识,并向所述判断电路发送所述运算单元标识,以及向所述命令行缓存器发送所述当前命令行、以及所述运算单元标识;所述判断电路接收所述解析电路发送的所述运算单元标识,并在基于所述运算单元标识判断判断所述第一运算单元和所述命令队列的最近已发送命令对应的第二运算单元不同、且所述最近已发送命令未被所述第二运算单元处理完毕的情况下,向所述命令行缓存器发送第二暂停指令;所述命令行缓存器在接收到所述判断电路发送的所述第二暂停指令的情况下,暂停向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述分发电路还包括:命令计数器;所述命令计数器与所述判断电路连接;所述命令分发方法还包括:所述判断电路在接收到所述解析电路发送的所述运算单元标识后,从所述命令计数器中读取第二计数数值,并在所述第二计数数值大于预设数值的情况下,确定所述最近已发送命令未被所述第二运算单元处理完毕;其中,所述命令计数器,用于对与所述命令队列对应的当前已发送但未被处理完毕的命令进行计数。

在一种可能的实施方式中,所述命令分发方法还包括:所述判断电路在确定所述最近已发送命令未被所述第二运算单元处理完毕的情况下,监测所述命令计数器中的第二计数数值是否变化为第二预设数值;并在监测到所述命令计数器的第二计数数值变化为第二预设数值的情况下,向所述命令行缓存器发送第二启动指令;所述命令行缓存器在接收到所述第二启动指令后,向所述仲裁电路发送所述仲裁请求信号。

在一种可能的实施方式中,所述命令计数器与所述解析电路连接;所述命令分发方法还包括:所述解析电路在所述当前命令行为首行命令行的情况下,在监测到所述命令行缓存器将所述当前命令行向所述第一运算单元发送后,向所述命令计数器发送第二计数指令;所述命令计数器在接收到所述第二计数指令后,将所述命令计数器当前的第二计数数值增加第二数值。

在一种可能的实施方式中,所述运算单元信息缓存器与多个命令队列分别对应的命令计数器连接;所述命令分发方法还包括:所述第一运算单元信息缓存器在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,基于所述命令行队列标识、以及所述确认信息,向所述命令队列标识对应的命令计数器发送第三计数指令;所述命令计数器在接收到所述第一运算单元信息缓存器发送的第三计数指令后,将所述命令计数器的当前第二计数数值减少第二数值。

在一种可能的实施方式中,所述命令分发方法还包括:所述第一运算单元信息缓存器在接收到所述第一运算单元将所述当前待发送命令处理完毕后反馈的确认信息后,更新所述命令数量。

关于方法的处理流程可以参照上述装置实施例中的相关说明,这里不再详述。

本公开实施例提供一种命令分发过程的具体示例,包括:

步骤1:解析电路101从命令队列中读取当前命令行,并在读取了当前命令行后,从命令行计数器103中读取第一计数数值。

步骤2:解析电路101将第一计数数值和第一预设数值进行比对。如果第一计数数值小于第一预设数值,且大于原始数值,则跳转到步骤3;如果第一计数数值等于第一预设数值或等于原始数值,则跳转至步骤11。

步骤3:解析电路101将当前命令行、以及前待发送命令对应的第一运算单元的运算单元标识发送给命令行缓存器102。并向命令行计数器103发送第一计数指令。

步骤4:命令行计数器103根据第一计数指令将当前第一计数数值增加第一数值。

步骤5:命令行缓存器102在接收到解析电路发送的当前命令行、以及前待发送命令对应的第一运算单元的运算单元标识后,向仲裁电路发送仲裁请求信号。

其中,步骤4和步骤5无执行的先后顺序。

步骤6:承接上述步骤5,仲裁电路30接收到各个命令行缓存器104发送的仲裁请求信号后,对各命令行缓存器102进行权限仲裁,并基于权限仲裁的结果,向获得发送权限的命令行缓存器102返回权限许可信号,跳转至步骤7或者跳转至步骤8。

步骤7:命令行缓存器102在接收到仲裁电路30发送的权限许可信号后,向命令分发接口40发送当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识,跳转至步骤9。在该种情况下,命令行缓存器102通过仲裁电路,和命令分发接口40连接。

步骤8:命令行缓存器102在接收到仲裁电路30发送的权限许可信号后,向仲裁电路30发送当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识,仲裁电路接收到当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识后,向命令分发接口40发送当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识。在该种情况下,命令行缓存器102直接和命令分发接口40连接。

其中,步骤7和步骤8为两种互斥的可能的实施方式。

步骤9:承接上述步骤7或者步骤8或者步骤23,命令分发接口40在接收到当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识后,向总线接口发送当前命令行、当前待发送命令对应的第一运算单元的运算单元标识。

步骤10:总线接口在接收到命令分发接口40发送的当前命令行、以及当前待发送命令对应的第一运算单元的运算单元标识后,基于运算单元标识,向第一运算单元发送当前命令行,跳转至步骤27。

步骤11:承接上述步骤2,解析电路101向命令行计数器103发送重置指令,并基于当前待发送命令的命令行的行数更新第一预设数值;基于当前命令行中携带的运算单元标识,从运算单元标识对应的第一运算单元信息缓存器中读取命令数量以及命令数阈值,向判断电路104发送运算单元标识。

步骤12:命令行计数器103接收到解析电路101发送的重置指令后,将当前命令行计数器103对应的第一计数数值重置为原始数值后增加第一数值。

步骤13:解析电路101确定命令数量是否小于命令数阈值;如果是,跳转至15;如果否,跳转至步骤14。

其中,步骤12和步骤13无执行的先后顺序。

步骤14:解析电路101向命令行缓存器102发送当前命令行、运算单元标识、以及第一暂停指令;命令行缓存器102在接收解析电路101发送的当前命令行、运算单元标识以及第一暂停指令后,暂停向仲裁电路发送仲裁请求信号;且解析电路101实时监测第一运算单元信息缓存器中的命令数量是否变化为小于命令数阈值;在监测到命令数量变化为小于命令数阈值后,向命令行缓存器102发送第一启动指令;命令行缓存器102接收到第一启动指令后,跳转至步骤16。

步骤15:承接步骤13,解析电路101向命令行缓存器102发送当前命令行、运算单元标识;命令行缓存器102在接收解析电路101发送的当前命令行、运算单元标识。

步骤16:判断电路104接收到解析电路101发送的运算单元标识后,读取命令计数器105的第二计数数值,将第二计数数值与第二预设数值进行比较,在第二计数数值等于第二预设数值的情况下,跳转至步骤17,在第二计数数值不等于第二预设数值的情况下,跳转至步骤24。

步骤17:命令行缓存器102在接收到解析电路发送的当前命令行、以及前待发送命令对应的第一运算单元的运算单元标识后,向仲裁电路发送仲裁请求信号。

步骤18:仲裁电路30接收到各个命令行缓存器104发送的仲裁请求信号后,对各命令行缓存器102进行权限仲裁,并基于权限仲裁的结果,向获得发送权限的命令行缓存器102返回权限许可信号,跳转至步骤19或者跳转至步骤20。

步骤19:命令行缓存器102在接收到仲裁电路30发送的权限许可信号后,向命令分发接口40发送当前命令行、以及前待发送命令对应的第一运算单元的运算单元标识,向第一运算单元信息缓存器发送当前命令行所在命令队列的命令队列标识,跳转至步骤21。

步骤20:承接步骤18,命令行缓存器102在接收到仲裁电路30发送的权限许可信号后,向仲裁电路30发送当前命令行、当前待发送命令对应的第一运算单元的运算单元标识,以及当前命令行所在命令队列的命令队列标识;仲裁电路接收到当前命令行、当前待发送命令对应的第一运算单元的运算单元标识、以及当前命令行所在命令队列的命令队列标识后,向命令分发接口40发送当前命令行、当前待发送命令对应的第一运算单元的运算单元标识,并向第一运算单元信息缓存器发送当前命令行所在命令队列的命令队列标。

其中,步骤19和步骤20为两种互斥的可能的实施方式。

步骤21:承接步骤19或步骤20,命令行缓存器102在发送当前命令行之后,向解析电路101反馈已发送的反馈信息。

步骤22:解析电路101在接收到命令行缓存器102反馈已发送的反馈信息后,向命令计数器105发送第二计数指令。

步骤23:命令计数器105接收到解析电路101发送的第二计数指令后,控制命令计数器105当前的第二计数数值增加第二数值,跳转至步骤9。

步骤24:承接步骤16,判断电路104基于运算单元标识,判断第一运算单元和命令队列的最近已发送命令对应的第二运算单元是否一致,是,跳转至步骤17,否,跳转至步骤25。

步骤25:判断电路104向命令行缓存器102发送第二暂停指令,并实时监测命令计数器105的第二计数数值,直至第二计数数值等于预设数值后,向命令行缓存器102发送第二启动指令。

步骤26:命令行缓存器102接收到判断电路104发送的第二暂停指令后,停止向仲裁电路30发送仲裁请求信号,直至接收到判断电路104发送的第二启动指令后,向仲裁电路发送仲裁请求信号,跳转至步骤18。

步骤27:承接步骤10,第一运算单元在接收到当前待发送的命令并处理完毕后,向第一运算单元信息缓存器反馈处理完毕的确认信息。

步骤28:第一运算单元信息缓存器接收到第一运算单元反馈的确认信息后,基于该被处理完毕的命令所在的命令队列标识向对应的命令计数器105发送第三计数指令,并将命令数量减1。

步骤29:命令计数器105接收到第三计数指令后,控制命令计数器105当前的第二计数数值减少第二数值。

本公开实施例还提供了一种芯片,包括:如本公开任一实施例所述的命令分发装置。

上述命令分发装置的具体执行命令的具体过程可以参考本公开实施例中所述的命令分发方法的步骤,此处不再赘述。

本公开实施例还提供一种计算机设备,包括本公开任一实施例提供的芯片。

本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的命令分发方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和方法的具体工作过程,可以参考前述装置实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

相关技术
  • 命令分发装置、方法、芯片、计算机设备及存储介质
  • NVMe SSD主控芯片的读命令加速方法、装置、计算机设备及存储介质
技术分类

06120113098898