一种AI处理器、电子部件及电子设备转让专利

申请号 : CN202210763893.X

文献号 : CN114880101B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何浩王平

申请人 : 成都登临科技有限公司上海登临科技有限公司

摘要 :

本申请提供一种AI处理器、电子部件及电子设备,AI处理器包括:任务切分电路,用于将接收到的任务分别切分为多个子任务;子任务调度模块,用于将所述子任务分配给对应的硬件执行单元;所述硬件执行单元,用于执行所分配的所述子任务。本申请通过在AI处理器中设置用于对任务进行切分的任务切分电路和用于对任务进行调度的子任务调度模块,从而可以将对任务的切分以及调度工作从软件程序上转移至AI处理器的硬件电路中,从而不再需要引入巨大的软件开销,使得宿主机处理器可以将更多资源投入到与AI处理器需配合的其他事项上,从而可以更充分地发挥AI处理器的处理能力。

权利要求 :

1.一种AI处理器,其特征在于,包括:

多个硬件执行单元;

任务切分电路,用于将接收到的任务分别切分为多个子任务;所述任务切分电路为可以实现数据切割的电路;

子任务调度模块,用于将所述子任务分配给所述多个硬件执行单元中与该子任务匹配的硬件执行单元,以使匹配的所述硬件执行单元执行被分配的所述子任务;

其中,所述子任务调度模块包括:子任务调度器和指令读取译码单元;所述AI处理器还包括指令队列,所述指令队列设置于所述指令读取译码单元与所述硬件执行单元之间,且每一个所述指令队列对应有一个所述硬件执行单元;

所述子任务调度器,用于获取一个或多个所述子任务,并保存所述子任务的任务信息;

所述指令读取译码单元,用于根据所述任务信息获取所述子任务对应的待处理指令并进行译码,根据译码结果将所述子任务对应的待处理指令,分配给目标硬件执行单元对应的指令队列中进行存储,所述目标硬件执行单元用于从自身所对应的指令队列中获取被分配的待处理指令并执行。

2.如权利要求1所述的AI处理器,其特征在于,每一个所述硬件执行单元对应多个所述指令队列,且每一个所述硬件执行单元对应的多个所述指令队列,分别用于存放不同任务的待处理指令。

3.如权利要求2所述的AI处理器,其特征在于,所述AI处理器还包括:指令调度器,设置于所述硬件执行单元与该硬件执行单元对应的多个所述指令队列之间,用于在所述硬件执行单元空闲时,从该硬件执行单元对应的任一个所述指令队列中取出一条待处理指令发送给该硬件执行单元。

4.如权利要求1‑3任一项所述的AI处理器,其特征在于,针对任一个所述任务,所述子任务调度模块每次仅获取该任务的一个子任务,且在该子任务执行完毕后,再获取该任务的下一个子任务。

5.如权利要求1‑3任一项所述的AI处理器,其特征在于,所述AI处理器具有多个所述任务切分电路。

6.如权利要求5所述的AI处理器,其特征在于,所述任务切分电路的数量与每一个所述硬件执行单元对应的指令队列的数量相同;

每个所述任务切分电路具体用于,在该任务切分电路需切分的任务为多个时,依次切分各所述任务,且在当前已切分的任务的所有子任务均执行完毕后,将下一个任务切分为多个子任务。

7.如权利要求5所述的AI处理器,其特征在于,所述AI处理器还包括:多个缓冲器,分别设置于各所述任务切分电路和所述子任务调度模块之间,且每一个所述缓冲器对应有一个所述任务切分电路;

每一个所述任务切分电路还用于,将切分得到的所述子任务发送至该任务切分电路对应的所述缓冲器中;

所述子任务调度模块具体用于,从各所述缓冲器中获取所述子任务,并将从所述缓冲器中得到的所述子任务分配给匹配的硬件执行单元。

8.一种电子部件,其特征在于,所述电子部件中具有如权利要求1‑7任一项所述的AI处理器。

9.一种电子设备,其特征在于,所述电子设备具有如权利要求1‑7任一项所述的AI处理器,或具有如权利要求8所述的电子部件。

