CN116400982B - 配置中继寄存器模块的方法和装置、计算设备和可读介质 - Google Patents
配置中继寄存器模块的方法和装置、计算设备和可读介质 Download PDFInfo
- Publication number
- CN116400982B CN116400982B CN202310607003.0A CN202310607003A CN116400982B CN 116400982 B CN116400982 B CN 116400982B CN 202310607003 A CN202310607003 A CN 202310607003A CN 116400982 B CN116400982 B CN 116400982B
- Authority
- CN
- China
- Prior art keywords
- task
- relay
- allocated
- registers
- register
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 56
- 238000004364 calculation method Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 11
- 238000010586 diagram Methods 0.000 description 16
- 230000000903 blocking effect Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 125000004122 cyclic group Chemical group 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 239000002699 waste material Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000003032 molecular docking Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 101100421134 Schizosaccharomyces pombe (strain 972 / ATCC 24843) sle1 gene Proteins 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- -1 seg2 Proteins 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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/30098—Register arrangements
- G06F9/30105—Register structure
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开涉及一种配置中继寄存器模块的方法,其包括以下步骤:接收任务调度器发送的至少一个任务的启动分配请求;基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量;针对每个任务,分配对应数量的中继寄存器;在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务;其中所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。本公开还涉及一种配置中继寄存器模块的装置。
Description
技术领域
本公开涉及芯片技术领域,尤其是涉及一种配置中继寄存器模块的方法和装置。此外,本公开还涉及一种对应的计算设备和计算机可读介质。
背景技术
通用数据寄存器可以用于中央处理器或者图形处理器各流水线存放属性、私有数据等相关信息,其使用量一般较大。相关技术中,会出现各流水线同时访问通用数据寄存器端口造成拥塞等待的问题。
发明内容
本公开提出一种配置中继寄存器模块的技术方案,通过为任务动态配置用于存储基于任务的指令运算得到的中间结果的中继寄存器,能够缓解各流水线同时访问通用数据寄存器端口造成拥塞等待的问题。
根据本公开的一个方面,提供了一种配置中继寄存器模块的方法,其包括以下步骤:
- 接收任务调度器发送的至少一个任务的启动分配请求,
- 基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量,
- 针对每个任务,分配对应数量的中继寄存器,
- 在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务,其中,所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。
根据该方法的一些示例性实施例,所述启动分配请求包括任务的工作模式和待分配给任务中每个工作项实例的中继寄存器的数量,其中,所述基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量,包括:根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。
根据该方法的一些示例性实施例,所述待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。
根据该方法的一些示例性实施例,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,并且相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。
根据该方法的一些示例性实施例,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。
根据该方法的一些示例性实施例,所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,所述方法还包括:在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。
根据该方法的一些示例性实施例,所述针对每个任务,分配对应数量的中继寄存器,包括:基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。
根据该方法的一些示例性实施例,所述可用行包括索引值,所述任务包括编号,所述方法还包括:获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
根据该方法的一些示例性实施例,所述方法还包括:响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,其中,所述物理地址用于对所述中继寄存器模块进行访问。
根据该方法的一些示例性实施例,所述方法还包括:响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。
根据本公开的另一方面,提供了一种配置中继寄存器模块的装置,其包括以下模块:
- 中继寄存器控制器,其用于接收任务调度器发送的至少一个任务的启动分配请求;并且基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量;
- 分配单元,其针对每个任务,分配对应数量的中继寄存器;
- 通知单元,在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务;
- 其中,所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。
根据该装置的一些示例性实施例,所述启动分配请求包括任务的工作模式和待分配给任务中每个工作项实例的中继寄存器的数量,所述中继寄存器控制器被配置成,根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。
根据该装置的一些示例性实施例,所述待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。
根据该装置的一些示例性实施例,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,并且相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。
根据该装置的一些示例性实施例,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。
根据该装置的一些示例性实施例,所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,所述分配单元被配置成,在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。
根据该装置的一些示例性实施例,所述分配单元被配置成,基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。
根据该装置的一些示例性实施例,所述可用行包括索引值,所述任务包括编号,所述分配单元还被配置成,获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
根据该装置的一些示例性实施例,所述分配单元还被配置成,响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,其中,所述物理地址用于对所述中继寄存器模块进行访问。
根据该装置的一些示例性实施例,所述分配单元还被配置成,响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。
根据本公开的另一方面,提供了一种电子设备,其包括:处理器;和用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行根据上述实施例中任一项所述的方法。
根据本公开的另一方面,提供了一种其上存储有指令的计算机可读介质,所述指令当被执行时使得计算设备执行根据上述实施例中任一项所述的方法。
通过本公开的一个实施例,由于可以根据每个任务的启动分配请求给每个任务分配对应数量的中继寄存器,这样,通过动态配置用于存储基于任务的指令运算得到的中间结果的中继寄存器,能够缓解各流水线同时访问通用数据寄存器端口造成拥塞等待的问题。
附图说明
现在将参照附图描述本公开的具体示例性实施例。然而,本公开可以以很多不同的形式实施,并且不应该被解读为限于本文所阐述的实施例;相反,这些实施例被提供以便使该公开全面而完整,并且将向本领域技术人员完全表达本公开的范围。在对附图所示特定示例性实施例的详细描述中所使用的术语不打算对本公开是限制性的。在附图中,类似的数字指代类似的部件。
图1示出根据本公开的一个实施例的配置中继寄存器模块的方法100的流程图。
图2示出中继寄存器与 任务(wave)固定绑定的示意图。
图3示出根据本公开的一个实施例的配置中继寄存器模块的装置300的框图。
图4示出根据本公开的另一实施例的配置中继寄存器模块的装置400的框图。
图5示出根据本公开的另一实施例的配置中继寄存器模块的装置500的框图。
图6示出根据本公开的一个实施例的动态分配中继寄存器的示意图。
图7示出根据本公开的一个实施例的任务调度器与中继寄存器配置装置之间的交互的示意图。
图8示出根据本公开的另一实施例的任务调度器与中继寄存器配置装置之间的交互的示意图。
图9示出根据本公开一个实施例的计算设备的框图。
具体实施方式
为使本公开的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本公开技术方案作进一步说明。应该进一步理解,使用在该说明书中,术语“包括”意指存在所陈述的特征、步骤、操作、部件和/或组件,但是并不排除存在或添加一个或更多个其他特征、步骤、操作、部件、组件和/或其组成的组。
相关技术中,通用数据寄存器用于CPU或者GPU各流水线中存放属性、私有数据或地址等相关信息,其使用量一般较大,例如,一般情况下每个任务的任意一个工作项实例均可以分配几十个到最多两百多个。并且,这种配置数量随着任务数量的变化而变化,例如,单个任务使用通用寄存器数量多,能启动的任务数量必然就少,甚至无法按照设定的最多任务数量而使用。同时,通用数据寄存器供所有流水线使用,包括整型或浮点型ALU流水线、特殊算数功能流水线、纹理采样流水线等等,这就使得各流水线同时访问通用数据寄存器端口造成拥塞等待等问题。而内核中计算ALU处理单元运行在内核高频状态下,也正是这种高速运转,需要减少通用数据寄存器访问拥塞,从而使得内核处理能够达到最好的性能。
本公开提供一种配置中继寄存器模块的方法,其中,中继寄存器模块可以用来存储基于任务的指令运算得到的中间结果,例如,存放浮点运算或者定点运算的中间结果。这样,在前后几条指令之间使用的中间结果,可以立即从中继寄存器读取并被后续指令使用,从而能够减少通用数据寄存器的访问压力,以使得内核处理能过够达到较好的性能,并且,还可以提高浮点运算单元的运行效率。
通过中继寄存器存放指令中间结果,可以使得流水线中任务的后续指令可以快速访问获取该中间结果。中继寄存器的使用可以减少浮点型逻辑运算单元以及整型逻辑运算单元流水线中访问通用数据寄存器的压力,它具有访问速度快、周期短、带宽高、容量小等特点。并且,编译器在编译过程中可以通过配合使用通用数据寄存器和中继寄存器资源来优化编译出的指令,使逻辑运算单元流水线性能更佳。
为便于理解,下文以应用于GPU为例进行说明,本公开实施例提供的配置中继寄存器模块的方法可以适用于任何应用场景。
现有桌面GPU架构基本使用了纯SIMD(Single Instruction Multiple Data,单指令多数据流)32或CUDA的纯SIMT(Single Instruction Multiple Thread,单指令多线程)32,这种纯SIMD32的小核心结构固定将32个工作项实例组装在一起执行,并行性很好。通常在并行程序设计中使用SIMD32结构,32个工作项实例同时执行相同的指令行为等。在部分移动GPU架构中,为了减少内核面积和降低功耗,通常会采用SIMD128这种128个工作项实例组装在一起执行的大核心结构。然而,SIMD32小核心结构对于无需太过于复杂的计算,会增加线程调度次数、指令发射和取指次数,而SIMD128大核心结构对于小任务,资源浪费比较严重。因此,根据不同的使用场景采用不同的结构是适宜的。
在本申请中,wave是一种自定义的SIMD Thread(线程),wave32表示32个工作项实例组装成的并行线程束,wave128表示128个工作项实例组装成的并行线程束。
图1示出根据本公开的一个实施例的配置中继寄存器模块的方法100的流程图。示例性地,本公开的配置中继寄存器模块的方法可以由配置中继寄存器模块的装置执行,例如,GPU中用于配置中继寄存器模块的装置执行。如图1中所示,方法100包括:
步骤S100,接收任务调度器发送的至少一个任务的启动分配请求;
步骤S200,基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量;
步骤S300,针对每个任务,分配对应数量的中继寄存器;
步骤S400,在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务;
其中,所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。
通过这种方式,由于可以根据每个任务的启动分配请求给每个任务分配对应数量的中继寄存器,通过动态配置用于存储基于任务的指令运算得到的中间结果的中继寄存器,能够缓解各流水线同时访问通用数据寄存器端口造成拥塞等待的问题。并且,即使由于个别任务需要使用大量通用数据寄存器资源而启动任务数量少时,可以基于启动分配请求给待运行的任务分配更多的中继寄存器资源,从而充分利用了在固定分配中继寄存器时闲置的中继寄存器区域,进而提高中继寄存器的利用率。
其中,启动分配请求可以是针对一个或多个任务的启动分配请求,分配完成发送唤醒信号至任务调度器,可以是在启动分配请求对应所有任务均分配完成的情况下,也可以针对任意一个已分配完成的任务发送的唤醒信号,其中,针对一个任务,分配完成可以是确定分配给该任务的所有中继寄存器均已分配完成,也可以是确定分配给该任务的部分中继寄存器已分配完成。示例性地,配置中继寄存器模块的装置确定当前可用的中继寄存器行仅为待分配给该任务的部分中继寄存器行,则也可以进行部分配置,例如,待分配给该任务4行中继寄存器,当前可用的中继寄存器行为2行,可以在2行分配完成后,确定分配完成,并发送唤醒信号至所述任务调度器。需要说明的是,部分配置的情况下,在执行部分代码后确定解析出来的指令需要更多中继寄存器的情况下,该任务可被阻塞,任务调度器可以重新发起启动分配请求,配置中继寄存器模块的装置基于启动分配请求,执行中继寄存器配置操作,本公开对此不作限制。示例性地,任务调度器发送的启动分配请求对应的任务为编译确定需要配置中继寄存器的任务。
本申请中,中继寄存器可以动态分配给对应的任务,分配给每个任务的中继寄存器数量和中继寄存器区域都可以动态变化,例如,在个别任务需要使用大量通用数据寄存器资源而启动任务数量少时,可以分配给启动任务较多数量的中继寄存器,充分利用中继寄存器资源,从而可以解决中继寄存器与任务固定绑定、当启动任务数量少时,空闲的任务部分的中继寄存器区域仍然无法使用,导致资源浪费的问题。
示例性地,任务可以包括wave32和wave128。替代地或附加地,任务也可以包括wave64等。示例性地,wave32的启动分配请求可以包括该任务的工作模式、即wave32模式和待分配给任务中每个工作项实例的中继寄存器的数量,该数量可以根据同时启动的任务的数量被设置为2、4、6、8等。示例性地,wave128的启动分配请求可以包括该任务的工作模式、即wave128模式和待分配给任务中每个工作项实例的中继寄存器的数量,该数量可以根据同时启动的任务的数量被设置为2、4等。在一些可选的实施例中,wave128模式的任务中每个工作项实例所分配的中继寄存器的数量小于wave32模式的任务中每个工作项实例所分配的中继寄存器的数量。此外,相同工作模式的不同任务中每个工作项实例所分配的中继寄存器的数量也可以不同。例如,一个wave32中每个工作项实例分配的中继寄存器的数量为2,而另一wave32中每个工作项实例分配的中继寄存器的数量为4。
通过这种方式,可以根据每个任务的启动分配请求给每个任务分配不同数量的中继寄存器数量。需要说明的是,为兼容多种任务工作模式、采用中继寄存器与任务绑定的方式,需要按照最大执行粒度设计每个任务对应的中继寄存器,例如,为兼容wave32模式和wave128模式,需要按照128个工作项实例的执行力度来设计,硬件实现开销过大。并且,如果通用数据寄存器数据量使用大,导致任务启动不满的情况下,中继寄存器与任务绑定的方式会导致每个任务可使用数量固定,此时大量中继寄存器资源空闲无法使用。
本公开实施例可以为每个任务动态分配中继寄存器,无需按照多任务工作模式中的最大执行粒度来设计,能够有效减少硬件开销。针对在不同模式运行的情况下,可以实现在尽量不增加开销的情况下,充分使用中继寄存器资源,提高使用效率。
示例性地,由于中继寄存器并没有与各个工作项实例固定绑定,因此在确定分配给每个任务的中继寄存器数量后,可以将相应数量的中继寄存器分配给相应任务。在分配完成的情况下,发送唤醒信号至任务调度器,以便任务调度器启动已分配中继寄存器的任务。示例性地,任务调度器中的任务如果需要配置中继寄存器,则任务调度器可以将该任务阻塞住,直至收到已对该任务完成中继寄存器配置的唤醒信号之后,任务调度器可以基于收到的唤醒信号,允许该任务参与调度。
其中,基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量可以是基于任务的类型确定每个任务对应的中继寄存器数量,例如,针对wave128模式的任务,可以分配与wave128模式对应数量的中继寄存器,还可以是启动分配请求包括任务申请的中继寄存器数量,基于任务申请的中继寄存器数量进行分配,本公开对确定待分配给所述至少一个任务中每个任务的中继寄存器的数量的方式不作限制。
在一种可能的实现方式中,所述启动分配请求包括任务的工作模式和待分配给任务中每个工作项实例的中继寄存器的数量,其中,所述基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量,包括:根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。
示例性地,wave32模式对应的粒度为32,并且如果待分配给wave32中每个工作项实例的中继寄存器的数量为4,则分配给该wave32的中继寄存器的数量为32*4=128。示例性地,wave128模式对应的粒度为128,并且如果待分配给wave128中每个工作项实例的中继寄存器的数量为2,则分配给该wave128的中继寄存器的数量为128*2=256。此外,即使wave32中所包括的工作项实例的数量小于32,也给该wave32分配128个中继寄存器。同样,即使wave128中所包括的工作项实例的数量小于128,也给该wave128分配256个中继寄存器。
如前所述,在兼容多种工作模式时,如wave32与wave128同时使用的状态下,如果采用绑定模式,则需要按照最大执行粒度的模式来设计,此处需要按wave128的128个工作项实例的执行粒度来设计。这样,在执行wave32任务时,有对应96个工作项实例的中继寄存器空间闲置,这导致了极大的资源浪费。通过本公开实施例的实现方式,可以给wave32任务中每个工作项实例配置更多的中继寄存器使用量,从而使读写效率更高。
在一种可能的实现方式中,所述待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。
示例性地,在编译器编译时可以根据任务占用通用数据寄存器资源的多少而限定同时启动任务的数量来决定分配给每个工作项实例的中继寄存器数量。示例性地,待分配给任务中每个工作项实例的中继寄存器的数量与同时启动的任务的限定数量呈反相关(或称负相关)关系,例如,同时启动的任务的限定数量越小,待分配给任务中每个工作项实例的中继寄存器的数量可以越大。通过这种方式,能够实现对中继寄存器资源的更高效的利用。
如前所述,不同工作模式的任务中每个工作项实例待分配的中继寄存器数量可以相同或不同。
在一种可能的实现方式中,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。
示例性地,wave128模式的任务中每个工作项实例所分配的中继寄存器的数量可以等于或小于wave32模式的任务中每个工作项实例所分配的中继寄存器的数量。例如,wave128模式的任务中每个工作项实例所分配的中继寄存器的数量为2,而wave32模式的任务中每个工作项实例所分配的中继寄存器的数量为4。当然,也可以给两种模式下的每个工作项实例分别分配其他数量的中继寄存器,这可以视同时启动的任务数量来确定。附加地,还可以根据同时启动的任务的工作模式来确定。此外,相同工作模式的不同任务中每个工作项实例所分配的中继寄存器的数量也可以不同。例如,一个wave32中每个工作项实例分配的中继寄存器的数量为2,而另一wave32中每个工作项实例分配的中继寄存器的数量为4。当然,也可以给相同模式下的每个工作项实例分别分配其他数量的中继寄存器,这可以视同时启动的任务数量来确定。附加地,还可以根据同时启动的任务的工作模式来确定。在一些可选的实施例中,相同工作模式的不同任务中每个工作项实例所分配的中继寄存器的数量可以是相同的。
通过这种方式,能够实现对中继寄存器资源的更高效的利用。
其中,待分配给每个任务的中继寄存器的数量可以被限定,例如,可以小于或等于参考数值。
在一种可能的实现方式中,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。
示例性地,假设总的中继寄存器数量K = M个bank * N个任务 * SIMD_Numb,每个任务配置单个实例的最大中继寄存器使用量T, aligned_size表示对齐的单个实例中继寄存器行所包含的DW数(DW为Double-Word的简写,译为双字),aligned_line表示需要分配的中继寄存器行数。中继寄存器的数量所能支持的纯wave128模式的任务的数量为Num_of_Wave128= K/(SIMD_128* aligned_size * ((T+ aligned_ size - 1)/ aligned_size)),超过此数量的Wave将因分配不到中继寄存器而进入阻塞状态;中继寄存器的数量所能支持的纯wave32模式的任务的数量为Num_of_Wave32= K/(SIMD_32* aligned_size *((T+ aligned_ size - 1)/ aligned_size)),超过此数量的Wave将因分配不到中继寄存器而进入阻塞状态。
通过这种方式,在给每个任务配置了最大中继寄存器使用量的情况下,使每个任务所分配的中继寄存器的数量在一个范围内灵活选择,既保证了中继寄存器的更高效利用,又减少某个任务分配过多中继寄存器,从而影响新的任务的启动的情况。
在一种可能的实现方式中,所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,所述方法还包括:在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。
示例性地,wave32可以包括大于等于1个工作项实例且小于等于32个工作项实例,而wave128可以包括大于等于1个工作项实例且小于等于128个工作项实例。替代地,wave128也可以包括大于等于33个工作项实例且小于等于128个工作项实例。示例性地,每个工作项实例都可以分配至少一个中继寄存器,例如2个、4个、6个等。同一个任务内的每个工作项实例具有自己的中继寄存器空间,同一个任务前面指令写回后,通过任务内部指令调度隐藏延迟后,可立即提供给后一条指令使用,再次写回时,只要保证前面指令使用完成,即可直接覆盖前面的结果。例如,同一工作项实例包括第一指令和所述第二指令,第二指令为所述第一指令的后续指令,当第一指令的计算结果已使用完毕的情况下,第二指令的结果可以写入存储第一指令的中继寄存器,也即覆盖第一指令的中间结果。
通过这种方式,可以保证中继寄存器的循环利用,无需给每个工作项实例分配过多的中继寄存器、提高中继寄存器的利用率。
在一种可能的实现方式中,所述针对每个任务,分配对应数量的中继寄存器,包括:基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。
示例性地,通过一个有效可用行信息表来管理中继寄存器模块的中继寄存器行。当中继寄存器模块中的某一中继寄存器行可供分配时,在有效可用行信息表中对应于该可供分配的中继寄存器行的标志为1;当中继寄存器模块中的某一中继寄存器行不可供分配时,例如已经被分配或占用,在有效可用行信息表中对应于该不可供分配的中继寄存器行的标志为0。示例性地,当将该可供分配的中继寄存器行分配给某一任务时,将该中继寄存器行在有效可用行信息表中的标志变更为0。替代地,当中继寄存器模块中的某一中继寄存器行可供分配时,在有效可用行信息表中对应于该可供分配的中继寄存器行的标志为0;当中继寄存器模块中的某一中继寄存器行不可供分配时,例如已经被分配或占用,在有效可用行信息表中对应于该不可供分配的中继寄存器行的标志为1。对应地,当将该可供分配的中继寄存器行分配给某一任务时,将该中继寄存器行在有效可用行信息表中的标志变更为1。
通过这种方式,可以给每个任务动态地分配中继寄存器行。
在一种可能的实现方式中,所述可用行包括索引值,所述任务包括编号,所述方法还包括:获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
示例性地,每个任务在任务调度器中都被分配一个编号waveid,并且任务调度器中每个任务的编号不同于其他任务的编号,也即通过该编号可以识别该任务。示例性地,每个可用行对应于一个索引值bitid。在一个示例中,将有效可用行信息表设置成一个48bit的有效标记表,每1bit表示一个中继寄存器行有效可用。一般用1表示可使用,0表示已使用。实质上就是查找第x-bit有效,然后将这个x与任务的编号waveid一起填到行地址表中。示例性地,任务的编号waveid可以被用于管理所述行地址表,这样流水线在访问中继寄存器时只需要发送任务的编号就可以对中继寄存器进行访问。示例性地,可以根据分配给任务的中继寄存器数量,连续查找有效可用行信息表,配置多行中继寄存器供该任务使用,可以一次遍历一遍进行填充。
通过这种方式,可以将任务的编号与中继寄存器模块中的可用的中继寄存器行关联,使得在流水线访问中继寄存器时只需要提供任务的编号。
在一种可能的实现方式中,所述方法还包括:响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,其中,所述物理地址用于对所述中继寄存器模块进行访问。
示例性地,由于行地址表是通过任务的编号进行管理的,当接收对所述中继寄存器模块的访问请求,通过任务的编号就可以确定分配给该任务的中继寄存器行的索引值,通过该索引值就可以确定分配给该任务的中继寄存器行的物理地址(LineID和BankID),通过该物理地址就可以对中继寄存器的实际存储区域进行访问。
通过这种方式,可以实现对中继寄存器的实际存储区域的简单且高效访问。
在一种可能的实现方式中,所述方法还包括:响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。
示例性地,任务调度器在收到流水线执行相应任务结束的信号之后,释放该任务在任务调度器中所占用的空间并且将一个包含任务编号的任务结束信号发送给中继寄存器控制器。该中继寄存器控制器响应于接收到该任务结束信号,通知分配单元来回收分配给该任务编号的中继寄存器行。示例性地,分配单元将该任务编号对应的索引值所指向的有效可用行信息表中的位从0变更为1,表示可供分配。
通过该方式,可以实现中继寄存器存储空间的循环利用。
图2示出中继寄存器与任务(wave)固定绑定的示意图。
如图2中所示,中继寄存器与wave固定绑定,属于固定配置,无需分配。中继寄存器数量也是按照内核支持的最大wave数量固定配置,每个wave所分配的中继寄存器数量无法根据启动wave数量变化而变化,导致wave需要使用大量通用数据寄存器资源而启动wave数量少时,这些空闲的wave部分的中继寄存器区域仍然无法使用,导致资源浪费。
图2中示意了n个wave,每个wave绑定m个中继寄存器,总的开销就是n*m*SIMD实例数量。这个大小始终固定不变,即使启动1个wave,也只能使用m个中继寄存器。受限于中继寄存器开销大,因此一般每个中继寄存器的数量m会固定为2或者4。
图3示出根据本公开的一个实施例的配置中继寄存器模块的装置300的框图。该装置解决问题的原理与前文所述的实施例的方法类似,因此其具体的实施可以参考前文所述的实施例。
如图3中所示,装置300可以包括中继寄存器控制器301、分配单元302和通知单元303。中继寄存器控制器301可以被配置用于接收任务调度器发送的至少一个任务的启动分配请求;并且基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量。在一个示例中,任务调度器发送多个任务的启动分配请求,这些任务可以包括wave32和wave128。替代地或附加地,任务也可以包括wave64等。示例性地,wave32的启动分配请求可以包括该任务的工作模式、即wave32模式和待分配给任务中每个工作项实例的中继寄存器的数量,该数量可以根据同时启动的任务的数量被设置为2、4、6、 8等。进一步地,中继寄存器控制器301可以被配置用于根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。示例性地,wave32模式对应的粒度为32,并且如果待分配给wave32中每个工作项实例的中继寄存器的数量为4,则分配给该wave32的中继寄存器的数量为32*4=128。示例性地,wave128模式对应的粒度为128,并且如果待分配给wave128中每个工作项实例的中继寄存器的数量为2,则分配给该wave128的中继寄存器的数量为128*2=256。此外,即使wave32中所包括的工作项实例的数量小于32,也给该wave32分配128个中继寄存器。同样,即使wave128中所包括的工作项实例的数量小于128,也给该wave128分配256个中继寄存器。
示例性地,待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。例如,在编译器编译时就根据任务占用通用数据寄存器资源的多少而同时启动任务的数量来决定分配给每个工作项实例的中继寄存器数量。通过这种方式,能够实现对中继寄存器资源的更高效的利用。
示例性地,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,并且相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。例如,wave128模式的任务中每个工作项实例所分配的中继寄存器的数量小于wave32模式的任务中每个工作项实例所分配的中继寄存器的数量。例如,wave128模式的任务中每个工作项实例所分配的中继寄存器的数量为2,而wave32模式的任务中每个工作项实例所分配的中继寄存器的数量为4。当然,也可以给两种模式下的每个工作项实例分别分配其他数量的中继寄存器,这视同时启动的任务数量来确定。附加地,还可以根据同时启动的任务的工作模式来确定。此外,相同工作模式的不同任务中每个工作项实例所分配的中继寄存器的数量也可以不同。例如,一个wave32中每个工作项实例分配的中继寄存器的数量为2,而另一wave32中每个工作项实例分配的中继寄存器的数量为4。当然,也可以给相同模式下的每个工作项实例分别分配其他数量的中继寄存器,这视同时启动的任务数量来确定。附加地,还可以根据同时启动的任务的工作模式来确定。在一些可选的实施例中,相同工作模式的不同任务中每个工作项实例所分配的中继寄存器的数量可以是相同的。通过这种方式,能够实现对中继寄存器资源的更高效的利用。
示例性地,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。例如,假设总的中继寄存器数量K = M个bank * N个任务 * SIMD_Numb,每个任务配置最大中继寄存器使用量T,aligned_size表示对齐的单个实例对应的中继寄存器行所包含的DW数,aligned_line表示分配的中继寄存器行数。中继寄存器的数量所能支持的纯wave128模式的任务的数量为Num_of_Wave128= K/(SIMD_128 *aligned_size *((T+ aligned_size- 1)/ aligned_size)),超过此数量的Wave将因分配不到中继寄存器而进入阻塞状态;中继寄存器的数量所能支持的纯wave32模式的任务的数量为Num_of_Wave32= K/(SIMD_32 * aligned_size * ((T+ aligned_ size - 1)/ aligned_size)),超过此数量的Wave将因分配不到中继寄存器而进入阻塞状态。通过这种方式,在给每个任务配置了最大中继寄存器使用量的情况下,使每个任务所分配的中继寄存器的数量在一个范围内灵活选择,既保证了中继寄存器的更高效利用,又避免了某个任务分配过多中继寄存器,从而影响新的任务的启动。
分配单元302可以被配置用于针对每个任务,分配对应数量的中继寄存器。示例性地,分配单元302可以基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。示例性地,通过一个有效可用行信息表来管理中继寄存器模块的中继寄存器行。当中继寄存器模块中的某一中继寄存器行可供分配时,在有效可用行信息表中对应于该可供分配的中继寄存器行的标志为1;当中继寄存器模块中的某一中继寄存器行不可供分配时,例如已经被分配或占用,在有效可用行信息表中对应于该不可供分配的中继寄存器行的标志为0。示例性地,当将该可供分配的中继寄存器行分配给某一任务时,将该中继寄存器行在有效可用行信息表中的标志变更为0。替代地,当中继寄存器模块中的某一中继寄存器行可供分配时,在有效可用行信息表中对应于该可供分配的中继寄存器行的标志为0;当中继寄存器模块中的某一中继寄存器行不可供分配时,例如已经被分配或占用,在有效可用行信息表中对应于该不可供分配的中继寄存器行的标志为1。对应地,当将该可供分配的中继寄存器行分配给某一任务时,将该中继寄存器行在有效可用行信息表中的标志变更为1。通过这种方式,可以给每个任务动态地分配中继寄存器行。
所述可用行包括索引值,所述任务包括编号,分配单元302还可以被配置用于获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
示例性地,每个任务在任务调度器中都被分配一个编号waveid,并且任务调度器中每个任务的编号不同于其他任务的编号,也即通过该编号可以识别该任务。示例性地,每个可用行对应于一个索引值bitid。在一个示例中,将有效可用行信息表设置成一个48bit的有效标记表,每1bit表示一个中继寄存器行有效可用。一般用1表示可使用,0表示已使用。实质上就是查找第x-bit有效,然后将这个x与任务的编号waveid一起填到行地址表中。示例性地,任务的编号waveid可以被用于管理所述行地址表,这样流水线在访问中继寄存器时只需要发送任务的编号就可以对中继寄存器进行访问。示例性地,可以根据分配给任务的中继寄存器数量,连续查找有效可用行信息表,配置多行中继寄存器供该任务使用,可以一次遍历一遍进行填充。通过这种方式,可以将任务的编号与中继寄存器模块中的可用的中继寄存器行关联,使得在流水线访问中继寄存器时只需要提供任务的编号。
分配单元302还可以被配置用于,响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,其中,所述物理地址用于对所述中继寄存器模块进行访问。示例性地,由于行地址表是通过任务的编号进行管理的,当接收对所述中继寄存器模块的访问请求,通过任务的编号就可以确定分配给该任务的中继寄存器行的索引值,通过该索引值就可以确定分配给该任务的中继寄存器行的物理地址(LineID和BankID),通过该物理地址就可以对中继寄存器的实际存储区域进行访问。通过这种方式,可以实现对中继寄存器的实际存储区域的简单且高效访问。
分配单元302还可以被配置用于,响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。示例性地,任务调度器在收到流水线执行相应任务结束的信号之后,将一个包含任务编号的任务结束信号发送给中继寄存器控制器。该中继寄存器控制器响应于接收到该任务结束信号,通知分配单元来回收分配给该任务编号的中继寄存器行。任务调度器在收到中继寄存器控制器的释放回收完成信号后才释放该任务在任务调度器中所占用的空间,完成任务的结束释放操作。示例性地,分配单元将该任务编号对应的索引值所指向的有效可用行信息表中的位从0变更为1,表示可供分配。通过该方式,可以实现中继寄存器存储空间的循环利用。
由于所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,分配单元302还可以被配置用于,在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。示例性地,wave32可以包括大于等于1个工作项实例且小于等于32个工作项实例,而wave128可以包括大于等于1个工作项实例且小于等于128个工作项实例。替代地,wave128也可以包括大于等于33个工作项实例且小于等于128个工作项实例。示例性地,每个工作项实例都分配至少一个中继寄存器,例如1个、2个、4个、6个等。同一个任务内的每个工作项实例具有自己的中继寄存器空间,同一个任务前面指令写回后,通过任务内部指令调度隐藏延迟后,可立即提供给后一条指令使用,再次写回时,只要保证前面指令使用完成,即可直接覆盖前面的结果。通过这种方式,可以保证中继寄存器的循环利用,避免了给每个工作项实例分配过多的中继寄存器(如果没必要的情况下)。
通知单元303可以被配置用于在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务。示例性地,由于中继寄存器并没有与各个工作项实例固定绑定,因此在确定分配给每个任务的中继寄存器数量后,需要将相应数量的中继寄存器分配给相应任务。在分配完成的情况下,发送唤醒信号至任务调度器,以便任务调度器启动已分配中继寄存器的任务。示例性地,任务调度器中的任务如果需要配置中继寄存器,则任务调度器将该任务阻塞住,直至收到已对该任务完成中继寄存器配置的唤醒信号之后,任务调度器才允许该任务参与调度。
图4示出根据本公开的另一实施例的配置中继寄存器模块的装置400的框图。
装置400可以包括中继寄存器控制器、配置管理器、地址转换器和读/写端口。在一种替代的实施方式中,装置400也可以仅包括中继寄存器控制器、配置管理器和地址转换器。中继寄存器控制器可以被配置用于接收上游(例如任务调度器)发送的至少一个任务的启动分配请求(如包含任务的任务编号、工作模式及任务包括的工作项实例数量以及待分配给每个工作项实例的中继寄存器的数量等)。中继寄存器控制器可以根据所接收的任务的启动分配请求来确定待分配给每个任务的所需的中继寄存器行的数量,并且将所需的中继寄存器行的数量发送给配置管理器。配置管理器可用被配置用于根据所需的中继寄存器行的数量对所述中继寄存器进行动态分配。当配置管理器分配完成响应时,中继寄存器控制器将会发送唤醒通知,告知任务调度器该任务所需的中继寄存器分配完成,可以启动该任务参与调度执行。
所述中继寄存器控制器在确定所需的中继寄存器行的数量时根据多模式混合状态下的不同任务所需要的中继寄存器行的不同数量,对不同任务进行动态分配。特别是,所述中继寄存器控制器可以根据由于具体使用场景而减少/增加同时启动任务的数量的情况下,增加/减少相应任务所使用的中继寄存器行的数量。
配置管理器维护一个有效可用行信息表,查找和管理表中相关信息,获取可用有效可分配的信息,并更新有效可用行信息表中内容。在一个示例中,配置管理器从头到尾查找有效可用行信息表,查到第x-bit为标识可使用时(如设置为1表示该行可使用),则将该bit置为标识已使用(如设置为0表示该行已使用),其不能被其他任务占用。在将可用行分配给所述任务之后,配置管理器将任务编号和有效位索引值发送给地址转换器。然后,地址转换器将任务编号和有效位索引值记录在行地址表中。同时,配置管理器对可释放任务的中继寄存器进行回收,更新有效可用行信息表中相关内容,回收供后续任务使用。在一个示例中,当所述任务执行结束时,所述配置管理器将所述可用行信息表中的对应行的标识置为可使用(如设置为1表示该行可使用)。
地址转换器按照任务编号来管理所述行地址表。在一个示例中,所述地址转换器配置最大归属于一个任务的表项数量来限制一些应用场景中单次最多可启动的任务数量。
附加地,当流水线访问中继寄存器模块时,所述地址转换器根据访问请求并且根据所述行地址表来映射产生中继寄存器的物理地址,例如行编号(Line ID)和块编号(BankID)。示例性地,由于行地址表是通过任务的编号进行管理的,当接收对所述中继寄存器模块的访问请求,通过任务的编号就可以确定分配给该任务的中继寄存器行的索引值,通过该索引值就可以确定分配给该任务的中继寄存器行的物理地址(LineID和BankID),通过该物理地址就可以对中继寄存器的实际存储区域进行访问。通过这种方式,可以实现对中继寄存器的实际存储区域的简单且高效访问。
附加地,读/写端口可以被配置用于,ALU流水线经由所述读/写端口根据所述物理地址对所述中继寄存器进行访问。在一种替代的实施方式中,读/写端口也可以设置在中继寄存器模块上。
图5示出根据本公开的另一实施例的配置中继寄存器模块的装置500的框图。
如图5中所示,装置500可以包括中继寄存器控制器、配置管理器、地址转换器、行地址表和读/写端口。在一种替代的实施方式中,装置500也可以仅包括中继寄存器控制器、配置管理器、地址转换器和行地址表。在这种情况下,读/写端口可以设置在中继寄存器模块上。装置500可以如装置400那样来实施,它们的区别在于,在图5中行地址表从配置管理器中分离出来,单独来实施。
在图5中,示例性地按照wave32、wave128兼容模式来进行中继寄存器分配:总的中继寄存器数量K = M个bank * N个任务 * SIMD_Numb。程序启动时,首先配置最大中继寄存器使用量,如最大设置为T。aligned_size表示对齐的单个实例中继寄存器行所包含的DW数。当中继寄存器控制器从任务调度器接收到任务的启动分配请求时,从该启动分配请求中获取中继寄存器行的数量,表示要分配几行中继寄存器。在确定需要配置中继寄存器的情况下,确定所述任务存在阻塞信息,所述阻塞信息包括需要配置中继寄存器;在确定不需要配置中继寄存器的情况下,确定所述任务为就绪状态的任务。这里wave128模式可配置成1,表示每个段(Seg)只能分配1个中继寄存器行,4个段(Seg0、Seg1、Seg2、Seg3)对应4个中继寄存器行。当wave32模式时,可以配置成((T+ aligned_size - 1)/ aligned_size)行,一般该计算结果为0、1、2、3、4个中继寄存器行,对应每个工作项实例的中继寄存器使用量为0、2、4、6、8个。示例性地,当一个任务被分配中继寄存器行未完成时,可以理解成,暂时没有空闲的中继寄存器行可供分配,该任务可以一直等待,直至有其他任务执行完成后释放出可供分配的中继寄存器行,才给该任务分配中继寄存器行。但是,当释放的中继寄存器行的数量不满足启动分配请求所要求的中继寄存器行的数量时,配置管理器将使该任务分配继续等待,直至释放的中继寄存器行的数量满足启动分配请求所要求的中继寄存器行的数量。
在一些可选的实施例中,还可以针对任务执行部分中继寄存器行分配步骤。示例性地,当一个任务需要分配4个中继寄存器行,当前空闲2个中继寄存器行,则可以执行2个中继寄存器行的分配步骤,并在存在其他任务执行完成后释放出可供分配的中继寄存器行的情况下,执行剩余2个中继寄存器行的分配步骤,在待分配给该任务的所有中继寄存器行均已分配的情况下,发送唤醒信号至所述任务调度器。
如wave32需要配置2个中继寄存器行时,配置管理器通过从头到尾查找有效可用行信息表,查到第x-bit标识为可使用(例如1)时,则置为已使用标识(例如0),该bit不能被其他任务占用。此时,将x值作为索引值连同任务编号一起填入行地址表的对应项中。在一个示例中,将有效可用行信息表设置成一个48bit的有效标记表,每1bit表示一个中继寄存器行有效可用。一般用1表示可使用,0表示已使用。实质上就是查找第x-bit有效,然后将这个x与任务的编号waveid一起填到行地址表中。示例性地,任务的编号waveid可以被用于管理所述行地址表,这样流水线在访问中继寄存器时只需要发送任务的编号就可以对中继寄存器进行访问。示例性地,可以根据分配给任务的中继寄存器数量,连续查找有效可用行信息表,配置多行中继寄存器供该任务使用,可以一次遍历一遍进行填充。通过这种方式,可以将任务的编号与中继寄存器模块中的可用的中继寄存器行关联,使得在流水线访问中继寄存器时只需要提供任务的编号。当任务结束释放所分配的中继寄存器行时,通过行地址表中表项将有效可用行地址表中对应bit置为可使用即可。
图6示出根据本公开的一个实施例的动态分配中继寄存器的示意图。
如图6中所示,在完成动态分配后,wave32 分配2个中继寄存器行,wave128的每个段分配一个中继寄存器行,映射结构如图6所示。显而易见的是,在同时启动的任务比较少的情况下,可以给每个任务分配更多的中继寄存器行。示例性地,wave32 分配4个中继寄存器行(用于特殊优化),wave128的每个段分配2个中继寄存器行。相较于固定绑定的情况,针对任务对通用数据寄存器使用量多而导致同时启动任务的数量比较少的应用,可以动态分配更多中继寄存器资源给每个任务或者动态分配更多中继寄存器资源作为通用数据寄存器使用,有利于减轻多流水线同时对通用数据寄存器的访问压力,同时提高了中继寄存器资源利用率。
如图6中所示,同一个任务内的每个工作项实例具有自己的中继寄存器空间,同一个任务前面指令写回后,通过任务内部指令调度隐藏延迟后,可立即提供给后一条指令使用,再次写回时,只要保证前面指令使用完成,即可直接覆盖前面的结果。
图7示出根据本公开的一个实施例的任务调度器与中继寄存器配置装置之间的交互的示意图。
如图7中所示,程序实现通过编译器编译后,配置使用中继寄存器的使用量。完成后,软件或驱动模块会将它配置进命令控制流,然后通过中间各模块的调度管理并传递中间寄存器的使用量。直到传导进任务调度器存储wave存储中。此时任务调度器将根据这个中继寄存器使用量是否为0,这里可以根据wave配置执行模式不同,设置为不同的使用量。若为0, 则不分配中继寄存器,将wave状态直接设置为就绪状态进入调度信息队列进行调度执行;当不为0时,该wave需要通过中继寄存器配置装置进行配置,同时设置配置未完成的阻塞状态。当该wave配置完成后,监视器检测到该wave完成配置,清除阻塞状态,更新wave条目为就绪状态,将wave状态更新为就绪状态进入调度信息队列进行调度执行。
图8示出根据本公开的另一实施例的任务调度器与中继寄存器配置装置之间的交互的示意图。
如图8中所示,当wave执行结束时,wave结束单元执行了结束指令后,会发出该wave编号的结束信号给任务调度器。任务调度器收到该结束信号,会发送释放信号给中继寄存器配置装置。当完成释放并回收中继寄存器后,再返回wave编号的释放回收完成信号,然后才会释放该wave存储信息,完成wave的结束释放操作。
在各种实施例中,装置300、400、500可以用于执行如上文所描述的任何方法的步骤。因此,根据该方法的任意特征适用于该装置300、400、500并且反之亦然。
附加地或可替换地,可以使用计算机处理器、存储器单元、存储设备、计算机软件和其他组件在一台或更多台计算机或服务器或类似设备上实现本申请的上述方法、通用对接模块、服务平台或第三方平台。这种计算机或服务器的高级框图在图9中示出。在此,计算机、服务器或其他包括处理器的设备统称为计算设备。计算设备902包含处理器904,处理器904通过执行定义了整体操作的计算机程序指令来控制计算机902的操作。可以将计算机程序指令存储在存储设备912(例如磁盘)中并在需要执行计算机程序指令时将其加载到存储器910中。因此,参照图1的方法的步骤可以由存储在存储器910和/或存储设备912中的计算机程序指令定义,并由执行该计算机程序指令的处理器904控制。计算设备902还包括一个或更多个网络接口906,用于经由网络与其他设备进行通信。计算设备902还包括使用户能够与计算机902进行交互的其他输入/输出设备908(例如,显示器、键盘、鼠标、扬声器、按钮等)。本领域的技术人员将认识到,实际计算机的实施例也可以包含其他组件,并且图9是用于说明目的的这种计算机的一些组件的高级表示。
存储设备912和存储器910均包括有形的非暂时性计算机可读存储介质。存储设备912和存储器910均可包括高速随机存取存储器,诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、双倍数据速率同步动态随机存取存储器(DDR RAM)或其他随机存取固态存储器设备,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备(诸如内部硬盘和可移动磁盘)、磁光盘存储设备、光盘存储设备、闪存设备、半导体存储器设备(诸如可擦除可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM))、紧凑盘只读存储器(CD-ROM)、数字多功能盘只读存储器(DVD-ROM)盘或其他非易失性固态存储设备。
在另一实施例中,可以在基于网络的云计算系统中实现上述方法、通用对接模块、服务平台或第三方平台。在这样的基于网络的云计算系统中,服务器经由网络与一个或更多个客户端计算机通信。客户端计算机可以例如经由驻留在客户端计算机上并在其上运行的网络浏览器应用与服务器进行通信。客户端计算机可以将数据存储在服务器上,并经由网络访问该数据。客户端计算机可以经由网络将数据请求或在线服务请求传送到服务器。服务器可以实施所请求的服务,并将数据提供给(一个或多个)客户端计算机。服务器还可以传送被适配为使客户端计算机实施指定功能(例如,实施计算,在屏幕上显示指定数据等)的数据。上述方法的某些步骤可以由服务器或由基于网络的云计算系统中的其他计算机/处理器实施。上述方法的某些步骤可以由基于网络的云计算系统中的客户端计算机本地实施。上述方法的步骤可以由基于网络的云计算系统中的一个或更多个设备或者由本地客户端计算机以任何组合来实施。
应认识到为了清楚起见在单独实施例的上下文中描述的本申请的某些特征还可以在单个实施例中以组合的方式提供。相反,为了简便起见在单个实施例的上下文中描述的本申请的各种特征还可以单独地或以任何适当的子组合或在本申请的任何其他所述实施例中适当地提供。不应将在各种实施例的上下文中描述的某些特征视为那些实施例的必要特征,除非该实施例在没有那些元素的情况下无效。
虽然已结合本申请的具体实施例描述了本申请,但是很明显,许多替换、修改和变更对于本领域的技术人员来说将是显而易见的。因此,旨在涵盖属于随附权利要求的精神和广泛范围内的所有此类替换、修改和变更。
本说明中提及的所有公开、专利和专利申请通过引用整体地结合于本文中,引用的程度如同具体且特别地指示每个单独的公开、专利或专利申请以通过引用结合于本文一样。另外,不应将本申请中的任何参考的引用或识别理解为允许此类参考作为现有技术可用于本申请。在使用分段标题的情况下,不应将其理解为一定是限制性的。
Claims (22)
1.一种配置中继寄存器模块的方法,其特征在于,所述方法包括:
接收任务调度器发送的至少一个任务的启动分配请求;
基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量;
针对每个任务,分配对应数量的中继寄存器;
在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务,
其中,所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。
2.根据权利要求1所述的方法,其特征在于,所述启动分配请求包括任务的工作模式和待分配给任务中每个工作项实例的中继寄存器的数量,其中,所述基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量,包括:
根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。
3.根据权利要求2所述的方法,其特征在于,所述待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。
4.根据权利要求2或3所述的方法,其特征在于,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,
相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。
5.根据权利要求1所述的方法,其特征在于,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。
6.根据权利要求1所述的方法,其特征在于,所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,所述方法还包括:
在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。
7.根据权利要求1所述的方法,其特征在于,所述针对每个任务,分配对应数量的中继寄存器,包括:
基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;
将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。
8.根据权利要求7所述的方法,其特征在于,所述可用行包括索引值,所述任务包括编号,所述方法还包括:
获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,
其中,所述物理地址用于对所述中继寄存器模块进行访问。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。
11.一种配置中继寄存器模块的装置,其特征在于,所述装置包括:
- 中继寄存器控制器,其用于接收任务调度器发送的至少一个任务的启动分配请求;并且基于所述启动分配请求,确定待分配给所述至少一个任务中每个任务的中继寄存器的数量;
- 分配单元,其针对每个任务,分配对应数量的中继寄存器;
- 通知单元,其在分配完成的情况下,发送唤醒信号至所述任务调度器,所述唤醒信号用于所述任务调度器启动已分配中继寄存器的任务;
- 其中,所述中继寄存器模块用于存储基于任务的指令运算得到的中间结果。
12.根据权利要求11所述的装置,其特征在于,所述启动分配请求包括任务的工作模式和待分配给任务中每个工作项实例的中继寄存器的数量,其中所述中继寄存器控制器被配置用于根据任务的工作模式对应的粒度以及待分配给任务中每个工作项实例的中继寄存器的数量,确定待分配给每个任务的中继寄存器的数量,其中所述粒度表征相应任务包括的工作项实例的最大数量。
13.根据权利要求12所述的装置,其特征在于,所述待分配给任务中每个工作项实例的中继寄存器的数量是基于同时启动的任务的限定数量确定的。
14.根据权利要求12或13所述的装置,其特征在于,不同工作模式的任务中每个工作项实例待分配有不同数量的中继寄存器,相同工作模式的任务中每个工作项实例待分配有相同或不同数量的中继寄存器。
15.根据权利要求11所述的装置,其特征在于,待分配给每个任务的中继寄存器的数量小于或等于参考数值,其中,所述参考数值是基于中继寄存器的总数量、所述任务的工作模式以及配置的最大中继寄存器使用量确定的。
16.根据权利要求11所述的装置,其特征在于,所述任务包括至少一个工作项实例,每个工作项实例分配至少一个中继寄存器,其中所述分配单元被配置用于在中继寄存器中第一指令的计算结果已使用完毕的情况下,在所述中继寄存器中存储第二指令的计算结果,其中,所述第一指令和所述第二指令为同一工作项实例的指令,第二指令为所述第一指令的后续指令。
17.根据权利要求11所述的装置,其特征在于,所述分配单元被配置成,基于待分配给所述任务的中继寄存器的数量,确定所述中继寄存器模块中用于分配给所述任务的可用行,所述可用行为可供分配的中继寄存器行;
将所述可用行的中继寄存器分配给所述任务,并将所述可用行标记为已分配的中继寄存器行。
18.根据权利要求17所述的装置,其特征在于,所述可用行包括索引值,所述任务包括编号,其中所述分配单元还被配置成,获取所述任务的编号和分配给相应任务的可用行的索引值并将所述编号和所述索引值记录在行地址表中,其中,所述编号用于管理所述行地址表。
19.根据权利要求18所述的装置,其特征在于,所述分配单元还被配置成,响应于接收对所述中继寄存器模块的访问请求,根据所述访问请求包括的任务的编号和所述行地址表,生成所述访问请求对应的中继寄存器的物理地址,其中,所述物理地址用于对所述中继寄存器模块进行访问。
20.根据权利要求11所述的装置,其特征在于,所述分配单元还被配置成,响应于接收到任务结束信号,回收分配给所述任务结束信号对应任务的中继寄存器。
21.一种电子设备,其特征在于,包括:处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为调用所述存储器存储的指令,以执行权利要求1至10中任意一项所述的方法。
22.一种其上存储有指令的计算机可读介质,所述指令当被执行时使得计算设备执行根据权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310607003.0A CN116400982B (zh) | 2023-05-26 | 2023-05-26 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310607003.0A CN116400982B (zh) | 2023-05-26 | 2023-05-26 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116400982A CN116400982A (zh) | 2023-07-07 |
CN116400982B true CN116400982B (zh) | 2023-08-08 |
Family
ID=87020140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310607003.0A Active CN116400982B (zh) | 2023-05-26 | 2023-05-26 | 配置中继寄存器模块的方法和装置、计算设备和可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116400982B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971437A (zh) * | 2024-03-26 | 2024-05-03 | 摩尔线程智能科技(北京)有限责任公司 | 任务分配方法、电路、设备、介质及程序 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1308274A (zh) * | 2000-02-08 | 2001-08-15 | 斯罗扬有限公司 | 在处理器中传送指令结果及处理器的编译方法 |
CN102968379A (zh) * | 2012-10-24 | 2013-03-13 | 无锡江南计算技术研究所 | 一种寄存器分配方法、系统及处理器 |
CN105373492A (zh) * | 2014-08-19 | 2016-03-02 | 西安慧泽知识产权运营管理有限公司 | 一种面向任务流的基于寄存器文件的快速数据交换结构 |
CN113298245A (zh) * | 2021-06-07 | 2021-08-24 | 中国科学院计算技术研究所 | 一种基于数据流架构的多精度神经网络计算装置以及方法 |
CN114730261A (zh) * | 2019-09-11 | 2022-07-08 | 红松信号公司 | 具有线程粒度的多线程处理器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10558460B2 (en) * | 2016-12-14 | 2020-02-11 | Qualcomm Incorporated | General purpose register allocation in streaming processor |
GB2605665B (en) * | 2021-09-30 | 2023-11-01 | Imagination Tech Ltd | Graphics processor |
-
2023
- 2023-05-26 CN CN202310607003.0A patent/CN116400982B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1308274A (zh) * | 2000-02-08 | 2001-08-15 | 斯罗扬有限公司 | 在处理器中传送指令结果及处理器的编译方法 |
CN102968379A (zh) * | 2012-10-24 | 2013-03-13 | 无锡江南计算技术研究所 | 一种寄存器分配方法、系统及处理器 |
CN105373492A (zh) * | 2014-08-19 | 2016-03-02 | 西安慧泽知识产权运营管理有限公司 | 一种面向任务流的基于寄存器文件的快速数据交换结构 |
CN114730261A (zh) * | 2019-09-11 | 2022-07-08 | 红松信号公司 | 具有线程粒度的多线程处理器 |
CN113298245A (zh) * | 2021-06-07 | 2021-08-24 | 中国科学院计算技术研究所 | 一种基于数据流架构的多精度神经网络计算装置以及方法 |
Non-Patent Citations (1)
Title |
---|
一种基于分区域优先级的寄存器分配算法;岳峰 等;《电子与信息学报》;第35卷(第12期);第3005-3010页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116400982A (zh) | 2023-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107690622B (zh) | 实现硬件加速处理的方法、设备和系统 | |
US10191759B2 (en) | Apparatus and method for scheduling graphics processing unit workloads from virtual machines | |
US8478926B1 (en) | Co-processing acceleration method, apparatus, and system | |
US8996844B1 (en) | Apparatus and method for accessing non-overlapping portions of memory according to respective orders of dimensions | |
KR102594657B1 (ko) | 비순차적 리소스 할당을 구현하는 방법 및 장치 | |
CN105117285B (zh) | 一种基于移动虚拟化系统的非易失性存储器调度优化方法 | |
CN102667714B (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
CN116400982B (zh) | 配置中继寄存器模块的方法和装置、计算设备和可读介质 | |
EP2375324A2 (en) | Virtualization apparatus for providing a transactional input/output interface | |
US9471387B2 (en) | Scheduling in job execution | |
CN111078394B (zh) | 一种gpu线程负载均衡方法与装置 | |
US20140237017A1 (en) | Extending distributed computing systems to legacy programs | |
KR20190138365A (ko) | 멀티 프로세서 시스템 및 그 구동 방법 | |
CN116483536B (zh) | 数据调度方法、计算芯片及电子设备 | |
US10235208B2 (en) | Technique for saving and restoring thread group operating state | |
WO2024108800A1 (zh) | 数据处理方法和装置、电子设备和计算机可读存储介质 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN109032965B (zh) | 一种数据读取方法、主机及存储设备 | |
US20130247065A1 (en) | Apparatus and method for executing multi-operating systems | |
CN115878517A (zh) | 存储器装置、存储器装置的操作方法和电子装置 | |
CN115878311A (zh) | 一种计算节点集群、数据聚合方法和相关设备 | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
CN116069451B (zh) | 一种虚拟化方法、装置、设备、介质、加速器及系统 | |
WO2024012153A1 (zh) | 一种数据处理方法及装置 | |
CN117908772B (zh) | 多mb的数据处理方法、装置、设备及介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |