一种异构结构系统包处理的方法转让专利

申请号 : CN202210852711.6

文献号 : CN114995882B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曾臻

申请人 : 沐曦集成电路(上海)有限公司

摘要 :

本发明涉及包处理方法技术领域,具体涉及一种异构结构系统包处理的方法,该方法包括:在读取命令包返回之后,将返回的命令包加入到重排序缓存单元的命令队列中,重排序缓存单元对命令包进行解析,在命令包为派发包时,将派发包中携带的进程对象的虚拟地址发送给预取调度模块;预取调度模块获取进程对象;重排序缓存单元将获取的进程对象加入重排序缓存单元的进程对象队列中,通知微处理器命令包已经准备就绪;微处理器解析命令包,在命令包为派发包时解析相应的进程对象,进而完成相应任务的派发和执行,解决了目前微处理器在解析到派发包时还需要等待翻译进程对象的物理地址以及读取进程对象的漫长时间的问题,提高了微处理器的运行效率。

权利要求 :

1.一种异构结构系统包处理的方法,应用于异步设备的命令控制单元,所述命令控制单元包括微处理器和硬件处理模块,所述硬件处理模块包括预取调度模块、地址转换单元、重排序缓存单元和工作组派发单元,其特征在于,该方法包括以下步骤:在读取命令包返回之后,将返回的命令包加入到重排序缓存单元的命令队列中,重排序缓存单元对命令包进行解析,在命令包为派发包时,则将派发包中所携带的进程对象的虚拟地址发送给预取调度模块,其中,进程对象包括进程执行时所必须的起始地址、开始执行的偏移地址和硬件资源配置参数;预取调度模块将进程对象的虚拟地址发送给地址转换单元获取进程对象的物理地址,并向设备的多级缓存单元发起获取进程对象读取命令;重排序缓存单元将多级缓存返回的进程对象加入重排序缓存单元的进程对象队列中,通知微处理器命令包已经准备就绪;

所述微处理器解析命令包,在命令包为派发包时从进程对象队列中取出相应的进程对象,其中每个进程包括若干个工作组;微处理器给工作组派发单元配置寄存器,工作组派发单元将进程分为多个工作组后下发给空闲的计算执行单元,由计算执行单元根据寄存器读取相应的进程指令和数据后执行进程指令。

2.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述微处理器按照自然顺序读取所述命令队列中的命令包,在命令包为派发包时按照自然顺序读取进程对象队列中的进程对象。

3.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述进程对象队列中的进程对象的排列顺序与命令队列中派发包的排列顺序相同。

4.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述进程对象队列和所述命令队列遵循先入先出原则。

5.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述获取进程对象的物理地址的步骤包括:根据进程对象的虚拟地址在虚拟地址转换一级缓存中进行寻址,如果匹配成功,则返回物理地址;如果匹配失败,则向虚拟地址转换二级缓存查询;如果虚拟地址转换二级缓存也匹配失败,则向CPU侧的地址管理单元中进行寻址,得到进程对象的物理地址。

6.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述获取进程对象的步骤包括:根据进程对象的物理地址通过多级缓存访问设备内存或者系统主内存读取进程对象并返回给重排序缓存单元。

7.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述读取命令包的步骤包括:

预取调度模块生成命令包的虚拟地址,地址转换单元将命令包的虚拟地址转换为命令包的物理地址,并根据命令包的物理地址读取相应的命令包。

8.根据权利要求7所述的一种异构结构系统包处理的方法,其特征在于,所述根据命令包的物理地址读取相应的命令包的步骤包括:根据命令包的物理地址通过多级缓存访问CPU侧的系统主内存读取命令包并返回给重排序缓存单元。

9.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述工作组派发单元将进程分为多个工作组的步骤包括:获取派发包中包含的工作组的标准任务量以及当前派发包的任务量的信息,根据工作组的标准任务量对当前派发包的任务量做相应的分组。

