一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

指令同步装置、芯片和计算机设备,数据处理方法与流程

2022-04-02 03:17:16 来源:中国专利 TAG:


1.本公开涉及人工智能技术领域,尤其涉及一种指令同步装置、芯片和计算机设备,数据处理方法。


背景技术:

2.在图形处理器、人工智能加速芯片中通常通过多进程提高处理器的算力以及实现数据的并行处理。大量并行工作的进程存在同步依赖关系,例如,一个进程中包括的指令需要在另一个进程中包括的指令发送完成的情况下才能进行发送。因此,有必要设计指令间的同步机制。然而,相关技术中的指令同步机制导致硬件系统的效率较低。


技术实现要素:

3.第一方面,本公开实施例提供一种指令同步装置,所述装置包括:计数器,以及多个指令队列;所述多个指令队列中的每个指令队列用于存储指令,所述指令包括执行指令,还包括触发指令和等待指令中的至少一者;所述计数器用于响应于接收到触发指令对计数值进行第一调整,以及响应于接收到等待指令对计数值进行第二调整;所述第一调整的调整方式和所述第二调整的调整方式不同;其中,一个指令队列中位于所述等待指令之后的指令在所述计数值满足预设数值条件的情况下被发送,所述预设数值条件基于所述计数器的计数初值、所述第一调整的调整方式和所述第二调整的调整方式确定。
4.在一些实施例中,所述每个指令队列用于对已存储的指令进行解析,将解析出的触发指令和等待指令发送至所述计数器,以及将解析出的执行指令发送至执行单元。
5.在一些实施例中,所述第一调整和所述第二调整中的一者的调整方式为按照第一预设步长增加所述计数值,另一者的调整方式为按照第二预设步长减少所述计数值;所述第一预设步长基于所述多个指令队列中与目标同步事件相关的等待队列的数量确定,所述第二预设步长基于所述多个指令队列中与所述目标同步事件相关的被等待队列的数量确定。
6.在一些实施例中,所述触发指令中携带所述第一预设步长,所述等待指令中携带所述第二预设步长。
7.在一些实施例中,所述第一预设步长等于所述等待队列的数量与预设倍数的乘积,所述第二预设步长等与所述被等待队列的数量与所述预设倍数的乘积。
8.在一些实施例中,所述预设数值条件基于所述计数初值、所述第一预设步长、所述第二预设步长以及预设倍数共同确定。
9.在一些实施例中,所述预设数值条件为:所述计数值与目标计数值满足预设的数值关系,所述目标计数值为:n*m*a-1 k0;其中,n为所述第一预设步长,m为所述第二预设步长,a为所述预设倍数,k0为所述计数初值;在所述第一调整的调整方式为增加所述计数值,所述第二调整的调整方式为减少所述计数值的情况下,所述数值关系为所述计数值大于所述目标计数值;在所述第一调整的调整方式为减少所述计数值,所述第二调整的调整方式
为增加所述计数值的情况下,所述数值关系为所述计数值小于所述目标计数值。
10.在一些实施例中,所述多个指令队列包括被等待队列和等待队列;所述被等待队列中包括多个触发指令,每个触发指令对应于一个同步事件,所述多个触发指令用于对同一个计数器的计数值进行调整;所述被等待队列中的第一触发指令之后还包括一个目标等待指令;所述等待队列中的各个第一等待指令之后还包括一个目标触发指令;所述被等待队列中的第i个第一触发指令和所述等待队列中的第i个第一等待指令为第i个同步事件对应的指令,i为正整数。
11.在一些实施例中,所述计数器的数量大于1;每个指令队列包括的触发指令和等待指令中均包括:计数器的标识信息,用于所述指令队列将所述指令队列包括的触发指令和等待指令发送至对应的计数器。
12.在一些实施例中,所述指令同步装置还包括:执行单元,用于对接收到的执行指令进行执行。
13.在一些实施例中,所述指令同步装置还包括:仲裁单元,用于按照预先设置的优先级,将所述多个指令队列中每个指令队列发送的执行指令发送至所述执行单元。
14.在一些实施例中,所述指令同步装置还包括:多路选择器,用于将所述指令发送至所述多个指令队列中对应的指令队列。
15.在一些实施例中,所述触发指令和所述等待指令中均包括:指令队列的标识信息,用于所述多路选择器将所述触发指令和所述等待指令发送至对应的指令队列。
16.第二方面,本公开实施例提供一种芯片,所述芯片包括:本公开任一实施例所述的指令同步装置。
17.第三方面,本公开实施例提供一种计算机设备,所述计算机设备包括:本公开任一实施例所述的芯片。
18.第四方面,本公开实施例提供一种数据处理方法,应用于本公开任一实施例所述的指令同步装置,所述方法包括:多个指令队列中的每个指令队列存储指令,所述指令包括执行指令,还包括触发指令和等待指令中的至少一者;计数器响应于接收到触发指令对计数值进行第一调整,并响应于接收到等待指令对计数值进行第二调整;所述第一调整的调整方式和所述第二调整的调整方式不同;所述每个指令队列在所述计数值满足预设数值条件的情况下,对本队列中位于所述等待指令之后的指令进行发送,所述预设数值条件基于所述计数器的计数初值、所述第一调整的调整方式和所述第二调整的调整方式确定。
19.在一些实施例中,所述方法还包括:所述每个指令队列对已存储的指令进行解析,将解析出的触发指令和等待指令发送至所述计数器,以及将解析出的执行指令发送至执行单元。
20.在一些实施例中,所述计数器响应于接收到触发指令对计数值进行第一调整,并响应于接收到等待指令对计数值进行第二调整,包括:响应于接收到触发指令按照第一预设步长增加所述计数值,并响应于接收到等待指令按照第二预设步长减少所述计数值;或者,响应于接收到触发指令按照第一预设步长减少所述计数值,并响应于接收到等待指令按照第二预设步长增加所述计数值。
21.在一些实施例中,所述第一预设步长基于所述多个指令队列中与目标同步事件相关的等待队列的数量确定,所述第二预设步长基于所述多个指令队列中与所述目标同步事
件相关的被等待队列的数量确定。
22.在一些实施例中,所述方法还包括:所述计数器获取所述触发指令中携带的所述第一预设步长,并获取所述等待指令中携带的所述第二预设步长。
23.在一些实施例中,所述第一预设步长等于所述等待队列的数量与预设倍数的乘积,所述第二预设步长等与所述被等待队列的数量与所述预设倍数的乘积。
24.在一些实施例中,所述预设数值条件基于所述计数初值、所述第一预设步长、所述第二预设步长以及预设倍数共同确定。
25.在一些实施例中,所述预设数值条件为:所述计数值与目标计数值满足预设的数值关系,所述目标计数值为:n*m*a-1 k0;其中,n为所述第一预设步长,m为所述第二预设步长,a为所述预设倍数,k0为所述计数初值。
26.在一些实施例中,所述方法还包括:所述每个指令队列在所述第一调整的调整方式为增加所述计数值,所述第二调整的调整方式为减少所述计数值的情况下,将所述数值关系确定为所述计数值大于所述目标计数值;所述每个指令队列在所述第一调整的调整方式为减少所述计数值,所述第二调整的调整方式为增加所述计数值的情况下,将所述数值关系确定为所述计数值小于所述目标计数值。
27.在一些实施例中,所述多个指令队列包括被等待队列和等待队列;所述被等待队列中包括多个触发指令,每个触发指令对应于一个同步事件,所述多个触发指令用于对同一个计数器的计数值进行调整;所述被等待队列中的第一触发指令之后还包括一个目标等待指令;所述等待队列中的各个第一等待指令之后还包括一个目标触发指令;所述第一触发指令和所述第一等待指令均为除最后一个同步事件以外的其余同步事件的对应的指令。
28.在一些实施例中,所述计数器的数量大于1;所述方法还包括:所述每个指令队列获取本队列中的触发指令和等待指令中包括的计数器的标识信息,基于本队列中的触发指令和等待指令中包括的计数器的标识信息,将本队列中的触发指令和等待指令发送至对应的计数器。
29.在一些实施例中,所述将解析出的执行指令发送至执行单元,包括:将解析出的执行指令发送至仲裁单元,以使所述仲裁单元按照预先设置的优先级,将所述多个指令队列中每个指令队列发送的执行指令发送至所述执行单元。
30.在一些实施例中,所述方法还包括:所述每个指令队列获取多路选择器发送的指令,对所述多路选择器发送的指令进行存储。
31.在一些实施例中,所述每个指令队列获取多路选择器发送的指令,包括:所述每个指令队列获取所述多路选择器基于所述指令中包括的指令队列的标识信息发送至本队列的指令。
32.本公开实施例通过在指令队列中插入触发指令和等待指令,并通过触发指令和等待指令对计数器的计数值进行调整,由于位于等待指令之后的指令在计数值满足预设数值条件的情况下才能被发送,因此,通过上述方式能够控制所述多个指令队列中指令的发送顺序,从而实现所述多个指令队列之间的指令同步。上述实施例采用硬件方式实现指令队列之间的同步,提高了硬件系统的效率。
33.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。
附图说明
34.此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
35.图1是指令同步过程的示意图。
36.图2是本公开实施例的指令同步装置的结构示意图。
37.图3是本公开实施例的指令同步方式的示意图。
38.图4是本公开另一实施例的指令同步方式的示意图。
39.图5a是本公开实施例的多个同步事件映射到同一个同步计数器时的指令同步方式的示意图。
40.图5b是图5a中的指令队列中的指令发送顺序的示意图。
41.图6是本公开另一实施例的指令同步装置的结构示意图。
42.图7是本公开实施例的数据处理方法的流程图。
具体实施方式
43.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
44.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合。
45.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
46.为了使本技术领域的人员更好的理解本公开实施例中的技术方案,并使本公开实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本公开实施例中的技术方案作进一步详细的说明。
47.在多进程并行处理的场景中,大量并行工作的进程存在同步依赖关系。例如,一个进程中包括的指令可能需要在另一个进程中包括的指令发送完成的情况下才能进行发送。
48.其中,指令可以先按照预先设置的分发规则下发到各个指令队列,不同指令队列中的指令之间可以存在依赖关系,也可以不存在依赖关系。在两个指令队列中的指令不存在依赖关系的情况下,这两个指令队列中的指令可以并行地进行发送,从而提高指令之间的并行程度;在两个指令队列中的指令存在依赖关系的情况下,可以通过设置这两个队列中的指令同步机制,保证存在依赖关系的指令按照一定的顺序进行发送。
49.参见图1,是一些实施例的指令同步的示意图。假设指令队列1中的指令q1和q2依
赖于指令队列2中的指令q1、q2和q3,即,指令q1和q2需要在指令q1、q2和q3均发送完成的情况下才能进行发送,则各指令的发送顺序如图中的时间轴所示。本领域技术人员可以理解,图中示出的指令发送顺序仅为一种示例性说明,在实际应用中,同一指令队列中的各个指令按照各指令存储到该指令队列的顺序依次发送,而不同指令队列之间不存在依赖关系的各指令可以按照任意的发送顺序进行发送。例如,指令q4的发送时间可以早于指令q3的发送时间,或者,指令q1也可以在指令q3与指令q4之间发送。但由于指令q1和q2依赖于指令q1、q2和q3,因此,指令q1、q2和q3的发送时间均早于指令q1,且均早于指令q2。
50.相关技术中,通过为每个指令队列部署指令计数器来对当前指令队列发送的指令进行计数,其他指令队列间通过等待对应指令队列的指令计数器的计数值实现同步。然而,这种指令同步方式中只有生产者没有消费者,会有溢出风险,并且每个指令队列中的指令能是相同类型的指令。为了解决上述问题,另一种相关技术中采用生产者-消费者模型,在每两个指令队列间部署状态同步计数器来实现指令同步。然而,这种方式中采用静态部署状态同步计数器的方式,假设指令队列的数量是n,则需要部署的状态同步计数器的数量是n*(n-1),造成计数器数量的浪费。为了解决该技术问题,有一种相关技术根据同步事件动态地分配状态同步计数器,然而,这种方式采用软件实现,降低了硬件系统的效率。
51.基于此,本公开实施例提供一种指令同步装置,参见图2和图6,所述装置包括:
52.计数器201,以及多个指令队列202;所述多个指令队列202中的每个指令队列(例如,指令队列1,指令队列2,指令队列3,指令队列4等等)用于存储指令,所述指令包括执行指令,还包括触发指令trigger和等待指令wait中的至少一者;
53.所述计数器201用于响应于接收到触发指令trigger对计数值进行第一调整,以及响应于接收到等待指令wait对计数值进行第二调整;所述第一调整的调整方式和所述第二调整的调整方式不同;
54.其中,一个指令队列202中位于所述等待指令wait之后的指令在所述计数值满足预设数值条件的情况下被发送,所述预设数值条件基于所述计数器201的计数初值、所述第一调整的调整方式和所述第二调整的调整方式确定。
55.在本实施例中,计数器(也称为同步计数器)201的数量可以大于或等于1,指令队列202的数量可以大于或等于2,图中示出了计数器201的数量以及指令队列202的数量均为4的情况,但本领域技术人员可以理解,图中所示的情况并非用于限制本公开,计数器201的数量和指令队列202的数量均可以根据实际需要设置为其他大于4或者小于4的数量,且计数器201的数量与指令队列202的数量可以相等,也可以不相等。
56.一个指令队列202可以用于存储执行指令,所述执行指令用于发送至执行单元进行执行。例如,所述执行指令可以包括但不限于加法指令、乘法指令、卷积乘指令等各种运算指令中的至少一种。执行单元可以响应于所述执行指令,对获取到的目标数据进行运算。所述目标数据可以是图像数据、语音数据、文本数据等各种形态的数据。
57.一个或多个指令队列中的指令可能与另外的一个或多个指令队列中的指令存在依赖关系。为了对存在依赖关系的指令进行指令同步,可以在指令队列中插入触发指令trigger和等待指令wait。各个指令队列中的指令在不同的时间可能存在不同的依赖关系,例如,在t1时刻,指令队列1中的指令需要等待指令2中的指令发送完成才能进行发送(这种情况称为指令队列1等待指令队列2,指令队列1称为等待队列,指令队列2称为被等待队
列);而在t2时刻,指令队列1中的指令与指令队列2之间中的指令不存在依赖关系;在t3时刻,指令队列2需要等待指令队列1。
58.在上述例子中,指令队列1等待指令队列2称为一个同步事件,一个同步事件中涉及的等待队列称为该同步事件对应的等待队列,一个同步事件中涉及的被等待队列称为该同步事件对应的被等待队列。同一个指令队列可能对应于一个或多个同步事件,例如,在某一时刻,指令队列1中的一条指令需要等待指令队列2中的一条指令发送完成才能进行发送;在另一时刻,指令队列1中的一条指令需要等待指令队列3中的两条指令发送完成才能进行发送;在再一时刻,指令队列4中的三条指令需要等待指令队列1中的两条指令发送完成才能进行发送。则在上述例子中,指令队列1分别对应于3个同步事件。
59.为了便于理解,下面先以两个存在依赖关系的指令队列为例进行说明。首先,指令队列在接收到指令之后,可以按照接收各指令的顺序,对各指令进行存储,还可以对存储的指令进行解析。各指令中均可包括该指令所属的类型,指令队列可以根据指令的类型确定指令是执行指令、触发指令还是等待指令。参见图3,其中,指令1、指令2、指令3等表示执行指令,trigger和wait分别表示触发指令和等待指令,指令队列1中处于等待指令之后的指令需要等待指令队列2中处于触发指令之前的各指令均发送完成,才能进行发送。指令队列在解析出执行指令之后,可以将执行指令发送至执行单元;在解析出触发指令或等待指令之后,可以将触发指令或等待指令发送至计数器201。
60.触发指令和等待指令可以分别触发计数器的计数值以第一调整方式和第二调整方式进行调整。例如,通过向计数器发送触发指令,可以触发计数器增加计数值,通过向计数器发送等待指令,可以触发计数器减少计数值。或者,通过向计数器发送触发指令,可以触发计数器减少计数值,通过向计数器发送等待指令,可以触发计数器增加计数值。
61.在一些实施例中,所述第一调整和所述第二调整中的一者的调整方式为按照第一预设步长增加所述计数值,另一者的调整方式为按照第二预设步长减少所述计数值。例如,每条触发指令可以触发计数器将计数值加1,每条等待指令可以触发计数器将计数值减1。当然,除了将1作为第一预设步长和第二预设步长之外,还可以将其他正整数作为第一预设步长和第二预设步长。例如,在图3所示的实施例中,第一预设步长和第二预设步长可以均为2。在这种情况下,每条触发指令可以触发计数器将计数值加2,每条等待指令可以触发计数器将计数值减2。在一个目标同步事件中,在等待队列的数量与被等待队列的数量不同的情况下,第一预设步长可以不相等。具体来说,所述第一预设步长基于所述多个指令队列中与目标同步事件相关的等待队列的数量确定,所述第二预设步长基于所述多个指令队列中与所述目标同步事件相关的被等待队列的数量确定。例如,假设等待队列的数量为n,且被等待队列的数量为m的情况下,可以将第一预设步长设置为n*a,并将第二预设步长设置为m*a,其中,a为正整数。
62.在一些实施例中,所述触发指令中携带所述第一预设步长,所述等待指令中携带所述第二预设步长。由于指令中携带步长信息,因此,计数器可以在接收到触发指令或等待指令之后,直接从上述指令中读取到对应的步长信息,从而确定增加或减少计数值的步长。进一步地,触发指令还可以携带用于表征所述第一调整的调整方式的标识信息,等待指令中还可以携带用于表征所述第二调整的调整方式的标识信息,从而使计数器确定采用何种调整方式对计数器的步长进行调整。
63.一个指令队列中位于所述等待指令之后的指令,只有在计数器的计数值满足预设数值条件的情况下被发送,这样,可以基于计数器的计数值控制指令队列中的指令的发送顺序,从而实现所述多个指令队列之间的指令同步。在一些实施例中,所述预设数值条件基于所述计数初值、所述第一预设步长、所述第二预设步长以及预设倍数共同确定。具体来说,所述预设数值条件可以是计数器的计数值与目标计数值满足预设的数值关系。其中,可以确定所述第一预设步长、所述第二预设步长以及预设倍数的乘积,对所述乘积与所述计数初值进行求和,基于求和结果确定所述数值关系。假设将所述第一预设步长记为n,将所述第二预设步长记为m,将所述预设倍数记为a,将所述计数初值记为k0,则所述目标计数值可以记为n*m*a-1 k0。
64.在不同的情况下,可以确定不同的数值关系。例如,在方式一中,所述第一调整的调整方式为增加所述计数值,所述第二调整的调整方式为减少所述计数值,则所述数值关系为所述计数值大于所述目标计数值。在方式二中,所述第一调整的调整方式为减少所述计数值,所述第二调整的调整方式为增加所述计数值,则所述数值关系为所述计数值小于所述目标计数值。下面以上述方式一为例,对本公开实施例的方案进行说明。
65.在图3所示的实施例中,m和n均等于1,并假设预设倍数a也等于1,且计数器的计数初值为0。指令队列1中的指令4和指令5需要等指令队列2中的指令1和指令2发送完成再进行发送。因此,可以在指令队列2中的指令2之后插入触发指令trigger,并在指令队列1中的指令4之前插入等待指令wait。指令队列2可以对本队列中的各指令进行解析,并对解析后的指令进行顺序发送。其中,指令1和指令2均为执行指令,可以依次发送至执行单元。与此同时,指令队列1可以并行地对本队列中的执行指令(即指令1、指令2和指令3)进行发送。上述两个指令队列中的指令1、指令2等标号相同的指令,可以是相同的指令,也可以是不同的指令,这里指令的标号只是用于表示该指令在所属指令队列中的相对位置,并非用于表示指令的内容或类型。由于不同指令队列中不存在依赖关系的各指令的发送完成时间是随机的,因此,既可能出现指令队列1中的指令3比指令队列2中的指令2先完成发送的情况,也可能出现指令队列2中的指令2比指令队列1中的指令3先完成发送的情况。
66.无论是上述哪种情况,由于在两个指令队列中分别插入了触发指令和等待指令,指令队列2在解析到触发指令trigger后,会将触发指令trigger发送给计数器,计数器接收到触发指令trigger后,将计数值加1。指令队列1在解析到等待指令wait后,可以读取计数器的计数值,只有当计数器的计数值大于0的情况下,指令队列1才会对等待指令wait以及等待指令wait之后的各个指令进行发送,否则不发送等待指令wait以及等待指令wait之后的各个指令。而计数器在接收到等待指令wait的情况下,可以将计数值减1。通过上述方式,就完成了一次同步事件。如果两个指令队列之间还有其他的同步事件,则继续根据上述过程进行指令同步即可。
67.在图4所示的更为通用的情况下,m和n均为大于1的正整数,且m和n可以不相等,这种情况称为n个指令队列等待m个指令队列。其中,各个等待队列(即计数器上方的指令队列1到指令队列n)中的指令4和指令5均需要等待所有的被等待队列(即计数器下方的指令队列1到指令队列m)中的指令3发送完成才能进行发送。假设计数初值为0,预设倍数a为1,则每个被等待队列(例如指令队列1)向计数器发送完触发指令之后,计数器的计数值可以加n,从而所有被等待队列均向计数器发送完触发指令之后,计数器的数值为n*m。每个等待队
列在解析到等待指令的情况下,可以读取计数器的计数值,如果计数值大于n*m-1,则该等待队列可以发送等待指令,以使计数器将计数值减m,在所有等待队列均发送完等待指令之后,计数器的计数值回到0。这样,就完成了一次同步事件。
68.当然,图中所示的情况只是一种示例性说明,在实际应用中,各个等待队列中处于等待状态的指令在所属的指令队列中的位置可以不同,各个被等待队列中处于被等待状态的指令在所属的指令队列中的位置也可以不同。
69.在采用上述方式二确定所述数值关系的实施例中,同步事件的同步过程与图3和图4所示的实施例类似,此处不再赘述。区别仅在于,计数器在接收到触发指令后,将计数值从计数初值(例如,5)减去相应数值,计数器在接收到等待指令之后,将计数值增加相应数值,只有在计数值小于计数初值的情况下,等待才能继续发送指令。如此,同样完成了一次同步事件。
70.在多个同步事件映射到一个计数器的情况下,在后的同步事件中的触发指令可能会对在前的同步事件中的等待指令产生误触发。参见图5a和图5b,假设存在两个同步事件,分别为:(1)指令队列1、2等待指令队列3、4、5;以及(2)指令队列1、2等待指令队列3。其中,指令队列3、指令队列4和指令队列5中的trigger1以及指令队列1和指令队列2中的wait1对应于第一个同步事件,指令队列3中的trigger2以及指令队列1和指令队列2中的wait2对应于第二个同步事件。按照前述实施例中插入触发指令和等待指令的方式得到的各个指令队列如图5a中的情况一所示,由于每个指令队列发送trigger的时间随机,在一些情况下,指令队列3中的触发指令trigger2可能比指令队列4发送触发指令trigger1的时间要早,各指令的发送时间顺序如图5b中情况一的指令发送顺序所示。为了简洁,图中仅示出了指令队列3、4、5中的触发指令的发送顺序。
71.假设计数初值为0,计数器每收到一个触发指令,将计数值加n,每收到一个等待指令,将计数值减m,n和m分别为一个同步事件中等待队列的数量和被等待队列的数量。在上述第一个同步事件中,n为2,m为3,即,在计数器的计数值大于5时,可以发送等待队列中的等待指令以及位于等待指令之后的执行指令。在本实施例中,由于指令队列3的trigger2比指令队列4的trigger1先发送,因此,在指令队列4发送trigger1之后,计数器的计数值将达到6,会触发等待队列发送相关指令。而实际的情况却是,指令队列5的trigger1尚未发送,等待队列中的相关指令并不满足发送条件。可见,在上述情况下,指令队列3中的trigger2会误触发同步事件1的wait。
72.为了解决上述问题,本公开实施例中所述多个指令队列包括被等待队列和等待队列;所述被等待队列中包括多个触发指令,每个触发指令对应于一个同步事件,所述多个触发指令用于对同一个计数器的计数值进行调整;所述被等待队列中的第一触发指令之后还包括一个目标等待指令;所述等待队列中的各个第一等待指令之后还包括一个目标触发指令;所述被等待队列中的第i个第一触发指令和所述等待队列中的第i个第一等待指令为第i个同步事件对应的指令,i为正整数。
73.其中,等待队列的数量可以大于或等于1,被等待队列的数量也可以大于或等于1,不同的同步事件对应的第一触发指令可以来自一个或多个被等待队列,不同的同步事件对应的第一等待指令可以来自一个或多个等待队列。假设同步事件的总数为n,则第1个同步事件对应的第一触发指令,第2个同步事件对应的第一触发指令,
……
,第n-1个同步事件对
应的第一触发指令之后,各包括一个目标等待指令;且第1个同步事件对应的第一等待指令,第2个同步事件对应的第一等待指令,
……
,第n-1个同步事件对应的第一等待指令之后,各包括一个目标触发指令。第n个同步事件对应的第一触发指令之后可以包括,也可以不包括目标等待指令,第n个同步事件对应的第一等待指令之后可以包括,也可以不包括目标触发指令。
74.如果某个同步事件对应的第一触发指令来自多个被等待队列,则这多个被等待队列中的每个被等待队列中的第一触发指令之后均包括一个目标等待指令。例如,一个同步事件为指令队列2中的指令1等待指令队列3中的指令2和指令队列4中的指令3,则指令队列3和指令队列4中均包括该同步事件对应的第一触发指令,从而指令队列3中的第一触发指令之后包括一个目标等待指令,且指令队列4中的第一触发指令之后也包括一个目标等待指令。同理,如果某个同步事件对应的第一等待指令来自多个等待队列,则这多个等待队列中的每个等待队列中的第一触发指令之后均包括一个目标触发指令。例如,一个同步事件为指令队列1中的指令1和指令队列2中的指令1等待指令队列3中的指令2,则指令1和指令队列2中均包括该同步事件对应的第一等待指令,从而指令队列1中的第一等待指令之后包括一个目标触发指令,且指令队列2中的第一等待指令之后也包括一个目标触发指令。
75.参见图5a中的情况二以及图5b中情况二的指令发送顺序,上述第一触发指令即为指令队列3中的trigger1,目标等待指令即为位于指令队列3中的trigger1之后的wait,上述第一等待指令即为指令队列1中的wait1和指令队列2中的wait1,上述目标触发指令即为位于指令队列1中的wait1之后的trigger以及位于指令队列2中的wait1之后的trigger。在指令队列3中的指令发送较快的情况下,指令队列3中的trigger1可能先发送,但由于在指令队列3中的trigger1之后插入了wait,因此,在指令队列3中的trigger1发送完成,而指令队列4和指令队列5中的trigger1未发送完成的情况下,指令队列3中的wait并不满足发送条件,从而指令队列3中的trigger1发送完成之后会进入等待状态。同样地,指令队列1中的wait1和指令队列2中的wait1会使指令队列1和指令队列2也进入等待状态。因此,指令队列4中的trigger1和指令队列5中的trigger1会先发送。这样,就保证了第一个同步事件的wait都正常发生后,第二个同步事件的trigger才能生效。
76.在图5a和图5b所示的实施例中,映射到同一个计数器的同步事件的数量为2,即,存在至少一个被等待队列(图中是指令队列3)分别对应于两个同步事件。在实际应用中,映射到同一个计数器的同步事件的数量也可以大于2,并且,也可以存在一个以上被等待队列分别对应于多个同步事件。此外,虽然图中示出的两个同步事件中的等待队列是相同的(都是指令队列1和指令队列2),但在实际应用中,不同事件中的等待队列也可以是部分相同,或者完全不同的。此外,第一触发指令之后的目标等待指令的位置并不一定要紧邻第一触发指令,只要处于第一触发指令与该第一触发指令之后的下一个第一触发指令之间即可。同理,第一等待指令之后的目标触发指令的位置并不一定要紧邻第一等待指令,只要处于第一等待指令与该第一等待指令之后的下一个第一等待指令之间即可。例如,在图5a的情况二中所示的指令队列3中,trigger1后的wait可以处于trigger1与trigger2之间的任意一个位置上。在图5a的情况二中所示的指令队列2中,wait1后的trigger可以处于wait1与wait2之间的任意一个位置上。在上述情况下,同样可以通过插入目标等待指令和目标触发指令的方式来避免同步事件的误触发,此处不再赘述。
77.在一些实施例中,计数器201的数量大于1。在这种情况下,每个指令队列包括的触发指令和等待指令中均可以包括计数器的标识信息,用于所述指令队列将所述指令队列包括的触发指令和等待指令发送至对应的计数器。或者,也可以将触发指令的标识信息和等待指令的标识信息分别与计数器的标识信息进行绑定,从而使指令队列将触发指令和等待指令发送至对应的计数器。
78.在一些实施例中,所述指令同步装置还包括执行单元203,用于对接收到的执行指令进行执行。执行单元的数量可以大于或等于1,一个执行单元可以接收并处理一个或多个指令队列的执行指令。其中,一个执行单元可以是具有指令执行功能的处理单元中的一个子单元,该处理单元可以按照不同的粒度划分为多组执行单元,每组执行单元可以用于执行一项处理任务(例如,加法运算)。在不同的情况下,可以根据不同的实际需求采用不同的划分粒度。例如,假设处理单元中包括r个执行单元,这r个执行单元可以划分为s1组,每组包括r1个执行单元,也可以划分为s2组,每组包括r2个执行单元,其中,r=s1*r1=s2*r2。这种划分方式灵活性较高,在一项处理任务所需的执行单元数量较少的情况下,可以将执行单元划分为较多的组,从而提高任务处理的并行度。执行单元在对指令处理完成的情况下,还可以返回一个响应信号(ack)给仲裁单元,以便仲裁单元继续发送新的指令。
79.在一些实施例中,所述指令同步装置还包括仲裁单元204,用于按照预先设置的优先级,将所述多个指令队列中每个指令队列发送的执行指令发送至所述执行单元。仲裁单元204的数量可以大于或等于1,图中示出了仲裁单元的数量与指令队列的数量相等的情况,但在实际应用中,二者的数量也可以不相等。
80.在一些实施例中,所述指令同步装置还包括多路选择器205,用于将所述指令发送至所述多个指令队列中对应的指令队列。在一些实施例中,所述触发指令和所述等待指令中均包括指令队列的标识信息,用于所述多路选择器205将所述触发指令和所述等待指令发送至对应的指令队列。
81.本公开提供了一种硬件实现的指令队列状态同步计数器的动态部署机制,节省了计数器开销,消除了消除溢出风险;同时,采用硬件实现计数器的动态部署,也实现了高效灵活的多进程调度。本公开实施例具有很强的扩展性,可根据需求调整状态计数器的数量、指令队列的数量,以及执行单元的数量。本公开实施例的指令同步装置可应用于人工智能芯片、图形处理芯片等处理芯片中,实现高效灵活的指令队列部署和调度,进而提高执行单元的并行效率。
82.上述实施例中的各种指令,包括触发指令、等待指令、执行指令,可以预先通过离线编译的方式生成。各指令可以在离线编译时按照所需的顺序依次生成并发送至指令队列。
83.在一些实施例中,本公开还提供一种芯片,所述芯片包括本公开任一实施例所述的指令同步装置。上述芯片可以是人工智能芯片或图形处理芯片,也可以是其他类型的处理芯片。本芯片实施例中的指令同步装置的细节可以参照前述指令同步装置的实施例,此处不再赘述。
84.本公开实施例还提供一种计算机设备,所述计算机设备包括本公开任一实施例所述的芯片。其中,该芯片的具体功能可以参照上文芯片实施例的描述,为了简洁,这里不再赘述。
85.如图7所示,本公开实施例还提供一种数据处理方法,应用于本公开任一实施例所述的指令同步装置,所述方法包括:
86.步骤701:多个指令队列中的每个指令队列存储指令,所述指令包括执行指令,还包括触发指令和等待指令中的至少一者;
87.步骤702:计数器响应于接收到触发指令对计数值进行第一调整,并响应于接收到等待指令对计数值进行第二调整;所述第一调整的调整方式和所述第二调整的调整方式不同;
88.步骤703:所述每个指令队列在所述计数值满足预设数值条件的情况下,对本队列中位于所述等待指令之后的指令进行发送,所述预设数值条件基于所述计数器的计数初值、所述第一调整的调整方式和所述第二调整的调整方式确定。
89.在一些实施例中,所述方法还包括:所述每个指令队列对已存储的指令进行解析,将解析出的触发指令和等待指令发送至所述计数器,以及将解析出的执行指令发送至执行单元。
90.在一些实施例中,所述计数器响应于接收到触发指令对计数值进行第一调整,并响应于接收到等待指令对计数值进行第二调整,包括:响应于接收到触发指令按照第一预设步长增加所述计数值,并响应于接收到等待指令按照第二预设步长减少所述计数值;或者,响应于接收到触发指令按照第一预设步长减少所述计数值,并响应于接收到等待指令按照第二预设步长增加所述计数值。
91.在一些实施例中,所述第一预设步长基于所述多个指令队列中与目标同步事件相关的等待队列的数量确定,所述第二预设步长基于所述多个指令队列中与所述目标同步事件相关的被等待队列的数量确定。
92.在一些实施例中,所述方法还包括:所述计数器获取所述触发指令中携带的所述第一预设步长,并获取所述等待指令中携带的所述第二预设步长。
93.在一些实施例中,所述第一预设步长等于所述等待队列的数量与预设倍数的乘积,所述第二预设步长等与所述被等待队列的数量与所述预设倍数的乘积。
94.在一些实施例中,所述预设数值条件基于所述计数初值、所述第一预设步长、所述第二预设步长以及预设倍数共同确定。
95.在一些实施例中,所述预设数值条件为:所述计数值与目标计数值满足预设的数值关系,所述目标计数值为:n*m*a-1 k0;其中,n为所述第一预设步长,m为所述第二预设步长,a为所述预设倍数,k0为所述计数初值。
96.在一些实施例中,所述方法还包括:所述每个指令队列在所述第一调整的调整方式为增加所述计数值,所述第二调整的调整方式为减少所述计数值的情况下,将所述数值关系确定为所述计数值大于所述目标计数值;所述每个指令队列在所述第一调整的调整方式为减少所述计数值,所述第二调整的调整方式为增加所述计数值的情况下,将所述数值关系确定为所述计数值小于所述目标计数值。
97.在一些实施例中,所述多个指令队列包括被等待队列和等待队列;所述被等待队列中包括多个触发指令,每个触发指令对应于一个同步事件,所述多个触发指令用于对同一个计数器的计数值进行调整;所述被等待队列中的第一触发指令之后还包括一个目标等待指令;所述等待队列中的各个第一等待指令之后还包括一个目标触发指令;所述第一触
发指令和所述第一等待指令均为除最后一个同步事件以外的其余同步事件的对应的指令。
98.在一些实施例中,所述计数器的数量大于1;所述方法还包括:所述每个指令队列获取本队列中的触发指令和等待指令中包括的计数器的标识信息,基于本队列中的触发指令和等待指令中包括的计数器的标识信息,将本队列中的触发指令和等待指令发送至对应的计数器。
99.在一些实施例中,所述将解析出的执行指令发送至执行单元,包括:将解析出的执行指令发送至仲裁单元,以使所述仲裁单元按照预先设置的优先级,将所述多个指令队列中每个指令队列发送的执行指令发送至所述执行单元。
100.在一些实施例中,所述方法还包括:所述每个指令队列获取多路选择器发送的指令,对所述多路选择器发送的指令进行存储。
101.在一些实施例中,所述每个指令队列获取多路选择器发送的指令,包括:所述每个指令队列获取所述多路选择器基于所述指令中包括的指令队列的标识信息发送至本队列的指令。
102.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
103.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
104.以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献