说明书 :

一种AI处理器、电子部件及电子设备

技术领域

[0001] 本申请涉及处理器技术领域,具体而言,涉及一种AI处理器、电子部件及电子设备。

背景技术

[0002] AI(Artificial Intelligence,人工智能)处理器通常包含多个不同的硬件执行单元以完成不同的指令。硬件执行单元包括处理卷积任务的乘累加单元、处理向量任务的向量单元、数据载入单元、数据存储单元等等。然而,很多情况下计算任务并不会用到所有的硬件执行单元。例如,大多数情况下,处理任务时,同一时刻仅会使用乘累加单元和向量处理单元中的一个。为了不让硬件资源空闲,需要AI处理器具备任务级并行的能力,比如在执行一个矩阵乘任务的同时,执行另外的向量处理任务。
[0003] 目前,常见的任务级并行实现方式是,通过AI处理器所在宿主机的软件将任务切分成子任务,然后由软件调度不同的子任务给AI处理器,以充分利用AI处理器的硬件资源。硬件执行单元执行完成以后,软件再进行子任务之间的同步。这种实现方式的缺点是引入巨大的软件开销,对宿主机的处理能力提出很高的要求,导致系统的性能短板出现在宿主机的处理器上,不能充分发挥AI处理器的处理能力。

发明内容

[0004] 本申请实施例的目的在于提供一种AI处理器、电子部件及电子设备,用以解决上述问题。
[0005] 本申请实施例提供了一种AI处理器,包括:多个硬件执行单元;任务切分电路,用于将接收到的任务分别切分为多个子任务;子任务调度模块,用于将所述子任务分配所述多个硬件执行单元中与该子任务匹配的硬件执行单元,以使匹配的所述硬件执行单元执行被分配的所述子任务。
[0006] 在上述实现过程中,通过在AI处理器中设置用于对任务进行切分的任务切分电路和用于对任务进行调度的子任务调度模块,从而可以将对任务的切分以及调度工作从软件程序上转移至AI处理器的硬件模块中,从而不再需要引入巨大的软件开销,使得宿主机处理器可以将更多资源投入到与AI处理器需配合的其他事项上,从而可以更充分地发挥AI处理器的处理能力。
[0007] 作为一种可选实施方式,所述子任务调度模块包括:子任务调度器,用于获取一个或多个所述子任务,并保存所述子任务的任务信息;指令读取译码单元,用于根据所述任务信息获取所述子任务对应的待处理指令并进行译码,根据译码结果将所述子任务对应的待处理指令分配给所述待处理指令对应的硬件执行单元;所述硬件执行单元,具体用于执行被分配的待处理指令。
[0008] 应理解,在实际应用过程中,硬件执行单元执行的是一个一个的指令。而对于一个任务而言,其对应有大量的指令。将任务切分为多个子任务后,一个子任务可能会对应有一个或多个指令。而在上述实现过程中,通过子任务调度器来对子任务的任务信息进行保存后,指令读取译码单元即可基于所保存的任务信息,逐个获取到子任务对应的指令进行译码,从而确定出该指令对应的硬件执行单元,进行指令的分配。这样,通过子任务调度器和指令读取译码单元即可保证对于子任务的可靠分配,实现对于子任务的正确调度。
[0009] 作为一种可选实施方式,所述AI处理器还包括:指令队列;所述指令队列设置于所述指令读取译码单元与所述硬件执行单元之间,且每一个所述指令队列对应有一个所述硬件执行单元;相应的,所述指令读取译码单元,具体用于将所述子任务对应的待处理指令,分配至目标硬件执行单元对应的指令队列中存储;所述目标硬件执行单元为所述待处理指令对应的硬件执行单元;所述目标硬件执行单元,具体用于从自身所对应的指令队列中获取待处理指令并执行。
[0010] 在上述实现过程中,通过设置指令队列的方式,可以在一定程度上实现指令读取译码单元与硬件执行单元之间的解耦,可以实现在硬件执行单元执行指令的过程中,只要指令队列中的指令未溢出,指令读取译码单元就可以不断进行指令的获取与分配,从而可以在一定程度上提高AI处理器的整体处理效率。
[0011] 作为一种可选实施方式,每一个所述硬件执行单元对应多个所述指令队列,且每一个所述硬件执行单元对应的多个所述指令队列,分别用于存放不同任务的待处理指令。
[0012] 在上述实现过程中,通过为每一个硬件执行单元配置对应的多个指令队列,且每一个硬件执行单元对应的不同指令队列,分别用于存放不同任务对应的待处理指令,这就可以基于这多个指令队列,使得每一个硬件执行单元可以对多个任务的待处理指令都具有执行的能力,从而可以使得不同硬件执行单元并行执行不同的任务的指令,实现指令级的多任务并行执行,降低出现某一或某些硬件执行单元被闲置的概率,提高AI处理器的资源利用率。
[0013] 作为一种可选实施方式,所述AI处理器还包括:指令调度器,设置于所述硬件执行单元与该硬件执行单元对应的多个所述指令队列之间,用于在所述硬件执行单元空闲时,从该硬件执行单元对应的任一个所述指令队列中取出一条待处理指令发送给该硬件执行单元。
[0014] 在上述实现过程中,通过指令调度器的作用,可以保证多个指令队列之间的指令有序获取,避免出现多个指令队列同时向硬件执行单元输出指令,产生处理逻辑错误的情况。
[0015] 作为一种可选实施方式,针对任一个所述任务,所述子任务调度模块每次仅获取该任务的一个子任务,且在该子任务执行完毕后,再获取该任务的下一个子任务。
[0016] 在上述实现过程中,对任一个任务而言,如果该任务的各子任务之间具有执行依赖关系(即在后执行的子任务需要依赖在先执行的子任务的执行结果),通过上述过程可以保证任务中各子任务是按序执行的,从而可以避免出现任务中各子任务之间具有执行依赖关系时,在先的子任务还未执行完毕,而在后的子任务就开始执行,从而产生处理逻辑错误的情况。
[0017] 作为一种可选实施方式,所述AI处理器具有多个所述任务切分电路。
[0018] 在上述实现过程中,通过配置多个任务切分电路,通过多个任务切分电路,可以同时实现对多个任务的切分,从而在AI处理器接收到多个任务时,可以同时进行不高于该任务切分电路的数量的多个任务的切分,从而实现对于这多个任务的并行处理,降低AI处理器内硬件执行单元的闲置概率,提高AI处理器的资源利用率。
[0019] 作为一种可选实施方式,所述任务切分电路的数量与每一个所述硬件执行单元对应的指令队列的数量相同;每个所述任务切分电路具体用于,在该任务切分电路需切分的任务为多个时,依次切分各所述任务,且在当前已切分的任务的所有子任务均执行完毕后,将下一个任务切分为多个子任务。
[0020] 在上述实现过程中,一方面通过配置任务切分电路的数量和每一个硬件执行单元对应的指令队列的数量相同,另一方面通过配置任务切分电路在当前已切分的任务的所有子任务均执行完毕后,才对下一个任务进行切分,这就可以控制同一时刻内子任务调度模块所调度的任务数量,保证同一时刻内子任务调度模块所调度的任务数量,不会超过每一个硬件执行单元对应的指令队列的数量,从而可以避免出现任务数量过多而无法进行调度的情况,保证AI处理器内的处理逻辑的正确。例如针对每个硬件执行单元仅对应有5个指令队列,但存在六种任务对应的指令,则至少有一种任务的指令没有对应的指令队列,不能进行对应存储的情况,通过上述实施方式可避免这种情况,可以避免任务数量过多而造成调度困难。
[0021] 作为一种可选实施方式,所述AI处理器还包括:多个缓冲器,分别设置于各所述任务切分电路和所述子任务调度模块之间,且每一个所述缓冲器对应有一个所述任务切分电路;每一个所述任务切分电路还用于,将切分得到的所述子任务发送至该任务切分电路对应的所述缓冲器中;所述子任务调度模块具体用于,从各所述缓冲器中获取所述子任务,并将所述子任务分配给对应的所述硬件执行单元。
[0022] 在上述实现过程中,通过为各任务切分电路设置缓冲器,并将各任务切分电路切分得到的子任务先发送至对应的缓冲器中,这就使得子任务调度模块可以从各缓冲器中依次获取子任务,一方面保证了每个任务的各子任务可以按序获取,保证具有依赖关系的子任务,可以基于该依赖关系被进行调度与执行,另一方面可以使得子任务调度模块可以按照处理能力进行子任务的获取,避免出现同一时间大量子任务到达子任务调度模块,超出子任务调度模块的处理能力的情况。
[0023] 本申请实施例还提供了一种电子部件,所述电子部件中具有上述任一种的AI处理器。
[0024] 本申请实施例还提供了一种电子设备,所述电子设备具有上述任一种AI处理器,或具有上述的电子部件。