10.根据权利要求1所述的一种异构结构系统包处理的方法,其特征在于,所述派发包中包括进程对象的虚拟地址、工作组的标准任务量以及当前派发包的任务量信息。

说明书 :

一种异构结构系统包处理的方法

技术领域

[0001] 本发明涉及包处理技术领域,具体涉及一种异构结构系统包处理的方法。

背景技术

[0002] 在HSA异构系统协议定义了AQL(Architected Queuing Language结构化包),AQL包被CPU放在环状命令包队列(RING BUFFER)中,该环状命令包队列在系统主内存或者设备内存中实际存储命令包队列,AQL包有多种包格式的包,其中派发包(kernel dispatch)是CPU通知设备执行进程任务的命令包,每个派发包都有进程对象的虚拟地址,而实际的进程对象存储在系统主内存或者设备内存中,进程对象中包括进程命令执行的起始地址、开始执行的偏移地址、硬件资源配置等进程执行时所必须的配置参数。
[0003] 在HSA异构系统中,中央处理器CPU负责控制,包括任务分派和复杂的控制处理;若干个异步设备根据CPU命令执行计算;命令控制单元负责CPU命令的接收和切分,向执行单元下发命令;具体的,命令控制单元中硬件处理模块在获取命令包之后通知微处理器,微处理器在解析到命令包为派发包时,根据派发包携带的进程对象的虚拟地址获取进程对象,获取到进程对象之后给工作组派发单元配置寄存器,工作组派发单元将进程分为多个工作组后下发给空闲的计算执行单元,计算执行单元根据寄存器读取相应的进程指令和数据后执行进程指令。
[0004] 对于传统的包处理方法,命令控制单元中的微处理器需要先获取并解析命令包,若是派发包,则需要读取进程对象,而在读取进程对象时需要进行虚拟地址翻译和获取进程对象,其中虚拟地址翻译需要经过多级虚拟地址转换单元的缓存、获取进程对象需要通过多级缓存读取设备内存甚至CPU侧系统主内存,耗时非常长,特别是如果虚拟地址转物理地址过程中出现多次缓存匹配不上需要向CPU侧的物理地址管理单元寻址时所需要的时间就更长,因此地址翻译的过程占用了微处理器的一定时间;而且在得到进程对象的物理地址之后,需要从设备内存或者系统主内存中获取进程对象,也会耗费大量的时间;由于微处理器需要等待当前的包处理完毕之后才能处理下一个包,从获取命令包开始微处理器被进程对象的物理地址翻译和读取进程对象的过程大量占用,在得到进程对象之前微处理器只能等待,导致微处理器有大量的空闲等待的时间,进而导致微处理器的处理效率低。

发明内容

[0005] 为了解决上述技术问题,本发明的目的在于提供一种异构结构系统包处理的方法,所采用的技术方案具体如下:
[0006] 一种异构结构系统包处理的方法,应用于异步设备的命令控制单元,所述命令控制单元包括微处理器和硬件处理模块,所述硬件处理模块包括预取调度模块、地址转换单元、重排序缓存单元和工作组派发单元,该方法包括以下步骤:在读取命令包返回之后,将返回的命令包加入到重排序缓存单元的命令队列中,重排序缓存单元对命令包进行解析,在命令包为派发包时,则将派发包中所携带的进程对象的虚拟地址发送给预取调度模块;预取调度模块将进程对象的虚拟地址发送给地址转换单元获取进程对象的物理地址,并向设备的多级缓存单元发起进程对象读取命令;重排序缓存单元将多级缓存返回的进程对象加入重排序缓存单元的进程对象队列中,通知微处理器命令包已经准备就绪;所述微处理器解析命令包,在命令包为派发包时解析相应的进程对象,其中每个进程包括若干个工作组;微处理器给工作组派发单元配置寄存器,工作组派发单元将进程分为多个工作组后下发给空闲的计算执行单元,计算执行单元根据寄存器读取相应的进程指令和数据后执行进程指令。
[0007] 本发明实施例具有如下有益效果:
[0008] 本发明实施例通过在微处理器解析包之前,提前预取命令包以及派发包对应的进程对象,并将命令包加入命令队列,将进程对象加入相应的进程对象队列中,在微处理器解析到派发包的同时能够获取到相应的进程对象,进而完成相应任务的派发和执行,进而解决了现有技术中微处理器在解析到派发包时还需要等待翻译进程对象的物理地址以及根据该物理地址读取进程对象的漫长时间的问题,提高了微处理器的运行效率。

