兼容多种任务工作模式的任务执行方法和装置与流程
未命名
07-15
阅读:96
评论:0
1.本公开涉及芯片技术领域,尤其是涉及一种兼容多种任务工作模式的任务执行方法和装置。此外,本公开还涉及一种对应的计算设备和计算机可读介质。
背景技术:
2.通常在并行程序设计中使用simd32(single instruction multiple data,单指令多数据流)结构,32个工作项实例同时执行相同的操作等。相关技术中,芯片架构无法兼容不同simd结构。例如,在部分移动gpu架构中,为了减少内核面积和降低功耗,通常会采用simd128这种128个工作项实例组装在一起执行的大核心结构。然而,simd32小核心结构对于无需太过于复杂的计算,会增加线程调度次数、指令发射和取指次数,而simd128大核心结构对于小任务,资源浪费比较严重。因此,面临一种根据任务情况而选择性地实行simd32结构或simd128结构的需求。但是,不能同时兼容simd32结构和simd128结构。
技术实现要素:
3.因此,需要一种能够同时兼容不同simd结构的改进方案。
4.根据本公开的一个方面,提供了一种兼容多种任务工作模式的任务执行方法,其包括以下步骤:
‑ꢀ
基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;
‑ꢀ
从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及
‑ꢀ
执行所述待执行任务。
5.根据该方法的一些示例性实施例,所述任务工作模式是基于应用类型和/或资源使用情况确定的。
6.根据该方法的一些示例性实施例,所述方法还包括:在所述组装之前,将接收到的工作组内各工作项拆解成多个工作项实例。
7.根据该方法的一些示例性实施例,所述基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,包括:根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。
8.根据该方法的一些示例性实施例,所述方法还包括:确定所述组装得到的任务是否需要配置中继寄存器;在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。
9.根据该方法的一些示例性实施例,所述方法还包括:响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。
10.根据该方法的一些示例性实施例,所述从已组装的任务中确定待执行任务,包括:确定已组装的任务中就绪状态的任务;从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所述目标任务为未就绪状态的任务。
11.根据该方法的一些示例性实施例,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。
12.根据该方法的一些示例性实施例,所述执行所述待执行任务,包括:通过多个流水线从多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个流水线是多个独立的流水线,所述多个独立的流水线分别读写通用寄存器组。
13.根据该方法的一些示例性实施例,所述执行所述待执行任务,包括:对第一粒度的待执行任务进行分段,其中第一粒度大于第二粒度并且分段的数量等于第一粒度除以第二粒度所得的商;以及根据所述分段的数量对第一粒度的待执行任务进行循环处理。
14.根据该方法的一些示例性实施例,所述执行所述待执行任务,还包括:跳过全部为非活跃工作项实例的分段,处理具有活跃工作项实例的分段。
15.根据该方法的一些示例性实施例,所述方法还包括:在执行所述待执行任务的过程中出现待解除的依赖关系的情况下,暂停执行所述待执行任务;将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。
16.根据该方法的一些示例性实施例,所述方法还包括:响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就绪状态的任务变更为就绪状态的任务。
17.根据该方法的一些示例性实施例,所述方法还包括:响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。
18.根据本公开的另一方面,提供了一种兼容多种任务工作模式的任务执行装置,其包括:
‑ꢀ
实例打包处理单元,其用于基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;
‑ꢀ
调度和指令控制单元,其用于从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及
‑ꢀ
多个流水线,其用于执行所述待执行任务。
19.根据该装置的一些示例性实施例,所述任务工作模式是基于应用类型和/或资源使用情况确定的。
20.根据该装置的一些示例性实施例,所述装置还包括:计算着色器构造器,其用于在
组装之前将接收到的工作组内各工作项拆解成多个工作项实例。
21.根据该装置的一些示例性实施例,所述基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,包括:根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。
22.根据该装置的一些示例性实施例,所述调度和指令控制单元用于:确定组装得到的任务是否需要配置中继寄存器;在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。
23.根据该装置的一些示例性实施例,所述调度和指令控制单元还用于,响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。
24.根据该装置的一些示例性实施例,所述调度和指令控制单元还用于:确定已组装的任务中就绪状态的任务并且从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;或者在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所述目标任务为未就绪状态的任务。
25.根据该装置的一些示例性实施例,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。
26.根据该装置的一些示例性实施例,所述装置还包括多个通用寄存器组,其中所述多个流水线从所述多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个流水线是多个独立的流水线,所述多个独立的流水线分别读写通用寄存器组。
27.根据该装置的一些示例性实施例,所述流水线还用于:对第一粒度的待执行任务进行分段,其中第一粒度大于第二粒度并且分段的数量等于第一粒度除以第二粒度所得的商;以及根据所述分段的数量对第一粒度的待执行任务进行循环处理。
28.根据该装置的一些示例性实施例,所述多个流水线用于:跳过全部为非活跃工作项实例的分段,处理具有活跃工作项实例的分段。
29.根据该装置的一些示例性实施例,所述调度和指令控制单元还用于:在执行所述待执行任务的过程中出现待解除的依赖关系的情况下,将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。
30.根据该装置的一些示例性实施例,所述调度和指令控制单元还用于:响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就绪状态的任务变更为就绪状态的任务。
31.根据该装置的一些示例性实施例,所述调度和指令控制单元还用于:响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。
32.根据本公开的另一方面,提供了一种电子设备,其包括:处理器;和用于存储处理
器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行根据上述实施例中任一项所述的方法。
33.根据本公开的另一方面,提供了一种其上存储有指令的计算机可读介质,所述指令当被执行时使得计算设备执行根据上述实施例中任一项所述的方法。
34.通过本公开的一个实施例,能够根据设定的任务工作模式来动态地将多个工作项实例组装成不同任务工作模式的任务并且相应地执行所述任务的改进方案,其能够同时兼容不同simd结构,从而解决现有芯片架构不能同时兼容多种simd结构的问题。
附图说明
35.现在将参照附图描述本公开的具体示例性实施例。然而,本公开可以以很多不同的形式实施,并且不应该被解读为限于本文所阐述的实施例;相反,这些实施例被提供以便使该公开全面而完整,并且将向本领域技术人员完全表达本发明的范围。在对附图所示特定示例性实施例的详细描述中所使用的术语不打算对本公开是限制性的。在附图中,类似的数字指代类似的部件。
36.图1示出根据本公开的一个实施例的兼容多种任务工作模式的任务执行方法100的流程图。
37.图2示出根据本公开的一个实施例的兼容多种任务工作模式的任务执行装置200的框图。
38.图3示出根据本公开的另一实施例的兼容多种任务工作模式的任务执行装置300的框图。
39.图4示出根据本公开的另一实施例的调度处理器/wave调度器400的工作原理的示意图。
40.图5示出根据本公开的另一实施例的流水线内处理wave的示意图。
41.图6示出根据本公开的另一实施例的流水线访问通用数据寄存器组的逻辑示意图。
42.图7示出根据本公开一个实施例的计算设备的框图。
具体实施方式
43.为使本公开的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本公开技术方案作进一步说明。应该进一步理解,使用在该说明书中,术语“包括”意指存在所陈述的特征、步骤、操作、部件和/或组件,但是并不排除存在或添加一个或更多个其他特征、步骤、操作、部件、组件和/或其组成的组。
44.如前所述,相关技术中,芯片架构无法兼容不同simd结构。为便于理解,下文以gpu架构为例进行说明,应理解,本公开实施例适用于任何芯片架构。
45.现有桌面gpu架构基本使用了纯simd(single instruction multiple data,单指令多数据流)32或cuda的纯simt(single instruction multiple thread,单指令多线程)32,这种纯simd32的小核心结构固定将32个工作项实例组装在一起执行,并行性很好。同样的任务,采用小核心结构,使用的simd数量就会变多,从而隐藏延迟。
46.然而,在一些特殊情况下,如片段着色器中,使用较多插值并直接进行颜色属性输
出,无需太多过于复杂的计算。此时simd数量变多会增加线程调度次数、指令发射和取指次数。
47.在部分移动gpu架构中所采用的simd128结构,其是将128个工作项实例组装在一起执行的大核心结构,这种组装的simd任务粒度较大,对于小任务,资源浪费比较严重。尤其是在执行simd32这种小核心状态下的分支程序或者小核心状态下的生产者-消费者模型程序时,各工作项实例在处理不同分支时,需要通过工作项实例有效掩码将部分工作项实例去激活地执行,导致内核中alu利用率不高,性能降低。显然,simd32和simd128结构分别适合于不同的应用类型。应理解,为适用于不同的应用类型,可以存在多种simd结构,例如,simd32、simd64以及simd128等,为便于理解,下文以simd32和simd128结构为例进行说明。
48.本公开提出一种能够根据设定的任务工作模式来将多个工作项实例组装成不同模式的任务并且相应地执行所述任务的改进方案,其可以满足兼容不同simd结构的需求,例如,同时解决simd32结构对于无需复杂计算的大任务的线程调度次数多、指令发射和取指次数多以及simd128结构对于小任务的alu利用率不高的缺点。
49.图1示出了根据本公开实施例提供的一种兼容多种任务工作模式的任务执行方法100的流程图,结合图1所示,所述方法包括:步骤s100,基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;步骤s200,从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及步骤s300,执行所述待执行任务。
50.通过这种方式,根据本发明的gpu架构能够同时兼容多种任务工作模式。
51.示例性地,任务工作模式可以包括wave32模式和wave128模式(wave是一种自定义的simd线程束,wave32表示32个工作项实例组装成的并行线程束,wave128表示128个工作项实例组装成的并行线程束)。替代地或附加地,任务工作模式也可以包括wave64模式等。例如,可以根据wave32模式或wave128模式分别将32或128个工作项实例组装成一个任务wave32或wave128,其中32和128分别表示不同任务工作模式对应的粒度。替代地或附加地,任务也可以包括wave64等。
52.在一种可能的实现方式中,所述任务工作模式是基于应用类型和/或资源使用情况确定的。
53.示例性地,驱动程序可以根据应用类型和/或资源使用情况来设定具体的任务工作模式。更具体地,在编译器编译时,根据具体着色器编译出具体微架构适配的指令,计算出通用寄存器等各种资源使用情况。同时计算出当前资源使用情况下,可适用的任务工作模式。然后驱动程序可以根据全局核函数的任务以及资源使用情况,设定具体最优的任务工作模式。例如,在一些特殊情况下,如片段着色器中,使用较多插值并直接进行颜色属性输出,无需太多过于复杂的计算,此时适合于wave128模式,由此减少了线程调度次数、指令发射和取指次数。例如,当需要执行fma操作、例如a*b+c操作时,其适合于wave32模式。
54.通过这种方式,分别组装成对应任务工作模式的任务,以更合适的执行粒度,进入内核执行。相比较于wave128这种固定的大核心模式,多种模式混合执行,资源粒度随着
wave粒度的变化而变化,不会过多浪费大核心资源,资源利用率更高。相比较于wave32这种固定的小核心模式,这种混合模式可以减少调度和取指次数。
55.在一种可能的实现方式中,所述方法还包括:在所述组装之前,将接收到的工作组内各工作项拆解成多个工作项实例。
56.示例性地,通过计算着色器构造器可以将接收到的工作组内不以工作项实例存在的各工作项拆解成多个工作项实例。替代地,如果接收到的工作组内的各工作项本身以工作项实例存在,则计算着色器构造器无需对接收到的工作组进行处理。
57.通过这种方式,可以将工作组内各工作项拆解成基础单元,以便可以基于任务工作模式对应的粒度,动态地将所述任务工作模式对应的多个工作项实例组装成至少一个任务。
58.在一种可能的实现方式中,所述基于任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,包括:根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。
59.示例性地,如果任务工作模式为wave128模式,则可以确定相应的粒度为128,从第1个工作项实例开始,直至第128个工作项实例为止,累计计数128之后,将128个工作项实例组装成一个任务wave128;如果任务工作模式为wave32模式,则可以确定相应的粒度为32,从第1个工作项实例开始,直至第32个工作项实例为止,累计计数32之后,将32个工作项实例组装成一个任务wave32。如果剩余工作项实例的数量小于32,则只能按照wave32模式组装成一个任务wave32;如果剩余工作项实例的数量介于32和128之间,则可以根据任务工作模式组装成一个wave128或多个wave32。
60.通过这种方式,可以将工作组灵活地组装成不同模式的任务。
61.应理解,本公开实施例已组装的任务可以包括一种或多种任务工作模式的任务,可以在从已组装的任务中确定至少一个待执行任务,以执行待执行任务。其中,确定待执行任务以及执行待执行任务的步骤可以是与组装任务的步骤并行执行,本公开不限制组装任务、确定待执行任务以及执行任务等步骤的执行顺序。其中,可以从满足预设条件的已组装的任务中确定待执行任务,在包括多个可确定为待执行任务的任务的情况下,可以基于预设优先级条件,确定待执行任务。预设条件可以是该任务已就绪、该任务已就绪且不存在执行该任务所需解除的依赖关系等。
62.在一种可能的实现方式中,所述从已组装的任务中确定待执行任务,包括:确定已组装的任务中就绪状态的任务;从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所述目标任务为未就绪状态的任务。
63.其中,就绪状态的任务是指对于该任务而言不存在阻塞信息,所述阻塞信息表征执行相应任务所需的依赖资源未被满足。需要说明的是,对于任意一个任务而言,其是否存
在阻塞信息是动态变化的,例如,其可以实时或者周期性或者在满足预设条件的时候,判断是否阻塞信息或者判断是否阻塞信息可被清除。例如,就绪状态的任务被确定为目标任务、在确定是否能够作为待执行任务的情况下也可以判断是否存在阻塞信息。
64.其中,可以分别针对取指过程和译码过程灵活设置待解除的依赖关系,待解除的依赖关系可以是执行取指过程或译码过程中确定的所有依赖关系,也可以是从所有依赖关系中确定的部分依赖关系。在本公开中,不同任务的依赖关系可以相同或不同,本公开对待解除的依赖关系的类型和数量不做限制。
65.示例性地,如果已组装的任务需要配置中继寄存器,则可以在组装得到该任务的时候,确定为未就绪状态的任务或者称为阻塞状态的任务。例如,如果已组装的任务所需的依赖资源都被满足,则该任务被确定为就绪状态的任务。
66.通过这种方式,实现了新的任务调度管理策略,就绪状态的任务和未就绪状态的任务的分离式管理,使得各部分相对独立,减少依赖。同时,减少了未就绪状态的任务参与调度,使得调度处理更快。
67.在一种可能的实现方式中,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。
68.示例性地,如果一个任务在为其取指过程中由于指令缓存缺失(取指令时发生指令缓存线丢失,然后指令缓存控制器需要从外面的全局存储器中取指令,为此通常需要几百个甚至一千个周期才能将指令取回来,因此需要阻塞该任务,让其他任务优先执行)从运行状态变更为阻塞状态,则指令缓存控制器在取回指令后发送唤醒消息给调度处理器,然后调度处理器可以根据该唤醒消息消除指令缓存缺失这一阻塞原因。
69.示例性地,如果一个任务在为其译码过程中由于阻塞型栅栏条件(当前任务的当前指令依赖于当前任务的前面指令的执行结果,然而前面指令的执行结果还没计算出来,需要等待较长时间,因此可以将当前任务阻塞)从运行状态变更为阻塞状态,当前面指令的执行结果计算出来后,通过栅栏计数器更新栅栏值来解除该阻塞,即发送唤醒消息给调度处理器,然后调度处理器可以根据该唤醒消息消除阻塞型栅栏条件这一阻塞原因。
70.其中,阻塞型栅栏条件可以是编译器编译指令时基于长延时指令获取数据的栅栏条件类型,其可以作为一种待解除的依赖关系。示例性地,当一个任务在为其译码过程中存在阻塞型栅栏条件,需要等待的周期数较大时,可以确定存在待解除的依赖关系,待解除的依赖关系包括阻塞型栅栏条件,可以将运行状态变更为阻塞状态。当一个任务在为其译码过程中存在非阻塞型栅栏条件,需要等待的周期数较小时,当前任务的前面指令的执行结果可以在较短时间内得到,则无需基于此而将运行状态变更为阻塞状态。
71.通过这种方式,可以及早将需要更多等待时间的任务阻塞,以免将这些任务发送给流水线执行后,使得流水线资源在等待过程中闲置,又能保证较短等待时间的任务可以尽快被流水线执行,从而提高了流水线资源的利用率。应理解,栅栏计数器数量可灵活设置,本公开对此不作限制。
72.在一种可能的实现方式中,所述方法还包括:确定所述组装得到的任务是否需要配置中继寄存器;在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;
在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。
73.示例性地,随着任务信息携带而来的可能的阻塞信息可以是需要配置中继寄存器,因为在编译器编译过程中就可以确定相应任务是否需要配置中继寄存器。编译器将需要配置中继寄存器这一阻塞信息配置进命令控制流中,随着任务一起存储任务调度器中。例如,在检测已组装的任务是否有阻塞信息时就是检测该任务是否携带需要配置中继寄存器这一阻塞信息。如果检测到已组装的任务不需要配置中继寄存器,则可以将该任务确定为就绪状态的任务;而如果检测到已组装的任务需要配置中继寄存器,则可以将该任务确定为未就绪状态的任务(也称为阻塞状态的任务)。
74.在一种可能的实现方式中,所述方法还包括:响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。
75.示例性地,在收到完成中继寄存器配置的唤醒信息后,可以立即将未就绪状态的任务变更为就绪状态的任务。
76.通过这种方式,可以使相应任务尽快参与调度。
77.在本公开实施例中,可以通过流水线执行待执行任务,例如,可以通过多个流水线并行执行待执行任务,本公开不限制执行。
78.在一种可能的实现方式中,所述执行所述待执行任务,包括:通过多个流水线从多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个流水线是多个独立的流水线,所述多个独立的流水线分别读写通用寄存器组。
79.示例性地,不同指令流水线有不同的工作项实例执行粒度,部分执行流水线采用32工作项实例执行粒度和部分采用16工作项实例执行粒度。替代地,部分执行流水线也可以采用其他工作项实例执行粒度。在具体指令流水线中执行时,指令执行控制器控制指令执行,根据接收的任务工作模式,设置需要执行的循环计数器计数值。然后通过控制,循环执行各段工作项实例,直到达到最大循环计数器计数值。示例性地,当前多核处理流水线分成了多组小处理器核心组,每组核心内部可以直接兼容wave32模式,也可以分段处理,循环4次去兼容wave128模式。wave128模式采用分段循环4次执行的方式,而没有采用再次拆分成wave32模式,其原因在于这样能够保证wave128所有资源在生命周期内可用,同时提高指令利用率。每条流水线上取回来的数据和指令,按向量操作形式可以同时分段循环执行四次,执行流水线完成流水处理操作,间隙相对来说比较小,利用率更高。
80.示例性地,一条流水线作为图形渲染管线使用,执行像素着色器中简单的插值就输出,其适合于wave128模式,分4段循环执行,4次读取通用寄存器组;而另一条流水线作为计算管线使用,例如执行浮点或整型计算(例如数学a*b+c操作),其适合于wave32模式。计算管线相较于图形渲染管线访问通用寄存器组的频率更低。因此,它们可以分别访问不同的通用寄存器组。
81.通过这种方式,一方面多个流水线独立读写通用寄存器组,提高了并行性;另一方面多个独立的通用寄存器组分别具有独立的读写端口以及仲裁逻辑,便于多个任务或者任务中各段的处理,减少数据读写冲突。
82.在一种可能的实现方式中,所述执行所述待执行任务,包括:对第一粒度的待执行任务进行分段,其中第一粒度大于第二粒度并且分段的数量等于第一粒度除以第二粒度所得的商;以及根据所述分段的数量对第一粒度的待执行任务进行循环处理。
83.示例性地,当前多核处理流水线分成了多组小处理器核心组,每组核心内部可以直接兼容wave32模式,也可以分段处理,循环4次去兼容wave128模式。wave128模式采用分段循环4次执行的方式,而没有采用再次拆分成wave32模式,其原因在于这样能够保证wave128所有资源在生命周期内可用,同时提高指令利用率。
84.在一种可能的实现方式中,所述执行所述待执行任务,还包括:跳过全部为非活跃工作项实例的分段,处理具有活跃工作项实例的分段。
85.示例性地,对于wave128采用分段循环4次执行的方式,根据需要分段循环的次数以及分段活跃标识,跳过全部为非活跃工作项实例的分段,处理具有活跃工作项实例的分段。示例性地,在识别得到某一分段的全部工作项实例均为非活跃工作项实例的情况下,例如,该分段活跃标识指示该分段非活跃的情况下,可以跳过该分段的执行过程。
86.这样,采用分段循环执行的方式,可以灵活跳过不包括活跃工作项实例的分段、无需执行任务的所有工作项实例,相比较于相关技术中固定的大核心模式,提升了指令执行流水线的利用率等性能。
87.在一种可能的实现方式中,所述方法还包括:在执行所述待执行任务的过程中出现待解除的依赖关系的情况下,暂停执行所述待执行任务;将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。
88.示例性地,工作组同步是指同一个工作组内的多个任务共享数据,需要所述多个任务都执行到同步指令,完成同步操作之后,同步计数器才能发消息给调度处理器以唤醒各个任务继续执行。例如,在执行所述待执行任务时执行到同步指令时(即检测到属于同一个工作组的多个任务需要共享数据时),则暂停执行所述待执行任务并且将所述待执行任务变更为未就绪状态的任务。直至所述多个任务都执行到同步指令,完成同步操作之后,同步计数器才能发消息给调度处理器以唤醒各个任务继续执行。互斥条件是指多个任务共享一些资源,但是每次只能给一个任务分配这些资源,哪个任务赢得这些资源就执行该任务,在此过程中其他任务只能等待;异步传输信号是指需要等待所等的那个任务完成异步操作,异步流水线才会发送消息给调度处理器以唤醒相应的任务;休眠条件是指执行了休眠指令,比如休眠5秒,就会有一个计数器记录是否达到指定时间,如果达到了就会发送消息给调度处理器以唤醒相应的任务。在流水线执行指令时检测到上述待解除的依赖关系,就会发消息给调度处理器。调度处理器在接收到相应流水线发出的有关待解除的依赖关系的消息后,将相应的任务从运行状态变更为阻塞状态,并且更新对应的待解除的依赖关系。
89.通过这种方式,可以让出所述待执行任务所占用的计算资源,使得资源利用率更高。
90.在一种可能的实现方式中,所述方法还包括:响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就
绪状态的任务变更为就绪状态的任务。
91.示例性地,如果由于工作组同步未满足而从运行状态变更为未就绪状态的任务,在同一工作组的多个任务都完成同步操作并且接收到同步计数器的唤醒消息后,在没有其他待解除的依赖关系的情况下,调度处理器将该未就绪状态的任务变更为就绪状态的任务。
92.通过这种方式,不同的任务在未就绪状态、就绪状态和运行状态之间进行切换,通过多个任务分别发射指令进入各个流水线中并行执行,从而达到提高并行执行效率的目的。
93.在一种可能的实现方式中,所述方法还包括:响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。
94.示例性地,在一个任务执行结束后,该任务在调度处理器中所占用的存储空间、所分配的通用寄存器资源以及所占用的流水线资源都被释放。
95.通过这种方式,可以提高各种资源循环利用的效率。
96.图2是根据本发明的一个实施例的兼容多种任务工作模式的任务执行装置200的框图。
97.如图2中所示,装置200可以包括实例打包处理单元202、调度和指令控制单元204以及多个流水线205a,205b,
…
,205n。具体地,实例打包处理单元202可以被配置用于基于任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同。在一个示例中,任务可以包括wave32和wave128。wave32表示最多含有32个工作项实例的任务,而wave128表示最多含有128个工作项实例的任务。32和128分别表示不同任务工作模式对应的粒度。替代地或附加地,任务也可以包括wave64等。相应地,任务工作模式可以包括wave32模式、wave64模式和wave128模式等。
98.在一个示例中,所执行的任务工作模式是基于应用类型和/或资源使用情况确定的。具体地,驱动程序可以根据应用类型和/或资源使用情况来设定具体的任务工作模式。更具体地,在编译器编译时,根据具体着色器编译出具体微架构适配的指令,计算出通用寄存器等各种资源使用情况。同时计算出当前资源使用情况下,可适用的任务工作模式。然后驱动程序可以根据全局核函数的任务以及资源使用情况,设定具体最优的任务工作模式。
99.在一个示例中,实例打包处理单元202可以根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。
100.调度和指令控制单元204可以被配置用于从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务。在一个示例中,调度和指令控制单元204可以被配置用于确定组装得到的任务是否需要配置中继寄存器;并且在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;或者在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。替代地或附加地,调度和指令控制单元204可以被配置用于响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。替代地或附加地,调度和指令控制单
元204可以被配置用于确定已组装的任务中就绪状态的任务并且从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;或者在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所述目标任务为未就绪状态的任务。在一个示例中,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。
101.替代地或附加地,调度和指令控制单元204可以被配置用于在所述待执行任务的执行过程中出现待解除的依赖关系的情况下,将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。替代地或附加地,调度和指令控制单元204可以被配置用于响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就绪状态的任务变更为就绪状态的任务。替代地或附加地,调度和指令控制单元204可以被配置用于响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。
102.多个流水线205a,205b,
…
,205n可以被配置用于执行所述待执行任务。在一个示例中,所述多个流水线是多个独立的流水线。在一个示例中,所述待执行任务在相应的流水线中以对应的流水线指令呈现。不同指令流水线具有不同的工作项实例执行粒度,部分执行流水线可以采用32个工作项实例粒度并且部分采用16工作项实例粒度。附加地或替代地,部分执行流水线采用其他工作项实例粒度。在一个示例中,在具体指令流水线中执行时,流水线中的指令执行控制器控制指令执行,根据流水线指令中所包含的任务工作模式,设置需要执行的分段循环计数器。然后通过控制,循环执行各段工作项实例,直至达到最大循环计数。在一个示例中,在所述流水线中根据流水线指令中所包含的工作项实例有效掩码、任务工作模式、源数据或目的数据类型与物理地址来执行所述流水线指令。在一个示例中,在所述流水线中执行所述待执行任务时能够实现所述待执行任务的分段式处理以及可跳跃全部为非活跃工作项实例处理段部分。在一个示例中,各个流水线独立读写通用寄存器。
103.在装置200的一种替代的实施方式中,装置200还可以包括计算着色器构造器。计算着色器构造器可以被配置用于将接收到的工作组拆解成单个工作项实例。具体地,计算着色器构造器可以将接收到的工作组送进计算着色器构造器中对应的工作组拆分处理单元。在一个示例中,所述工作组拆分处理单元包括工作组拆分单元子模块,其用于将工作组内的各工作项拆解出来变成单个工作项实例。替代地,如果接收到的工作组内的各工作项本身以单个工作项实例存在,则计算着色器构造器无需对接收到的工作组进行处理。
104.在装置200的一种替代的实施方式中,装置200还可以包括多个通用寄存器组。在一个示例中,在多个流水线执行所述待执行任务时,所述多个流水线从所述多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个独立的流水线分别独立读写通用寄存器组。
105.在装置200的一种替代的实施方式中,调度和指令控制单元204可以包括调度处理器和指令控制处理单元。调度处理器可以被配置用于接收已组装的任务以进行管理和调度。在一个示例中,调度处理器可以首先检测所接收的已组装的任务是否需要配置中继寄存器。如果调度处理器确定相应的任务需要配置中继寄存器,则将相应的任务确定为未就
绪状态的任务或阻塞状态的任务;如果调度处理器确定相应的任务不需要配置中继寄存器,则将相应的任务确定为就绪状态的任务。然后,调度处理器可以从就绪状态的任务中选择出至少一个任务作为目标任务并且将所述目标任务发送给指令控制处理单元。此时,相应任务的状态信息为运行状态。指令控制处理单元可以被配置用于为所述目标任务进行取指和译码。指令控制处理单元在为所述目标任务取指和译码过程中检测是否存在待解除的依赖关系。如果指令控制处理单元检测到待解除的依赖关系,则停止为相应目标任务继续进行取指和译码并且向调度处理器发送一个信号。所述调度处理器可以根据该信号,将正在执行的任务取消调度,即从运行状态进入阻塞状态。在一个示例中,在正在执行的任务出现取消调度的情况下,当待解除的依赖关系得到解除之后,可以消除该待解除的依赖关系,直到所有待解除的依赖关系都被消除后,可以再次唤醒该任务重新参与调度,即从阻塞状态进入就绪状态。在一个示例中,所述待解除的依赖关系包括指令缓存缺失或阻塞型栅栏条件,其中指令缓存缺失是取指令时发生指令缓存线丢失,然后指令缓存控制器需要从外面的全局存储器中取指令,为此通常需要几百个甚至一千个周期才能将指令取回来,因此需要阻塞该任务,让其他任务优先执行;阻塞型栅栏条件是指当前任务的当前指令依赖于当前任务的前面指令的执行结果,然而前面指令的执行结果还没计算出来,需要等待较长时间,因此将当前任务阻塞。当前面指令的执行结果计算出来后,通过栅栏计数器更新栅栏值来解除该阻塞。如果一个任务由于指令缓存缺失从运行状态变更为阻塞状态,则指令缓存控制器在取回指令后发送消息给调度处理器,然后调度处理器可以根据该消息消除指令缓存缺失这一阻塞原因。另一方面,如果指令控制处理单元未检测到待解除的依赖关系,则将所述目标任务确定为待执行任务并且将其发送给相应的流水线予以执行。所述待执行任务在相应的流水线中以流水线指令的形式存在。
106.在相应流水线执行流水线指令时,仍可能检测到一些待解除的依赖关系,诸如工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足等,其中工作组同步是指同一个工作组内的多个任务共享数据,需要所述多个任务都执行到同步指令,完成同步操作之后,同步计数器才能发消息给调度处理器以唤醒各个任务继续执行;互斥条件是指多个任务共享一些资源,但是每次只能给一个任务分配这些资源,哪个任务赢得这些资源就执行该任务,在此过程中其他任务只能等待;异步传输信号是指需要等待所等的那个任务完成异步操作,异步流水线才会发送消息给调度处理器以唤醒相应的任务;休眠条件是指执行了休眠指令,比如休眠5秒,就会有一个计数器记录是否达到指定时间,如果达到了就会发送消息给调度处理器以唤醒相应的任务。调度处理器在接收到相应流水线发出的有关待解除的依赖关系的消息后,将相应的任务从运行状态变更为阻塞状态,并且更新对应的待解除的依赖关系。进一步地,如果调度处理器接收到相应任务的相应待解除的依赖关系的得到解除的消息后,将相应待解除的依赖关系消除,并且直至相应任务的所有待解除的依赖关系都消除之后,将相应任务从阻塞状态变更为就绪状态。
107.在一个示例中,通过调度处理器内部的任务处理结束信号来释放所述任务所占用的资源。在一个示例中,所述资源包括调度处理器内部的任务存储空间、执行流水线和通用寄存器。在一个示例中,不同任务工作模式使用相同的通用寄存器资源分配与管理。
108.在装置200的一种替代的实施方式中,所述调度处理器、所述指令控制处理单元和所述多个流水线组成多核流处理单元。
109.在以下实施例中,设定指令执行流水线的执行粒度为32个工作项实例,浮点或整型alu计算单元单次可并行执行32个工作项实例。设定模式为可兼容wave32、wave128模式(wave执行模式)。
110.图3示出根据本发明的另一实施例的兼容多种任务工作模式的任务执行装置300的框图。
111.如图3中所示,装置300可以包括wave打包器301、wave调度器302、指令控制器303、依赖关系栅栏队列304以及多个流水线305a,305b,
…
,305n。
112.在编译器编译时,根据具体着色器编译出具体微架构适配的指令,计算出通用寄存器等各种资源使用情况。然后驱动程序可以根据全局核函数的任务以及资源使用情况,设定具体最优的任务工作模式,将此数据传输给wave打包器301。wave打包器301可以对应于装置300的实例打包处理单元302来实施。在wave打包器301将多个工作项实例打包组装成具有不同工作项实例粒度的任务时,按照设定的任务工作模式,动态打包组装成wave32 或者wave128、即具有32个工作项实例粒度的一个wave或者具有128个工作项实例粒度的一个wave。替代地或附加地,wave打包器301根据上游下发的任务工作模式,准备初始化按照设定模式工作。然后,wave打包器301根据接收的工作项实例起始信息、工作项实例数据量和工作项实例结束信息,开始进行打包。在打包过程中,如果对应工作项实例数据量达到设定任务工作模式支持的工作项实例个数(wave32为32个工作项实例,wave128需要128个工作项实例),则将组装好的各个wave发送给wave调度器302;如果没有,则检查当前工作项实例是否已经达到最后一个工作项实例,如果达到,则强制完成当前打包动作。如果没有,则继续执行,直至达到最后一个工作项实例。
113.然后,组装好的各个wave进入wave调度器302以进行存储并参与任务调度处理。wave调度器302可以对应于装置200的一个替代实施例中的调度处理器来实施。wave调度器302接收从wave打包器301发送的wave32/128的信息,并构建初始化状态的wave。然后,记录相应wave条目所依赖的资源,按条目编号记录到阻塞信息表中。所依赖的资源可以包括随着wave信息携带而来的阻塞信息、如在编译器编译过程中确定的需要配置中继寄存器,也可以包括在将相应wave发送给指令控制器303之后确定的阻塞信息、如在为相应wave取指过程中确定的指令缓存缺失、在相应wave经过译码后的流水线指令进入依赖关系栅栏队列后确定的阻塞型栅栏条件、以及在相应流水线指令进入流水线中执行时确定的工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足等。然后,wave调度器302使用监视器监控阻塞信息表的内容,当有唤醒信号到来,对应地消除相应的阻塞信息,直至相应wave的所有阻塞信息都被消除、即相应wave所依赖的资源全部得到满足,将相应wave的状态设置为就绪状态,等待调度。wave调度器302使用wave选择器从所有有效的就绪状态的wave中挑选出部分优先级高和/或等待时间比较久的wave来发送给指令控制器303。然后,将发送给指令控制器303的wave的状态设置运行状态。
114.指令控制器303可以为选出来的wave进行取指和译码并译码成对应流水线指令。如果指令控制器303在为相应wave取指过程中检测到指令缓存缺失,则将包含指令缓存缺失的消息发送给wave调度器302。wave调度器302可以将相应wave从运行状态变更为阻塞状态并且将指令缓存缺失这一阻塞信息按照相应wave的条目编号记录到阻塞信息表中。wave调度器302在收到指令缓存控制器取指回来后发出的唤醒信息后,才将指令缓存缺失这一
阻塞信息从阻塞信息表中消除。所有类型的流水线指令首先经过依赖关系栅栏队列304,通过栅栏计数器来检查相应流水线指令中是否存在读后写、写后读这种数据依赖。如果没有这种数据依赖,则将相应流水线指令发送给相应流水线来执行;如果存在这种数据依赖,则相应流水线指令需要排队等待。相应地,依赖关系栅栏队列304将一个消息发送给wave调度器302,以便将相应wave从运行状态变更为阻塞状态并且将相应的阻塞信息按照相应wave的条目编号记录到阻塞信息表中。wave调度器302在收到依赖关系栅栏队列304解除数据依赖的唤醒信息后,才将相应阻塞信息从阻塞信息表中消除。在通过依赖关系栅栏队列304解除各种数据组依赖关系及源数据栅栏计数器依赖后,将包含有wave执行模式、源数据或目的数据类型与物理地址、各个工作项实例有效掩码的流水线指令发送给各流水线。
115.各个流水线305a,305b,
…
,305n执行对应的流水线指令。每个流水线305a,305b,
…
,305n内可以设置多组alu组,每个alu 组里面可以分别包含4个或8个alu结构,分别可处理4个或8个工作项实例fma操作。例如,设置8组或4组alu组,总共一次可处理32个工作项实例内的fma操作。例如,对于wave32,一次读取所有操作数,一次执行完。例如,对于wave128,总共128个工作项实例需要处理,一次执行32个工作项实例,需要分四段分别读取所对应的操作数。在执行每个分段时,此时源操作数队列不需要驻留,每个分段可以一次读取完且执行完。在一个示例中,fma一般执行a*b+c操作时,需要3个源操作数,每个操作数的当前执行段是32个工作项实例,因此需要使源操作数队列保持3*32个dword的空间。当然这些都是对于fp32的执行情况。而对于fp16,执行一次fp32的计算,alu可以拆分增加一些逻辑拼成2个fp16的计算。因此fp16的计算粒度通常比fp32大一倍,等于一次可以执行wave64,对于wave128,需要分2次循环执行完。
116.图4示出根据本发明的另一实施例的调度处理器/wave调度器400的工作原理的示意图。
117.任务调度管理分为wave基本信息管理、wave 阻塞信息管理和wave状态信息管理,其中wave基本信息管理负责管理wave基本信息,其记录了当前wave的所有初始状态数据信息,包含已设定的wave32或wave128的执行模式信息、初始实例有效掩码、程序计数器(pc)、工作组编号等信息;wave 阻塞信息管理负责管理wave阻塞信息表,其记录了当前wave的所有阻塞原因,这些阻塞原因包括随着wave基本信息携带的阻塞原因和在为相应wave取指和译码过程中以及在执行相应wave时检测到的阻塞原因;wave状态信息管理负责管理wave状态信息表,其记录了当前wave的当前状态,包括就绪状态(当前wave准备就绪,可供选择)、阻塞状态(当前wave未准备就绪,不可供选择)和运行状态(当前wave正在执行中)。在一个替代的实施方式中,wave状态信息表也可以实施为调度信息队列。如图4中所示,已经打包好的wave按顺序被存储在wave基本信息表中,其中每个wave被分配给一个相应的wave编号,例如可以将wave基本信息表的表项的编号用作相应的wave编号。监视器监控各个wave的基本信息中是否携带需要配置资源的要求、如需要配置中继寄存器等,如果有,则将其按照相应的wave编号记录到阻塞信息表中并且将相应wave的状态信息设置为阻塞状态;如果没有,则将相应wave的状态信息设置为就绪状态。同时,监视器监控阻塞信息表的内容,当有重新激活信号到来、例如中继寄存器完成配置的信号,将相应wave的状态信息从阻塞状态变更为就绪状态。wave选择器可以从所有就绪状态的wave中挑选出部分优先级高和/或等待时间比较久的wave发送给指令控制器。同时,将挑选出的wave的状态信息从就绪状态
变更为运行状态。在一个示例中,在调度处理器中wave基本信息、wave阻塞信息以及wave状态信息实现分离式管理。
118.指令控制器为选出来的wave进行取指和译码并译码成对应流水线指令。如果指令控制器在为相应wave取指过程中检测到指令缓存缺失,则将包含指令缓存缺失的消息发送给wave调度器。wave调度器可以将相应wave从运行状态变更为阻塞状态并且将指令缓存缺失这一阻塞信息按照相应wave的条目编号记录到阻塞信息表中。wave调度器在收到指令缓存控制器取指回来后发出的唤醒信息后,才将指令缓存缺失这一阻塞信息从阻塞信息表中消除。所有类型的流水线指令首先经过依赖关系栅栏队列,通过栅栏计数器来检查相应流水线指令中是否存在读后写、写后读这种数据依赖。如果没有这种数据依赖,则将相应流水线指令发送给相应流水线来执行;如果存在这种数据依赖,则相应流水线指令需要排队等待。相应地,依赖关系栅栏队列将一个消息发送给wave调度器,以便将相应wave从运行状态变更为阻塞状态并且将相应的阻塞信息按照相应wave的条目编号记录到阻塞信息表中。wave调度器在收到依赖关系栅栏队列解除数据依赖的唤醒信息后,才将相应阻塞信息从阻塞信息表中消除。在通过依赖关系栅栏队列解除各种数据组依赖关系及源数据栅栏计数器依赖后,将包含有wave执行模式、源数据或目的数据类型与物理地址、各个工作项实例有效掩码的流水线指令发送给各流水线。为了提高指令间的并行性,此处采用了各流水线分离的结构,各流水线之间相互独立并行执行,速度更快。
119.图5示出根据本发明的另一实施例的流水线内处理wave的示意图。
120.不同指令流水线有不同的工作项实例执行粒度,部分执行流水线采用32工作项实例和部分采用16工作项实例粒度。替代地,部分执行流水线也可以采用其他工作项实例粒度。如图5中所示,在具体指令流水线中执行时,指令执行控制器控制指令执行,根据接收的任务工作模式,设置需要执行的循环计数器计数值。然后通过控制,循环执行各段工作项实例,直到达到最大循环计数器计数值。
121.当一个wave的所有工作项实例发送下来后,根据流水线内部处理的执行起始位置,按处理步长,逐步取源数据资源并且发送到源数据多路复用器中。当源数据都收集齐后,进入alu内核进行计算处理。处理完成后,会将目的数据结果通过回写,按照上游下发的目的数据类型与目的数据地址,写进对应类型资源中。
122.循环执行计数器按照执行的步长,逐步执行exec_instance_start=exec_instance_start+stride,其中,stride表示步长,exec_instance_start表示执行起始位置,得到最新执行的起始位置,如果该起始位置及执行部分没有超出当前所有工作项实例粒度,则继续执行。如果超出当前所有工作项实例粒度,则说明该指令处理完,应立即停止计数器,并不再增长。在处理最后一个工作项实例步长时,带上处理结束信号,在执行完最后一个步长、且目的数据回写写完后,发送栅栏减1操作,减少一次数据依赖。
123.图6示出根据本发明的另一实施例的流水线访问通用寄存器组的电路的示意图。
124.如图6中所示,为了支持以上多种模式同时执行,且多个流水线并行执行的结构,同时还需要保证浮点型指令流水线和整型指令处理流水线的高速运行,通用寄存器存储资源设计为独立的多个存储组结构。这样可以保证多流水线同时运行,减少数据读写仲裁与冲突。
125.通过多路复用器de-mux收集各个流水线pipeline_a,pipeline_b,
…
,pipeline_n
发送过来的访问通用寄存器请求。多路复用器de-mux根据请求中的地址,将请求分发到通用寄存器组0 或者通用寄存器组1的数据通路中。高优先级的流水线请求直接进入二级仲裁arbi2。低优先级的流水线请求会先进入读写队列write fifo进行排队,访问请求间,先进行一级仲裁arbi1。一级仲裁arbi1的优胜者再与高优先级的流水线请求在二级仲裁arbi2处进行仲裁。二级仲裁arbi2的优胜者进入读写端口port,访问通用寄存器组0 或者通用寄存器组1的存储体。
126.对于不同任务工作模式,资源分配管理采用统一的形式,以小核心处理为最小分配粒度,大核心资源在分配粒度上为小核心分配粒度的倍数(大核心最大工作项实例数量/小核心最大工作项实例数量=n,其中n为2、4、8
……
)。多个通用寄存器组间,采用交错行分配及存储的形式,如通用寄存器组0 line a,通用寄存器组1 line a,通用寄存器组0 line a+1,通用寄存器组1 line a+1。
127.在各种实施例中,装置200,300可以用于执行如上文所描述的任何方法的步骤。因此,根据该方法的任意特征适用于该装置200,300并且反之亦然。
128.附加地或可替换地,可以使用计算机处理器、存储器单元、存储设备、计算机软件和其他组件在一台或更多台计算机或服务器或类似设备上实现本技术的上述方法、通用对接模块、服务平台或第三方平台。这种计算机或服务器的高级框图在图7中示出。在此,计算机、服务器或其他包括处理器的设备统称为计算设备。计算设备702包含处理器704,处理器704通过执行定义了整体操作的计算机程序指令来控制计算机702的操作。可以将计算机程序指令存储在存储设备712(例如磁盘)中并在需要执行计算机程序指令时将其加载到存储器710中。因此,参照图6的方法的步骤可以由存储在存储器710和/或存储设备712中的计算机程序指令定义,并由执行该计算机程序指令的处理器704控制。计算设备702还包括一个或更多个网络接口706,用于经由网络与其他设备进行通信。计算设备702还包括使用户能够与计算机702进行交互的其他输入/输出设备708(例如,显示器、键盘、鼠标、扬声器、按钮等)。本领域的技术人员将认识到,实际计算机的实施例也可以包含其他组件,并且图7是用于说明目的的这种计算机的一些组件的高级表示。
129.存储设备712和存储器710均包括有形的非暂时性计算机可读存储介质。存储设备712和存储器710均可包括高速随机存取存储器,诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)、双倍数据速率同步动态随机存取存储器(ddr ram)或其他随机存取固态存储器设备,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备(诸如内部硬盘和可移动磁盘)、磁光盘存储设备、光盘存储设备、闪存设备、半导体存储器设备(诸如可擦除可编程只读存储器(eprom)、电可擦可编程只读存储器(eeprom))、紧凑盘只读存储器(cd-rom)、数字多功能盘只读存储器(dvd-rom)盘或其他非易失性固态存储设备。
130.在另一实施例中,可以在基于网络的云计算系统中实现上述方法、通用对接模块、服务平台或第三方平台。在这样的基于网络的云计算系统中,服务器经由网络与一个或更多个客户端计算机通信。客户端计算机可以例如经由驻留在客户端计算机上并在其上运行的网络浏览器应用与服务器进行通信。客户端计算机可以将数据存储在服务器上,并经由网络访问该数据。客户端计算机可以经由网络将数据请求或在线服务请求传送到服务器。服务器可以实施所请求的服务,并将数据提供给(一个或多个)客户端计算机。服务器还可以传送被适配为使客户端计算机实施指定功能(例如,实施计算,在屏幕上显示指定数据
等)的数据。上述方法的某些步骤可以由服务器或由基于网络的云计算系统中的其他计算机/处理器实施。上述方法的某些步骤可以由基于网络的云计算系统中的客户端计算机本地实施。上述方法的步骤可以由基于网络的云计算系统中的一个或更多个设备或者由本地客户端计算机以任何组合来实施。
131.应认识到为了清楚起见在单独实施例的上下文中描述的本技术的某些特征还可以在单个实施例中以组合的方式提供。相反,为了简便起见在单个实施例的上下文中描述的本技术的各种特征还可以单独地或以任何适当的子组合或在本技术的任何其他所述实施例中适当地提供。不应将在各种实施例的上下文中描述的某些特征视为那些实施例的必要特征,除非该实施例在没有那些元素的情况下无效。
132.虽然已结合本技术的具体实施例描述了本技术,但是很明显,许多替换、修改和变更对于本领域的技术人员来说将是显而易见的。因此,旨在涵盖属于随附权利要求的精神和广泛范围内的所有此类替换、修改和变更。
133.本说明中提及的所有公开、专利和专利申请通过引用整体地结合于本文中,引用的程度如同具体且特别地指示每个单独的公开、专利或专利申请以通过引用结合于本文一样。另外,不应将本技术中的任何参考的引用或识别理解为允许此类参考作为现有技术可用于本技术。在使用分段标题的情况下,不应将其理解为一定是限制性的。
技术特征:
1.一种兼容多种任务工作模式的任务执行方法,其特征在于,所述方法包括:基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及执行所述待执行任务。2.根据权利要求1所述的方法,其特征在于,所述任务工作模式是基于应用类型和/或资源使用情况确定的。3.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述组装之前,将接收到的工作组内各工作项拆解成多个工作项实例。4.根据权利要求1所述的方法,其特征在于,所述基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,包括:根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。5.根据权利要求1所述的方法,其特征在于,所述执行所述待执行任务,包括:通过多个流水线从多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个流水线是多个独立的流水线,所述多个独立的流水线分别读写通用寄存器组。6.根据权利要求1所述的方法,其特征在于,所述执行所述待执行任务,包括:对第一粒度的待执行任务进行分段,其中第一粒度大于第二粒度并且分段的数量等于第一粒度除以第二粒度所得的商;以及根据所述分段的数量对第一粒度的待执行任务进行循环处理。7.根据权利要求6所述的方法,其特征在于,所述执行所述待执行任务,还包括:跳过全部为非活跃工作项实例的分段,处理具有活跃工作项实例的分段。8.根据权利要求1所述的方法,其特征在于,所述方法还包括:确定所述组装得到的任务是否需要配置中继寄存器;在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。10.根据权利要求1所述的方法,其特征在于,所述从已组装的任务中确定待执行任务,包括:确定已组装的任务中就绪状态的任务;从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所
述目标任务为未就绪状态的任务。11.根据权利要求10所述的方法,其特征在于,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。12.根据权利要求1所述的方法,其特征在于,所述方法还包括:在执行所述待执行任务的过程中出现待解除的依赖关系的情况下,暂停执行所述待执行任务;将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。13.根据权利要求10至12中任意一项所述的方法,其特征在于,所述方法还包括:响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就绪状态的任务变更为就绪状态的任务。14.根据权利要求1所述的方法,其特征在于,所述方法还包括:响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。15.一种兼容多种任务工作模式的任务执行装置,其特征在于,所述装置包括:
‑ꢀ
实例打包处理单元,其用于基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;
‑ꢀ
调度和指令控制单元,其用于从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及
‑ꢀ
多个流水线,其用于执行所述待执行任务。16.根据权利要求15所述的装置,其特征在于,所述任务工作模式是基于应用类型和/或资源使用情况确定的。17.根据权利要求15所述的装置,其特征在于,所述装置还包括:
‑ꢀ
计算着色器构造器,其用于在所述组装之前将接收到的工作组内各工作项拆解成多个工作项实例。18.根据权利要求15所述的装置,其特征在于,所述基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,包括:根据任务工作模式对应的粒度、工作项实例起始信息、工作项实例数据量和工作项实例结束信号,组装所述至少一个任务,其中,在剩余的工作项实例的数量达不到对应粒度的最大数量的情况下,将所述剩余的工作项实例组装成一个任务。19.根据权利要求15所述的装置,其特征在于,所述装置还包括多个通用寄存器组,其中所述多个流水线从所述多个通用寄存器组调用数据并对数据进行处理,其中所述多个通用寄存器组分别具有独立的读写端口以及仲裁逻辑并且其中所述多个流水线是多个独立的流水线,所述多个独立的流水线分别读写通用寄存器组。20.根据权利要求15所述的装置,其特征在于,所述流水线还用于:对第一粒度的待执行任务进行分段,其中第一粒度大于第二粒度并且分段的数量等于第一粒度除以第二粒度所得的商;以及根据所述分段的数量对第一粒度的待执行任务进行循环处理。21.根据权利要求20所述的装置,其特征在于,所述流水线还用于:跳过全部为非活跃
工作项实例的分段,处理具有活跃工作项实例的分段。22.根据权利要求15所述的装置,其特征在于,所述调度和指令控制单元用于:确定组装得到的任务是否需要配置中继寄存器;在不需要配置中继寄存器的情况下,确定所述组装得到的任务为就绪状态的任务;在需要配置中继寄存器的情况下,确定所述组装得到的任务为未就绪状态的任务。23.根据权利要求22所述的装置,其特征在于,所述调度和指令控制单元还用于,响应于所述未就绪状态的任务的中继寄存器已完成配置,将所述未就绪状态的任务变更为就绪状态的任务。24.根据权利要求15所述的装置,其特征在于,所述调度和指令控制单元还用于:确定已组装的任务中就绪状态的任务并且从所述就绪状态的任务中确定目标任务;在为所述目标任务执行取指和译码过程中均不存在待解除的依赖关系的情况下,确定所述目标任务为所述待执行任务;或者在为所述目标任务执行取指或者译码过程中存在待解除的依赖关系的情况下,确定所述目标任务为未就绪状态的任务。25.根据权利要求24所述的装置,其特征在于,所述待解除的依赖关系包括:指令缓存缺失或阻塞型栅栏条件。26.根据权利要求15所述的装置,其特征在于,所述调度和指令控制单元还用于:在执行所述待执行任务的过程中出现待解除的依赖关系的情况下,将所述待执行任务变更为未就绪状态的任务,并更新对应的待解除的依赖关系,其中,所述待解除的依赖关系包括以下至少一种:工作组同步未满足、互斥条件未满足、异步传输信号未满足以及休眠条件未满足。27.根据权利要求24至26中任意一项所述的装置,其特征在于,所述调度和指令控制单元还用于:响应于所述未就绪状态的任务的所有待解除的依赖关系均已被解除,将所述未就绪状态的任务变更为就绪状态的任务。28.根据权利要求15所述的装置,其特征在于,所述调度和指令控制单元还用于:响应于所述待执行任务执行结束,释放所述待执行任务所占用的资源。29.一种电子设备,其特征在于,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行权利要求1至14中任意一项所述的方法。30.一种其上存储有指令的计算机可读介质,其特征在于,所述指令当被执行时使得计算设备执行根据权利要求1至14中任一项所述的方法。
技术总结
本公开涉及一种兼容多种任务工作模式的任务执行方法,其包括:基于所述任务工作模式对应的粒度,将所述任务工作模式对应的多个工作项实例组装成至少一个任务,其中,所述任务工作模式对应的粒度表征所组装任务包括的工作项实例的最大数量,不同任务工作模式对应的粒度不同;从已组装的任务中确定待执行任务,其中,所述已组装的任务包括至少一种任务工作模式的任务;以及执行所述待执行任务。本公开还涉及一种兼容多种任务工作模式的任务执行装置。装置。装置。
技术研发人员:请求不公布姓名
受保护的技术使用者:摩尔线程智能科技(北京)有限责任公司
技术研发日:2023.05.26
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