附图说明

[0025] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
[0026] 图1为本申请实施例提供的一种AI处理器的基本结构示意图;
[0027] 图2为本申请实施例提供的一种AI处理器的细化结构示意图;
[0028] 图3为本申请实施例提供的一种具有指令队列的AI处理器细化结构示意图;
[0029] 图4为本申请实施例提供的一种每一个硬件执行单元对应有多个指令队列的AI处理器细化结构示意图;
[0030] 图5为本申请实施例提供的一种具有指令调度器的AI处理器细化结构示意图;
[0031] 图6为本申请实施例提供的一种在任务切分电路和子任务调度模块之间设置缓冲器的AI处理器细化结构示意图;
[0032] 图7为本申请实施例提供的一种具体的AI处理器结构示意图。

具体实施方式

[0033] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。需要说明的是,在不冲突的情况下,本申请提供的各实施例、实施例中的各实施方式以及特征可以相互组合。
[0034] 鉴于现有的任务级并行实现方式需要引入巨大的软件开销,对宿主机的处理能力要求高,导致系统的性能短板出现在宿主机处理器上(软件运行在处理器上),不能充分发挥AI处理器的处理能力,本申请实施例提供了一种新的AI处理器。
[0035] 如图1所示,图1为本申请实施例提供的一种AI处理器的基本结构示意图,该AI处理器包括任务切分电路、子任务调度模块和多个硬件执行单元(例如图1中的硬件执行单元0、硬件执行单元1……硬件执行单元m)。其中:
[0036] 任务切分电路,用于将接收到的任务切分为多个子任务。子任务调度模块,用于将子任务分配给多个硬件执行单元中与该子任务匹配的硬件执行单元。硬件执行单元,用于执行所分配的子任务。
[0037] 需要说明的是,在本申请实施例中,任务切分电路的具体结构可以采用已有的各类可以实现数据切割的电路来实现,本申请实施例中不做限制,只要能够将任务切分为多个子任务即可。示例性的,任务切分电路可以采用已有的各类对张量数据进行维度切分的电路实现,从而可以将任务作为一个张量,按照不同维度进行切分,得到多个子任务。在一个应用场景下,任务切分电路可将接收到的每个任务都分别切分为多个子任务。
[0038] 子任务调度模块每次可将一个或多个子任务进行分配,被分配的多个子任务可属于同一个任务,也可属于不同的任务。
[0039] 应理解,在实际应用过程中,硬件执行单元执行的是一个一个的指令。而对于一个任务而言,有大量的指令。将任务切分为多个子任务后,一个子任务可能会对应有一个或多个指令。子任务调度模块会对子任务进行处理,从而获取到子任务对应的指令,并将获取到的指令下发给相应的硬件执行单元,从而实现对于子任务的分配下发。应理解,在本申请实施例中,指令对应的硬件执行单元即为,与该指令所属的子任务匹配的硬件执行单元。
[0040] 作为一种实施方式,可以根据指令的指令类型、内容或标识等信息,从多个硬件执行单元中确定出指令对应的硬件执行单元,作为被匹配出的硬件执行单元。
[0041] 在本申请实施例中,硬件执行单元是指AI处理器中所布设的各类用于实现不同数据处理功能的硬件电路,包括但不限于:乘累加电路(即乘累加单元)、处理向量任务的向量处理电路(即向量单元)、数据载入电路(即数据载入单元)、数据存储电路(即数据存储单元)等。
[0042] 为了实现对于子任务的分配,在本申请实施例中,如图2所示,子任务调度模块可以包括子任务调度器和指令读取译码单元。其中:
[0043] 子任务调度器用于获取一个或多个子任务,并保存子任务的任务信息。而指令读取译码单元用于根据子任务的任务信息,获取子任务对应的待处理指令并进行译码,根据译码结果将子任务对应的待处理指令分配给待处理指令对应的硬件执行单元,以使硬件执行单元执行被分配的待处理指令。
[0044] 需要说明的是,子任务的任务信息包括:任务编号、PC(Program Counter,程序计数器)等信息,若子任务中还携带有控制参数,则任务信息还可以包括控制参数,这些信息被携带于构成子任务的数据中。在本申请实施例中,子任务调度器可以通过对子任务进行解析,得到子任务的任务编号、PC、控制参数等任务信息。
[0045] 在本申请实施例中,子任务调度器可以采用协处理器实现,也可以采用专门的电路实现,对此不做限制。
[0046] 在本申请实施例中,指令读取译码单元可以将子任务的PC信息转换为指令地址,从而向指令存储器请求该指令地址对应的指令,以此实现对于待处理指令的获取。
[0047] 在实际应用中,每一个指令具有其对应的硬件执行单元,AI处理器中会预先设置有指令与硬件执行单元的对应关系。例如,对于乘累加单元,其仅能处理乘累加指令,而向量处理单元仅能处理向量类指令等。在本申请实施例中,指令读取译码单元在获取到待处理指令后,即可对该待处理指令进行译码,得到译码结果。该译码结果即表征待处理指令对应的硬件执行单元,基于此可以将待处理指令分配给该待处理指令对应的硬件执行单元,实现待处理指令的分配。
[0048] 需要注意的是,在将待处理指令分配给该待处理指令对应的硬件执行单元时,还可以将该待处理指令的相关控制信息一并发送给硬件执行单元,以便硬件执行单元可以正确执行待处理指令。其中,待处理指令的相关控制信息,是指硬件执行单元执行该待处理指令时所需的控制参数,这些控制参数可以是从子任务中获取到的,也可以是从指令存储器中获取待处理指令时一并获取到的。
[0049] 应理解,在本申请实施例中,指令读取译码单元可以采用传统的AI处理器中所具有的结构来实现,本申请实施例中不做限制。
[0050] 在实际应用过程中,指令读取译码单元的处理效率往往会高于硬件执行单元的处理效率。在一些特殊场景下,有可能指令读取译码单元获取到待处理指令后,该待处理指令对应的硬件执行单元却仍处于执行状态(即,未处于空闲状态),导致指令读取译码单元需要等待该硬件执行单元空闲从而无法继续获取下一待处理指令,进而影响AI处理器的整体处理效率。为了降低出现这种情况的概率,避免子任务调度模块和硬件执行单元的处理效率差异过大、指令读取译码单元和硬件执行单元的处理效率差异过大所带来的问题,在本申请实施例中,可以在子任务调度模块与硬件执行单元之间设置指令队列,例如,在指令读取译码单元与硬件执行单元之间设置指令队列,并且每一个指令队列对应有一个硬件执行单元,例如图3所示。
[0051] 为便于描述,后文将待处理指令对应的硬件执行单元称为目标硬件执行单元。指令读取译码单元可将待处理指令分配至目标硬件执行单元对应的指令队列中存储。而目标硬件执行单元可以从自身所对应的指令队列中获取待处理指令并执行。
[0052] 这样,通过指令队列的设置,就可以在一定程度上实现指令读取译码单元与硬件执行单元之间的解耦,在硬件执行单元执行指令的过程中,只要指令队列中的指令未溢出,指令读取译码单元就可以不断进行指令的获取与分配,从而可以在一定程度上提高AI处理器的整体处理效率。
[0053] 在本申请实施例中,每一个硬件执行单元对应的指令队列数量可以是一个(如图3),也可以是多个(如图4所示)。
[0054] 在本申请实施例的一种可选实施方式中,每一个指令队列中可以允许存放不同任务对应的待处理指令。
[0055] 而为了便于进行任务管理,在另一种可选实施方式中,也可以设定一个硬件执行单元对应的每一指令队列,只允许存放一种任务对应的待处理指令。
[0056] 示例性的,如图4所示,每一个硬件执行单元可以对应多个指令队列(各硬件执行单元对应的指令队列的数量相同),且每一个硬件执行单元对应的多个指令队列,分别用于存放不同任务对应的待处理指令。这样,每一个硬件执行单元对应的指令队列数量,即反映了AI处理器允许并行执行的任务数量。基于这多个指令队列,可以使得每一个硬件执行单元可以对多个任务的待处理指令都具有执行的能力,从而使得不同硬件执行单元能够并行执行不同任务的指令,实现指令级的多任务并行执行,降低出现某一或某些硬件执行单元被闲置的概率,提高AI处理器的资源利用率。
[0057] 请参见图5所示,可选的,在AI处理器中,还可以设置指令调度器,可以为每个硬件执行单元分别设置各自的指令调度器。
[0058] 作为一种实现方式,指令调度器可设置于硬件执行单元与该硬件执行单元对应的多个指令队列之间,用于在硬件执行单元空闲时,从该硬件执行单元对应的任一个指令队列中取出一条待处理指令发送给该硬件执行单元。这样,通过指令调度器的作用,可以保证多个指令队列之间的指令有序获取,避免出现多个指令队列同时向硬件执行单元输出指令,产生处理逻辑错误的情况。
[0059] 需要说明的是,在本申请实施例中,指令调度器可以按照设定的顺序(例如从前往后,或从后往前等顺序)依次从各指令队列中取出一条待处理指令发送给该硬件执行单元。例如,对于图5所示的结构,指令调度器第一次可以从指令队列0中取出一条待处理指令发送给硬件执行单元。在该硬件执行单元执行完毕处于空闲状态后,指令调度器可以从指令队列1中取出一条待处理指令发送给该硬件执行单元。以此类推,在从指令队列N中取出一条待处理指令发送给该硬件执行单元后,下一次又从指令队列0中取出一条待处理指令发送给该硬件执行单元。
[0060] 在本申请实施例中,指令队列可以是通过诸如FIFO(First Input First Output,先进先出)存储器、buffer(缓冲器)等器件实现,但不作为限制。
[0061] 考虑到在实际应用过程中,在子任务的各待处理指令之间有可能需要满足一些执行顺序要求。对此,在本申请实施例中可以采用FIFO存储器来实现指令队列,从而保证指令队列中的待处理指令可被顺序执行。
[0062] 考虑到在实际应用过程中,对于一个任务而言,其划分得到的各子任务之间,可能存在执行依赖关系(也即在后的子任务在执行时,必须依赖在先的子任务的执行结果)。因此,在本申请实施例中,可以通过限制子任务调度模块的功能的方式,来保证待处理指令可被顺序执行。
[0063] 作为一种实现方式,针对任一个任务,子任务调度模块每次最多获取该任务的一个子任务,且该子任务未执行完毕前,子任务调度模块不获取该任务的下一个子任务。这样就可以保证任务中各子任务是顺序执行的,从而可以避免出现任务中各子任务之间具有执行依赖关系时,在先的子任务还未执行完毕,而在后的子任务就开始执行,从而产生处理逻辑错误的情况。
[0064] 当然,在本申请实施例的另一种实现方式中,若各子任务之间不存在执行依赖关系,子任务调度模块也可以被配置为:针对任一个任务,每次可以获取该任务的一个或多个子任务进行分配。
[0065] 在本申请实施例中,AI处理器可以具有一个或多个任务切分电路。
[0066] 而在本申请实施例的一种可选实施方式中,每一个任务切分电路均可以在对一个任务切分完成后,立即对下一个任务进行切分。而由于任务切分所需的时间往往小于整个任务被执行完所需的时间,因此在可选实施方式中,即使基于一个任务切分电路,也可以实现对于多个任务的并行执行。
[0067] 考虑到对于硬件执行单元对应多个指令队列,且每个指令队列对应存储一种任务的待处理指令的方案,若按照上述可选实施方式,有可能出现任务数量超过指令队列种类数的情况,导致某些任务对应的待处理指令无法存储的问题。对此,在本申请实施例的另一种可选实施方式中,可以配置每个任务切分电路具体用于,在该任务切分电路需切分的任务为多个时,依次切分各任务,且在当前已切分的任务的所有子任务均执行完毕后,将下一个任务切分为多个子任务。
[0068] 在上述可选实施方式中,任务切分电路的数量应当与每一个硬件执行单元对应的指令队列的数量相同。
[0069] 在本申请实施例中,可参见图6所示,在各任务切分电路和子任务调度模块之间还可以设置缓冲器,每一个缓冲器对应有一个任务切分电路。从而,任务切分电路可以将切分得到的子任务发送至该任务切分电路对应的缓冲器中,由子任务调度模块从各缓冲器中获取子任务,并将获取到的子任务分配给各子任务分别匹配的硬件执行单元。
[0070] 需要说明的是,在本申请实施例中,一个任务切分电路可以对应有多个缓冲器,且可以配置不同缓冲器分别用于存放不同任务的子任务。
[0071] 还需要说明的是,在本申请实施例中,子任务调度模块可以按照设定顺序依次从各缓冲器中获取子任务,也可以是随机从各缓冲器中获取子任务。
[0072] 在本申请实施例中,对于同一个缓冲器内的子任务,子任务调度模块可以按照子任务的存放顺序进行获取。使得先存入的子任务先被获取,从而保证子任务按序调度与执行。
[0073] 可选的,缓冲器可以采用FIFO存储器或buffer等实现,但不作为限制。
[0074] 上述提供的AI处理器,通过在AI处理器中设置用于对任务进行切分的任务切分电路和用于对任务进行调度的子任务调度模块,从而可以将对任务的切分以及调度工作从软件程序上转移至AI处理器的硬件电路中,从而不再需要引入巨大的软件开销,使得宿主机处理器可以将更多资源投入到与AI处理器需配合的其他事项上,从而可以更充分地发挥AI处理器的处理能力。并且,通过设置多个任务切分电路和多个指令队列的方式,支持多任务的并行处理,降低硬件执行单元闲置的概率,提高AI处理器的效率。子任务调度模块和指令调度器可分别实现子任务级别的调度、指令级别的调度,支持层次化的调度,支持两个层次的调度配合可适应多种任务处理场景。
[0075] 为便于理解本申请实施例的方案,下面以图7所示的AI处理器结构为例,对整个任务处理过程进行介绍:
[0076] 首先,AI处理器在接收到多个任务后,将N+1个任务分别分发到N+1个任务切分电路(即,分发给图7中的任务切分电路0到任务切分电路N),具体的分发方法包括但不限于:随机分发、按编号分发、软件指定、根据任务属性分发,在本申请实施例中不做限制。
[0077] 然后,每个任务切分电路将接收到的任务切分成多个子任务。切分方法包括但不限于在输入的多维张量数据的不同维度上切块。
[0078] 例如,假设N+1个任务的任务编号分别为:J0、J1、…、JN,该N+1个任务经过切分之后即可得到N+1组子任务(每一组中的子任务数量个数与实际切分需求有关):第1组记为J0T0、J0T1、…,第2组记为J1T0、J1T1、…,第N+1组记为JNT0、JNT1、…[0079] 然后,子任务调度器从各任务切分电路产生的子任务中取一个或多个进行解析,保存子任务的任务信息,包括任务编号、PC等(若子任务中存在控制参数,则还包括控制参数)。需要说明的是,子任务调度器无需等到N+1个任务都切分完以后才开始进行解析和调度。
[0080] 然后,指令读取译码单元将PC转换成对应的指令地址,根据该指令地址从指令存储器中获取待处理指令(若存在待处理指令的控制参数,则还获取该控制参数)。指令读取译码单元对待处理指令进行译码,确定待处理指令对应的目标硬件执行单元。将待处理指令和该待处理指令的相关控制信息(即控制参数)发送到目标硬件执行单元的指令队列中。需要注意的是,每个硬件执行单元对应多个指令队列,发送待处理指令和该待处理指令的相关控制信息时,可以根据任务编号选择与该任务对应的指令队列进行分发。
[0081] 以对子任务J1T1取到的若干待处理指令包括J1T1I0、J1T1I1,为子任务J2T0取到的若干待处理指令包括J2T0I0、J2T0I1为例。如果待处理指令0(即I0)是需要由硬件执行单元1执行的指令,待处理指令1(即I1)是需要由硬件执行单元3执行的指令,则确定指令J1T1I0和J2T0I0应被硬件执行单元1执行,指令J1T1I1和J2T0I1应被硬件执行单元3执行。因此,指令J1T1I0和J2T0I0被发送给硬件执行单元1对应的指令队列中,根据任务编号可将指令J1T1I0和J2T0I0分别发送给硬件执行单元1对应的其中两个指令队列:与J1对应的一个指令队列和与J2对应的一个指令队列。同理,指令J1T1I1和J2T0I1则被发送给硬件执行单元3对应的指令队列,根据任务编号可将指令J1T1I1和J2T0I1分别发送到硬件执行单元3的其中两个指令队列:与任务J1对应的一个指令队列和与任务J2对应的一个指令队列。
[0082] 然后,每个指令调度器从各自对应的N+1个指令队列中选择一个指令发送到该指令调度器对应的硬件执行单元执行。
[0083] 例如,上述硬件执行单元1的指令调度器会从J1T1T0和J2T0I0以及其他被发送到其指令队列中的待处理指令中,选取一个指令发送给硬件执行单元1去执行。
[0084] 然后,硬件执行单元每执行完一条待处理指令,返回一个指令结束信号(指令结束信号中可以携带任务编号)给子任务调度器,子任务调度器收到该指令结束信号后,将该子任务的PC值加1,获取该子任务的下一条指令。当子任务调度器收到某个子任务的最后一条待处理指令的指令结束信号后,删除该子任务并释放相关资源。
[0085] 示例性的,子任务调度器在获取到子任务后,可以保存该子任务的最后一条指令对应的PC值,子任务调度器进行任务调度的过程中,可判断当前的PC值是否等于该最后一条指令对应的PC的值,从而在相等时,确定该子任务的最后一条指令已经执行完成,可删除该子任务并释放相关资源。
[0086] 子任务调度器在执行完一个任务的最后一个子任务的最后一条指令后,向该任务对应的任务切分电路发送任务结束信号,该任务切分电路收到该任务结束信号之后,开始下一个任务的切分,直到所有任务完成。
[0087] 通过上述过程可见,基于本申请实施例的方案,AI处理器可在硬件层面进行任务切分与调度,降低宿主机软件开销,软件无需参与任务的切分和调度,一方面减轻了软件和宿主机处理器的负担,另一方面也减少了AI处理器的硬件执行和宿主机的软件执行之间的耦合,能最大程度的释放AI处理器的计算能力。
[0088] 需要说明的是,本申请实施例中所述的AI处理器可以为可编程AI处理器。基于本申请前文所描述的AI处理器,可以实现任务的有效调度,可以应用于多任务的调度场景中。
[0089] 基于同一发明构思,本申请实施例还提供了一种电子部件,该电子部件中包括有前述的AI处理器。
[0090] 可选的,该电子部件可以是诸如边缘处理盒子、集成有AI处理器的控制器、集成有AI处理器的主板等可以实现AI运算的部件。
[0091] 基于同一发明构思,本申请实施例还提供了一种电子设备,该电子设备中包括有前述的处理器或者包括有前述的电子部件。
[0092] 可选的,该电子设备可以是诸如电脑、手机、服务器、车载设备等设备,但不作为限制。
[0093] 在本申请所提供的实施例中,应该理解到,所揭露装置,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。另一点,所显示或讨论的相互之间的连接可以是通过一些接口电性连接的。
[0094] 在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0095] 在本文中,多个是指两个或两个以上。
[0096] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。