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

GPU指令数据管理的方法、装置、设备及存储介质与流程

2022-06-02 18:04:06 来源:中国专利 TAG:

gpu指令数据管理的方法、装置、设备及存储介质
技术领域
1.本公开涉及计算技术领域,具体地涉及用于gpu指令数据管理的方法、装置、设备及存储介质。


背景技术:

2.随着计算需求越来越高,gpu已成为算力基础设施重要的组成部分。gpu芯片可以根据用户的指令做各种操作,例如写数据、数据复制、数据填充等等。因此,指令的存储、读写、执行效率,对芯片性能有着重要的影响,现有的gpu指令管理系统一般是将指令存储、指令读写和指令执行严格分开。先在host侧做指令存储,将一个完整的指令存储完成后,再通知local进行指令读写。一方面,各个单元串行操作,每次指令都是先存储完成、才能做指令读取,最后做指令执行。同时每一步之间存在延时,会导致指令执行时间长,效率低;另一方面,host需要做的操作比较复杂,除了正常的写入指令,还需要去判断指令是否被读走、是否被执行完成,以上这些判断,增加host的操作复杂度。


技术实现要素:

3.本公开的目的在于,针对现有技术中存在的问题,提供一种gpu指令数据管理的方法、装置、设备及存储介质,提高指令执行效率。
4.根据本公开的一个方面,提出一种gpu指令数据管理方法,响应于host buffer写入指令数据,根据写入的指令数据长度更新host侧hwptr,并将更新后的hwptr写入local侧,其中所述host buffer用于缓存写入host侧的指令数据,所述hwptr表示当前指令数据写入所述host buffer的位置的指针,响应于local侧中的hwptr和hrptr不相等,从所述host侧读指令数据写入到local buffer,根据读取的指令数据长度更新local侧hrptr,并将更新后的hrptr写入host侧,其中所述local buffer用于缓存写入local侧的指令数据,所述hrptr表示被读取的指令数据在host buffer中的位置的指针,响应于host侧中的hwptr和hrptr不相等,根据host buffer的空余缓存深度写入新的指令,其中所述空余缓存深度为hwptr和hrptr的差值。
5.在一些实施例中,所述host buffer为环形buffer。
6.在一些实施例中,当所述hwptr和hrptr的差值小于一定阈值时,表示host buffer已满,停止写入操作。
7.在一些实施例中,其中所述local buffer由两个大小相同的lbuffer组成,用于并行从host侧读指令数据和将读取的指令数据发送至指令数据执行侧。
8.在一些实施例中,响应于所述local buffer写入指令数据,根据写入的指令数据长度更新local侧lwptr,
响应于local buffer非空,读取local buffer中指令数据到所述指令数据执行侧,根据所述读取local buffer中指令数据的长度更新lrptr,其中lwptr表示写入所述local buffer的位置的指针,其中lrptr表示所述读取local buffer中指令数据的位置的指针,响应于收到指令数据执行完成标识,从local buffer读取新的指令数据到所述指令数据执行侧。
9.在一些实施例中,所述两个大小相同的lbuffer做乒乓操作。
10.在一些实施例中,所述指令数据执行侧收到指令数据后,解析出指令的类型、长度、原始数据、读写地址信息,根据指令信执行数据搬运、数据加减、数据填充操作,判断指令执行状态,执行完毕后,返回完成标识。
11.根据本公开的另一个方面,提出一种gpu指令数据管理的装置,包括,第一更新单元,用于响应于host buffer写入指令数据,根据写入的指令数据长度更新host侧hwptr,并将更新后的hwptr写入local侧,其中所述host buffer用于缓存写入host侧的指令数据,所述hwptr表示当前指令数据写入所述host buffer的位置的指针,第一读取单元,用于响应于local侧中的hwptr和hrptr不相等,从所述host侧读指令数据写入到local buffer,根据读取的指令数据长度更新local侧hrptr,并将更新后的hrptr写入host侧,其中所述local buffer用于缓存写入local侧的指令数据,所述hrptr表示被读取的指令数据在host buffer中的位置的指针,第一写入单元,用于响应于host侧中的hwptr和hrptr不相等,根据host buffer的空余缓存深度写入新的指令,其中所述空余缓存深度为hwptr和hrptr的差值。
12.在一些实施例中,该装置还包括,第二更新单元,用于响应于所述local buffer写入指令数据,根据写入的指令数据长度更新local侧lwptr,第三更新单元,用于响应于local buffer非空,读取local buffer中指令数据到所述指令数据执行侧,根据所述读取local buffer中指令数据的长度更新lrptr,其中lwptr表示写入所述local buffer的位置的指针,其中lrptr表示所述读取local buffer中指令数据的位置的指针,第二读取单元,用于响应于收到指令数据执行完成标识,从local buffer读取新的指令数据到所述指令数据执行侧。
13.根据本公开的另一个方面,提出一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述方法的步骤。
14.根据本公开的再一个方面,提出一种用以存储处理器可执行指令数据的计算机可读存储介质,所述计算机可读存储介质中存储的处理器可执行指令数据在被执行时能够致使处理器实施如上所述gpu指令数据管理方法。
15.本公开提供了一种gpu指令数据管理的方法、装置、设备及存储介质,能够提高gpu指令的执行效率。具体地,将指令存储、指令读写和指令执行做并行化处理。在host侧写入指令的同时,芯片就可以启动指令的读取,并存储到本地,然后并行做指令的执行,提高了
指令执行效率。同时,当执行完部分指令后,local会主动发起指针回写,通知host当前指令执行的情况和位置。从而方便host侧判断,继续向host buffer写入或停止写入新的指令,简化了host侧的操作复杂度,进一步提高了指令执行效率。
附图说明
16.下面结合附图,通过对本公开的具体实施方式详细描述,将使本公开的技术方案及其它有益效果显而易见。
17.图1为本公开实施例提供的gpu指令数据管理方法流程示意图。
18.图2为本公开实施例提供的gpu指令管理的系统结构示意图。
19.图3为本公开实施例提供的环形buffer结构示意图。
20.图4为本公开实施例提供的在local侧指令管理流程示意图。
21.图5为本公开实施例提供的在执行侧指令执行流程示意图。
22.图6为本公开实施例提供的gpu指令数据管理装置示意图。
23.图7为本公开实施例提供的电子设备结构示意图。
具体实施方式
24.下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。本公开的说明书和权利要求书以及附图中的术语“第一”、“第二”、“第三”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应当理解,这样描述的对象在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排它的包含。在本公开的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
25.实施例一:具体地,请参阅图1,为本公开提供的一种gpu指令数据管理方法。具体步骤如下:s1响应于host buffer写入指令数据,根据写入的指令数据长度更新host侧hwptr,并将更新后的hwptr写入local侧。
26.其中所述host buffer用于缓存写入host侧的指令数据,所述hwptr表示当前指令数据写入所述host buffer的位置的指针。
27.在一个或多个实施例中,如图2所示gpu指令管理的系统结构,首先,用户把指令写入host buffer中。指令的长度l可以为定长或者变长,不受限制。最新的指令会被写到host buffer下一个地址。在一个实施例中,如图3所示,host buffer可以是一个环形的buffer,深度大小为m byte,地址范围为0~m-1 byte。当指令写到buffer最后一个地址m-1后,会重新从0开始。其次,host buffer里存有写指针write pointer(简称hwptr)和读指针read pointer(简称hrptr)。hwptr用于指示当前指令写入的地址,范围为0~m-1 byte。hwptr由host来维护。host根据用户每次写入的指令长度更新buffer的hwptr。hrptr用于指示已经被读走指令的地址,范围为0~m-1 byte。hrptr由local来维护。local根据每次读走的指令长度更新buffer的hrptr。
28.初始化时,在host侧的hwptr和hrptr均为0,表明host buffer中指令已经读空,可以写入;host会主动将更新后的hwptr写到local侧,通知local buffer新的指令写入的位
置。
29.s2响应于local侧中的hwptr和hrptr不相等,从所述host侧读指令数据写入到local buffer,根据读取的指令数据长度更新local侧hrptr,并将更新后的hrptr写入host侧,其中所述local buffer用于缓存写入local侧的指令数据,所述hrptr表示被读取的指令数据在host buffer中的位置的指针。
30.在一个或多个实施例中,在local侧有一套相同的写指针write pointer(简称hwptr)和读指针read pointer(简称hrptr)。写指针hwptr由host维护,读指针hrptr由local侧维护。当local侧判断hwptr和hrptr不相等时,表明有新的指令写入到host buffer中。此时,local侧会发起读指令操作。把host buffer的指令按顺序读走,写入local buffer。
31.s3响应于host侧中的hwptr和hrptr不相等,根据host buffer的空余缓存深度写入新的指令,其中所述空余缓存深度为hwptr和hrptr的差值。
32.在一个或多个实施例中, host侧会实时比较hwptr和hrptr。当两者不等时,表明已经有指令被读走,当前host buffer有空余缓存。空余缓存深度为hwptr和hrptr的差值。用户会根据空余缓存的深度,把新的指令写入host buffer。
33.在一个或多个实施例中,为了区分写满和读空并且保护buffer不被写溢出,当hwptr和hrptr差值为gap时,表明host buffer已经写满,用户停止写操作。gap可以灵活设置,最小为1b。
34.在一个或多个实施例中,如图4所示在local侧的指令管理流程示意图,local buffer由2个大小相同的lbuffer组成,每个lbuffer的深度固定为n。两个lbuffer可以做乒乓操作,用于并行从host侧读指令和发送指令给执行侧。为了提高效率,每次从host侧读固定长度n的指令。如果n超出host buffer中存储的指令长度l,则写入local buffer的有效长度为l。每个lbuffer都有独立的写指针write pointer(简称lwptr)和读指针read pointer(简称lrptr)。lwptr用于指示当前指令写入的地址,范围为0~n-1 byte。根据每次写入的指令长度更新local buffer的lwptr。lrptr用于指示已经被读走指令的地址,范围为0~n-1 byte。根据每次读走的指令长度更新lbuffer的lrptr。每写入一段指令,local buffer就会更新对应的lwptr[0]或者lwptr[1]。当lwptr未达到n时,表明lbuffer还有空余缓存,会不停的发起读操作,直到lwptr达到n。当任意1个lbuffer非空时,表明已经有指令写入到local buffer中。此时,local buffer侧会主动把指令送到指令执行侧。每次发送的指令长度为e。local buffer根据指令执行侧返回的完成标志,会更新对应的lrptr和hrptr。并取出新的指令发送给指令执行侧。当某个lbuffer的lrptr达到n时,表明该lbuffer中的指令已经全部读完,切换到另外一个lbuffer。如果两个lbuffer都已经达到n时,表明所有lbuffer的指令都已经读完,停止发送。同时,local侧会主动将更新后的hwptr写到host侧,通知host buffer当前指令已经读走的位置。
[0035]
在一个或多个实施例中,在指令数据执行侧,指令执行侧主要做指令的解析、执行和反馈。如图5所示:首先,指令执行侧从local buffer收到指令后,会做指令的解析。解析出指令的类型、长度、原始数据、读写地址等信息。
[0036]
其次,根据指令信息,做数据搬运、数据加减、数据填充等执行操作。
[0037]
然后,指令执行侧会判断执行状态。每执行完成一次指令,就会返回完成标志,通知localbuffer发送新的指令。
[0038]
为了更加清楚描述本技术的构思,本公开列举如下示例:示例1以指令数据主要用于向连续地址写数据为例,执行如下步骤:1).初始状态时,hostbuffer没有存储任何的指令。hwptr和hrptr默认都为0。hostbuffer深度为64gbyte。
[0039]
2).用户把长度为1024byte的指令写入hostbuffer中。该指令主要用于向连续地址写数据。host会将hwptr更新为1024。
[0040]
3).然后,host会主动将更新后的hwptr写到local侧,通知localbuffer新的指令写入的位置。此时,local侧的hwptr为1024b,hrptr为0。local侧判断hwptr和hrptr不相等,表明有新的指令写入到hostbuffer中。此时,local侧会发起读指令操作。
[0041]
4).localbuffer每次固定读取256b长度的指令。分别存储到lbuffer0和lbuffer1,每个lbuffer的有效长度都是256b。总共读取512b长度的指令,更新hrptr为512b。此时localbuffer达到最大值,暂停读指令操作。
[0042]
5).localbuffer会更新本地的写指针lwptr为512byte。
[0043]
6).当lbuffer0或者lbuffer1存满256b指令后,localbuffer非空,表明已经有写入到localbuffer中。localbuffer读写侧会主动把指令送到指令执行侧。每次发送的指令长度为16byte。
[0044]
7).指令执行侧将16byte取走做指令的解析。解析出指令的类型、长度、原始数据、读写地址等信息。
[0045]
8).因此该指令用于向连续地址写数据。因此,指令执行侧会向该地址写入数据。
[0046]
9).指令执行侧每执行完成一次指令16byte,就会返回完成标志,通知localbuffer发送新的指令。
[0047]
10).localbuffer根据完指令执行侧返回的完成标志,会更新lrptr(每次加上16byte)。并取出新的指令发送给指令执行侧。重复7)~10)的操作。
[0048]
11).当lrptr达到256b时,表明lbuffer0中的指令已经全部读完,会继续读lbuffer1的指令。因为lbuffer0的缓存为空,localbuffer会重新发起读指令操作。再从hostbuffer中读走256b长度。写入到lbuffer0中。
[0049]
12).同时,local侧会主动将更新后的hrptr写到host侧,通知hostbuffer当前指令接着读走的长度为256b。
[0050]
13).当lrptr达到512b时,lbuffer1中的指令已经全部读完,会继续读lbuffer0的指令。因为lbuffer1的缓存为空。localbuffer会重新发起读指令操作。再读走256b长度。写入到lbuffer1中。local侧会重复4)-12)的操作,直到hrptr更新为1024。
[0051]
14).当hrptr到达1024后,local判断hrptr和hwptr已经相等,表明指令已经全部被读完,停止读操作。同时,将host侧的hrptr回写为1024。
[0052]
15).当用户读到hrptr为1024后,判断hrptr和hwptr已经相等,判断该指令已经全部执行完成,停止任何操作。准备发起下一次指令。
[0053]
示例二以数据指令主要用于对连续地址的数据做加法运算为例,执行如下步骤:1).hostbuffer中的指令已经全部执行完,hwptr和hrptr为32g-1(如前所述gap
为1b)。hostbuffer深度为32gbyte。
[0054]
2).用户把长度为2mbyte的指令写入hostbuffer中。该指令主要用于对连续地址的数据做加法运算。由于指令很长,host分成1024次写操作,每次写入2048byte指令。例如,第一次写入2048byte指令,将hwptr更新为2048。当写完后,会继续写第二次2048byte指令,将hwptr更新为4096。以此类推。
[0055]
3).每次更新hwptr,host会主动将更新后的hwptr写到local侧,通知localbuffer新的指令写入的位置。第一次更新后,local侧的hwptr为2048,hrptr为32g-1。local侧判断hwptr和hrptr不相等,表明有新的指令写入到hostbuffer中。此时,local侧会发起读指令操作。
[0056]
4).localbuffer每次固定读取512b长度的指令。分别存储到lbuffer0和lbuffer1,每个lbuffer的有效长度都是512b。总共读取1024b长度的指令,更新hrptr为1024b。此时localbuffer达到最大值,暂停读指令操作。
[0057]
5).localbuffer会更新本地的写指针lwptr为1024byte。
[0058]
6).当lbuffer0或者lbuffer1存满512b指令后,localbuffer非空,表明已经有写入到localbuffer中。localbuffer读写模块会主动把指令送到指令执行模块。每次发送的指令长度为32byte。
[0059]
7).指令执行侧将32byte取走做指令的解析。解析出指令的类型、长度、原始数据、读写地址等信息。当前指令类型为数据加法计算。于是,从读地址读出原始数据,然后将根据指令携带的加数,对原始数据做加法,并写回原地址。
[0060]
8).指令执行侧每执行完成一次指令32byte,就会返回完成标志,通知localbuffer发送新的指令。
[0061]
9).localbuffer根据指令执行侧返回的完成标志,会更新lrptr(每次加上32byte)。并取出新的指令发送给指令执行侧。重复7)~10)的操作。
[0062]
10).当lrptr达到512b时,表明lbuffer0中的指令已经全部读完,会继续读lbuffer1的指令。因为lbuffer0的缓存为空,localbuffer会重新发起读指令操作。再从hostbuffer中读走512b长度。写入到lbuffer0中。
[0063]
11).同时,local会主动将更新后的hrptr为写到host侧,通知hostbuffer当前指令已经读走的位置为512b。
[0064]
12).当lrptr达到1024b时,lbuffer1中的指令已经全部读完,会继续读lbuffer0的指令。因为lbuffer1的缓存为空。localbuffer会重新发起读指令操作。再读走512b长度。写入到lbuffer1中。
[0065]
13).当local侧的hwptr为4096,hrptr为1024。local侧判断hwptr和hrptr不相等,表明有hostbuffer中仍然有指令。此时,local侧会继续发起读指令操作。重复4-12的操作。
[0066]
14).当用户写到hwptr为2m-1后,会停止写入。用户会不停的读hrptr,看指令是否已经执行完成。此时,local侧每读执行完成上述4)-12)的操作,会更新一次hrptr。
[0067]
15).当hrptr到达2m-1后,local判断hrptr和hwptr已经相等,表明指令已经全部被读完,停止读操作。同时,将host的hrptr回写为2m-1。
[0068]
16).当用户读到hrptr为2m-1后,判断hrptr和hwptr已经相等,判断该指令已经
全部执行完成,停止操作。准备发起下一次指令。
[0069]
实施例二:为实现上述目的,本实施例提供一种gpu指令数据管理的装置600,请参阅图6。具体地,装置600包括:第一更新单元601、第一读取单元602、第一写入单元603。
[0070]
第一更新单元601,用于响应于host buffer写入指令数据,根据写入的指令数据长度更新host侧hwptr,并将更新后的hwptr写入local侧,其中所述host buffer用于缓存写入host侧的指令数据,所述hwptr表示当前指令数据写入所述host buffer的位置的指针,第一读取单元602,用于响应于local侧中的hwptr和hrptr不相等,从所述host侧读指令数据写入到local buffer,根据读取的指令数据长度更新local侧hrptr,并将更新后的hrptr写入host侧,其中所述local buffer用于缓存写入local侧的指令数据,所述hrptr表示被读取的指令数据在host buffer中的位置的指针,第一写入单元603,用于响应于host侧中的hwptr和hrptr不相等,根据host buffer的空余缓存深度写入新的指令,其中所述空余缓存深度为hwptr和hrptr的差值。
[0071]
实施例三:相应的,本技术实施例还提供一种电子设备,该电子设备可以为终端或者服务器。如图7所示,图7为本技术实施例提供的电子设备的结构示意图。
[0072]
该电子设备700包括有一个或者一个以上处理核心的处理器701、有一个或一个以上计算机可读存储介质的存储器702及存储在存储器702上并可在处理器上运行的计算机程序。其中,处理器701与存储器702电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0073]
处理器701是电子设备700的控制中心,利用各种接口和线路连接整个电子设备700的各个部分,通过运行或加载存储在存储器702内的软件程序(计算机程序)和/或单元,以及调用存储在存储器702内的数据,执行电子设备700的各种功能和处理数据,从而对电子设备700进行整体监控。
[0074]
在本技术实施例中,电子设备700中的处理器701会按照前述实施例的方法步骤,将一个或一个以上的应用程序的进程对应的指令数据加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能。
[0075]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0076]
可选的,如图7所示,电子设备700还包括:gpu指令数据管理单元703、通讯单元704、输入单元705以及电源706。其中,处理器701分别与gpu指令数据管理单元703、通讯单元704、输入单元705以及电源706电性连接。本领域技术人员可以理解,图7中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0077]
gpu指令数据管理单元703可用于实现gpu指令数据的管理。所述gpu指令数据的管理操作具体实施可参见前面的实施例,在此不再赘述。
[0078]
通信侧704可用于与其他设备通信。
[0079]
输入单元705可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0080]
电源706用于给电子设备700的各个部件供电。可选的,电源706可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源706还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0081]
实施例四:为实现上述目的,本实施例提出一种用以存储处理器可执行指令数据的计算机可读存储介质,所述计算机可读存储介质中存储的处理器可执行指令数据在被执行时能够致使处理器实施如上所述的gpu指令数据管理方法。
[0082]
在上述实施例中,应用具体的实施例对本公开的原理及实施方式进行了阐述,各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。以上实施例的说明只是用于帮助理解本公开的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例的技术方案的范围。
再多了解一些

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

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

相关文献