附图说明

[0009] 为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
[0010] 图1为异构结构系统的结构框图;
[0011] 图2为本发明实施例提供的一种基于异构结构系统的包处理方法的步骤流程图;
[0012] 图3为本发明实施例提供的一种基于异构结构系统的包处理方法的方法流程图;
[0013] 图4为传统的包处理过程的示意图;
[0014] 图5为本发明实施例所提供的包处理过程的示意图;
[0015] 图6为本发明实施例中包和进程对象的读取流程示意图。

具体实施方式

[0016] 为了更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种基于异构结构系统的包处理方法,其具体实施方式、结构、特征及其功效,详细说明如下。在下述说明中,不同的“一个实施例”或“另一个实施例”指的不一定是同一实施例。此外,一个或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
[0017] 除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。
[0018] 下面结合附图具体的说明本发明所提供的一种基于异构结构系统的包处理方法的具体方案。
[0019] 请参阅图1,其示出了本发明实施例应用的异构结构系统的结构,异构结构系统包括两大部分:中央处理器和若干个异步设备。其中,中央处理器(CPU)负责控制,用于任务的分派和复杂的控制处理;异步设备根据CPU的命令执行计算。
[0020] 其中,中央处理器包括CPU系统主内存和地址管理单元。CPU发起的程序可能会被拆解为上万个命令队列,若干个命令队列存储于CPU主内存或者设备内存中,其中每个命令队列是由若干个包组成的包队列,这些命令队列被映射到若干个异步设备的命令控制单元中的某个队列组的某个命令队列上。地址管理单元负责最终的物理地址的管理和解释。
[0021] 其中,每个异步设备包括命令控制单元、若干个并行计算执行单元、虚拟地址转换二级缓存、多级缓存、PCIE接口、片内高宽带内存和资源分配模块(图中未示出)。命令控制单元负责命令的接收和切分,向并行计算执行单元下发命令;并行计算执行单元用于执行相应的任务;虚拟地址二级缓存用作虚拟地址一级缓存和CPU侧的地址管理单元之间的数据临时交换的缓存;多级缓存为数据读取通道的缓存;片内高宽内存为当前异步设备侧的内存,也称为设备内存;PCIE接口是一种高速串行计算机扩展总线标准,中央处理器和异步设备之间通过PCIE接口通信。
[0022] 其中,命令控制单元包括若干个微处理器和硬件处理模块,微处理器是软件编程实现的功能模块,硬件处理模块是由硬件电路构成。硬件处理模块包括预取调度模块、虚拟地址转换一级缓存、读取模块、若干个工作组派发单元和存储命令队列组的重排序缓存单元。由于一个微处理器可以同时服务于若干个进程,而每个进程又会被拆解为若干个命令队列,因此需要预取调度模块对相应的命令包进行调度,同时为了解决微处理器被长时间占用的问题在本发明实施例中进程对象也需要提前预取,因此预取调度模块还包括对进程对象的预取和调度。虚拟地址转换一级缓存、虚拟地址转换二级缓存和地址管理单元构成地址转换系统,用于将虚拟地址转换为物理地址。读取模块主要用于根据得到的物理地址通过多级缓存读出包或者进程对象。重排序缓存单元主要用于临时存储命令队列和进程对象队列。工作组派发单元主要用于配置相应的寄存器并将派发任务分组。
[0023] 具体的,请参阅图2,CPU将命令包队列写入系统主内存或者设备内存,在CPU通知预取调度模块相应的包队列信息之后,预取调度模块产生包读取虚拟地址,地址转换系统将包虚拟地址转换为物理地址之后,读取模块向多级缓存单元发起包读取命令,多级缓存从CPU侧的系统主内存读取包并返回给重排序缓存单元,将读取的命令包加入相应的命令队列;在读取的命令包返回之后,重排序缓存单元判断出返回的命令包为派发包时,则解析派发包获取进程对象的虚拟地址,并将进程对象的虚拟地址发送给预取调度模块,地址转换系统对进程对象的虚拟地址进行地址转换得到进程对象的物理地址;读取模块向多级缓存发起进程对象的读取命令,多级缓存从系统主内存或者设备内存中读取进程对象并返回给重排序缓存单元;重排序缓存单元将进程对象加入到进程对象队列中,并通知微处理器包就绪;微处理器解析命令包,在命令包中所携带的标识为派发包时,解析派发包中的进程对象;由于派发包及其进程对象在微处理器解析之前已经读取到了,因此在微处理器获取到派发包及其相应的进程对象之后为工作组派发单元配置派发寄存器,工作组派发单元将进程分为多个工作组,并将工作组下发给空闲的计算执行单元,计算执行单元根据派发寄存器从系统主内存和设备内存读取进程指令和数据,并执行相应的指令。其中资源分配模块用于选择空闲的计算执行单元下发工作组。
[0024] 请参阅图3,其示出了本发明一个实施例提供的一种基于异构结构系统的包处理方法流程图,该包处理方法应用于异步设备的命令控制单元,所述命令控制单元包括微处理器和硬件处理模块,该方法包括以下步骤:
[0025] 步骤S001,在读取命令包返回之后,将返回的命令包加入到重排序缓存单元的命令队列中,重排序缓存单元对命令包进行解析,在命令包为派发包时,则将派发包中所携带的进程对象的虚拟地址发送给预取模块;预取模块将进程对象的虚拟地址发送给地址转换单元获取进程对象的物理地址将并获取进程对象;重排序缓存单元将获取的进程对象加入重排序缓存单元的进程对象队列中,通知微处理器命令包已经准备就绪。
[0026] 其中,HSA异构系统中的AQL包有多种形式,例如派发包、自定义包、同步包等,而CPU所下发的任务主要由派发包完成,在命令队列的命令包中派发包占比最大,在各种命令包中只有派发包中包括进程对象的虚拟地址,而实际的进程对象存储在设备内存或者系统主内存中。
[0027] 在传统的包处理方法中,微处理器需要等待读取进程对象的请求返回,而进程对象的读取需要经过虚拟地址到物理地址的转换以及通过多级缓存从设备内存中读取的漫长时间,为了解决该问题,本发明实施例所提供的方案是提前预取进程对象,并将预取到的进程对象加入到重排序缓存单元的进程对象队列中,使微处理器能够同时获取到派发包及其对应的进程对象,而不需要微处理器再读取进程对象,消除了微处理器等待进程对象返回的时间。具体的,本发明实施例将派发包的解析和进程对象的获取交由硬件处理模块处理,这样在微处理器对上一个命令包做派发处理的过程中,硬件处理模块就可以提前对下一个派发包的包做解析和进程对象的获取;当微处理器处理好上一个命令派发包的派发后,就可以直接对硬件处理模块解析好并获取好进程对象的下一个派发包做新的派发;由于进程对象和包都是通过硬件处理模块预取完成,微处理器不需要再等待进程对象,可以对派发包进行直接处理,能够大大提升计算执行单元完成小任务派发包的执行效率,能够充分发挥硬件处理模块对包解析和处理的高效性,将派发包交由硬件处理模块加速处理,大大缩短包解析和包处理所需要的处理时间。
[0028] 其中,请参阅图6,读取命令包的过程与读取进程对象的过程几乎相同,都需要先将包或者进程对象的虚拟地址转换为物理地址,然后根据物理地址读取相应的包或者进程对象。对于将虚拟地址转换为物理地址的过程包括以下具体步骤:根据生成的虚拟地址在虚拟地址转换一级缓存中进行寻址,如果匹配成功,则返回物理地址;如果匹配失败,则需要向虚拟地址转换二级缓存查询,如果虚拟地址转换二级缓存也匹配失败,则向CPU侧的地址管理单元中进行寻址,才能得到最终的物理地址。对于读取包或者进程对象的过程包括:在获取相应的物理地址之后,根据物理地址通过多级缓存访问设备内存读取进程对象并返回、或者通过多级缓存访问系统主内存读取包并返回。
[0029] 其中,在重排序缓存单元中包括若干个命令队列和进程对象队列,每个命令队列包括若干个命令包,每个进程对象队列包括若干个进程对象。每个队列遵循先入先出的原则,微处理器按照自然顺序读取所述命令队列中的命令包,在命令包为派发包时按照自然顺序读取进程对象队列中的进程对象,其中所述命令队列和所述进程对象队列遵循先入先出的原则。例如,按照命令包的虚拟地址产生的顺序加入命令队列,具体的,虚拟地址产生的顺序为:包1的虚拟地址、包2的虚拟地址、包3的虚拟地址、……、包n的虚拟地址;则命令队列为:包1、包2、包3、……、包n;相应的,如果包1、包3……包m为派发包,其中m小于n,则进程对象队列为:包1、包3、……、包m,进程对象队列中的进程对象的排列顺序与命令队列中派发包的排列顺序相同。即使在包和进程对象返回的时候是乱序返回的,但是重排序缓存单元会将乱序返回的包和进程对象按照自然顺序加入相应的队列。
[0030] 在将派发包及其相应的进程对象分别放入相应的队列中之后,再通知微处理器包已经准备就绪,能够减少微处理器的占用时间。
[0031] 步骤S002,所述微处理器解析命令包,在命令包为派发包时解析相应的进程对象,其中每个进程包括若干个工作组;微处理器给工作组派发单元配置寄存器,工作组派发单元将进程分为多个工作组后下发给空闲的计算执行单元,计算执行单元根据寄存器读取相应的进程指令和数据后执行进程指令。
[0032] 具体的,由于CPU下发的命令包中包括多种类型的格式,命令包中的包头定义中携带有命令包的格式定义,在解析出命令包为派发包时,则需要获取进程对象队列中的进程对象,否则不需要取出进程对象。因此微处理器每读取一个命令包都会判断下该命令包是否为派发包,若为派发包则会从进程对象队列中取出相应的进程对象,其中进程对象队列和命令队列都是按顺序放入和取出的。此时微处理器在获取到相应的派发包的同时也能够同时获取其进程对象,进而达到进程对象的地址翻译和读取的过程不再占用微处理器的目的,解决了微处理器被占用导致的空闲等待的问题。并且由于微处理器是软件编程实现的,虽然自身运行速度比较快,但是对外部硬件读写交互处理的延时较大;而硬件处理模块为硬件,硬件处理的速度远远高于软件,因此将包和派发包的进程对象的预取任务交给硬件提前完成,微处理器软件不需要再等待进程对象,可以对派发包进行直接处理,能够大大提升计算执行单元可以很快完成的小任务派发包的执行效率。
[0033] 其中,每个派发包对应一个进程对象,每个进程包括若干个工作组,每个工作组包括若干个wave,每个wave包括多个线程,而线程是任务执行的最小单元,因此每个工作组包括多个任务。派发包中除了包括进程对象的虚拟地址之外,还包括工作组的标准任务量、当前派发包的任务量等信息。进程对象中包括进程命令执行的起始地址、开始执行的偏移地址、硬件资源配置等进程执行时所必须的配置参数。
[0034] 其中,将进程分为多个工作组的步骤具体包括:获取派发包中包含的工作组的标准任务量以及当前派发包的任务量的信息,根据工作组的标准任务量对当前派发包的任务量做相应的分组,例如工作组的标准任务量为A,当前任务量为B,则将任务量分为B/A组。
[0035] 请参阅图4和图5,为了更进一步的说明本发明的有益效果,将现有技术与本方案进行对比,其中图4示出了传统的处理过程,现有技术与本方案的区别在于:在微处理器解析包之前预取包,但是需要微处理器在命令包为派发包时根据派发包所携带的进程对象的虚拟地址获取相应的进程对象;在图4中,第一行表示包预取调度模块的处理过程、第二行表示重排序缓存单元的处理过程、第三行为微处理器的处理过程。具体的,对于包预取调度模块的处理过程包括:产生包1的虚拟地址、包1虚拟地址转换、包1读取;产生包2虚拟地址、包2虚拟地址转换、包2读取;以此类推,直至包n虚拟地址转换和包n的读取,顺序执行。对于重排序缓存单元的处理过程:地址翻译的延时可能会导致包2虚拟地址返回物理地址的时间早于包1虚拟地址返回物理地址的时间,例如在虚拟地址一级缓存单元中存在包2的页表项(Entry),但是不存在包1的页表项,此时包2的物理地址会很快返回,但是包1需要花费大量时间访问多级页表,因此返回的时间会晚于包2,因此虚拟地址转换返回的时间是乱序的;读取包的延时可能也会导致包2返回的时间早于包1返回的时间,因为包可能是在设备内存也可能在系统主内存中,如果包2在设备内存,包1在系统主内存,则包2会很快返回,包1则需要再访问CPU侧的系统主内存,包1返回的时间会晚于包2,因此包返回的顺序也是乱序的,但是重排序缓存单元会将返回的包进行重新排序,然后按照自然顺序加入相应的命令队列中。对于微处理器的处理过程:微处理器在读取命令包时,也是按照自然顺序读取并顺序执行的,只有在读取到相应的派发包时,在利用派发包中进程对象的虚拟地址进行地址翻译和读取;假设包1任务2为进程对象的读取,包1的进程对象返回给重排序缓存单元,在微处理器获取到包1的进程对象之后才能做下一步的工作。图5示出了本发明实施例所提供的改进之后的包处理过程,在图5中,第一行表示预取调度模块的处理过程、第二行表示重排序缓存单元的处理过程、第三行为微处理器的处理过程、第四行为执行单元的处理过程;对于预取模块的处理过程:与图4中不同的是,在改进后的方法中还需要提前读取派发包中的进程对象,也即在包1和包2返回重排序缓存单元之后,重排序缓存单元需要解析包1和包2,判断是否为派发包,如果是派发包则需要预取调度模块根据派发包所携带的进程对象的虚拟地址再次发起进程对象读取的请求。对于重排序缓存单元的处理过程:由于读取包和读取进程对象都需要一定的会时间,因此返回的给重排序缓存单元的返回结果顺序是混乱的,但是重排序缓存单元会将乱序返回的包和进程对象按照自然顺序放入相应的队列,以供微处理器读取。对于微处理器的处理过程:由于包和进程对象都已经准备好了,因此在解析到派发包的同时能够获取到相应的进程对象,不需要等待,即可将派发包所对应的任务分配给相应的并行计算执行单元进行执行。
[0036] 综上所述,本发明实施例提供了一种基于异构结构系统的包处理方法,该方法通过在微处理器解析包之前,提前预取命令包以及派发包对应的进程对象,并将命令包加入命令队列,将进程对象加入相应的进程对象队列中,在微处理器解析到派发包的同时能够获取到相应的进程对象,进而做相应任务的派发,进而解决了现有技术中微处理器在解析到派发包时还需要等待翻译进程对象的物理地址以及根据该物理地址读取进程对象的漫长时间的问题,提高了微处理器的运行效率。
[0037] 需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0038] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
[0039] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。