GPU制造技术

技术编号:39739948 阅读:13 留言:0更新日期:2023-12-17 23:41
本公开实施例公开了一种

【技术实现步骤摘要】
GPU显存申请及释放的方法、装置及存储介质


[0001]本公开实施例涉及计算机图像处理
,尤其涉及一种图形处理器(
Graphic Processing Unit

GPU
)显存申请及释放的方法

装置及存储介质


技术介绍

[0002]现有的
GPU
显存申请方案是采用直接显存申请,即通过系统调用直接申请显存块,然后根据返回值判断所述显存块是否申请成功,没有先对所述显存块是否空闲进行判断,如果所述显存块申请成功,则进行下一步的操作,如果所述显存块全被占用或者剩余显存空间的大小不能满足请求显存大小,则会返回失败,系统流程结束,并且对于每次申请的显存块使用完毕则进行释放

此外,对所述直接显存申请执行系统调用前,必须从用户态先切换到内核态,是因为所述用户态是执行在用户空间中,系统调用的相关数据信息需要存储在内核空间中,因此,需要先进行用户态和内核态的切换,然后再执行系统调用

[0003]前述技术方案存在如下缺陷:在直接显存申请的过程中存在系统调用

用户态与内核态切换及
GPU
通信等,这一过程频繁发生会带来很大的性能开销,并且对于每次申请的显存块使用完毕则进行释放,频繁的进行显存申请

显存释放会产生许多显存碎片,导致整个显存空间不连续,极大地影响了
GPU
的渲染帧率


技术实现思路

[0004]有鉴于此,本公开实施例期望提供一种
GPU
显存申请及释放的方法

装置及存储介质,能够减少系统调用
、GPU
的通信操作以及减少系统显存碎片,提高
GPU
的渲染帧率

[0005]本公开实施例的技术方案是这样实现的:第一方面,本公开实施例提供一种
GPU
显存申请的方法,包括:
CPU

GPU
发送初始化指令以获取
GPU
显存的空闲块链表,通过位图算法的状态标识位标识所述空闲块链表中每一个显存块的状态;
CPU

GPU
发送渲染指令,
GPU
执行渲染前,
CPU
根据所述位图算法的状态标识位和所述渲染指令中渲染数据的大小,通过伙伴算法查找匹配的空闲显存块,其中,根据所述渲染指令中渲染数据的大小确定需要请求显存大小;若所述空闲块链表中存在满足所述请求显存大小的空闲显存块,则
CPU

GPU
发送显存申请请求,
GPU
根据所述显存申请请求分配所述空闲显存块并在
CPU
端重置其相应的位图算法的状态标识位,其中,所述显存申请请求中至少包括请求显存大小;若所述空闲块链表中不存在满足所述请求显存大小的空闲显存块,则查找所述空闲块链表中更大的空闲显存块并划分伙伴关系块,直到获得满足所述请求显存大小的空闲显存块

[0006]第二方面,本公开实施例提供一种
GPU
显存释放的方法,包括:
GPU
使用完已分配的显存块,向
CPU
发送通知消息,其中,所述通知消息中至少包括待释放的显存块的标识;
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的状态;
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的伙伴关系块是否空闲,若是,则通知
GPU
合并所述伙伴关系块并更新合并后的显存块的位图算法的状态标识位;
CPU
根据所述待释放的显存块的状态及其伙伴关系块的状态,向
GPU
发送显存释放请求,
GPU
通过伙伴算法释放所述待释放的显存块及其伙伴关系块并挂入到相应的空闲块链表

[0007]第三方面,本公开实施例提供一种
GPU
显存申请的装置,所述装置包括:获取部分

查找部分

申请部分以及划分部分;其中,所述获取部分,经配置为
CPU

GPU
发送初始化指令以获取
GPU
显存的空闲块链表,通过位图算法的状态标识位标识所述空闲块链表中每一个显存块的状态;所述查找部分,经配置为
CPU

GPU
发送渲染指令,
GPU
执行渲染前,
CPU
根据所述位图算法的状态标识位和所述渲染指令中渲染数据的大小,通过伙伴算法查找匹配的空闲显存块,其中,根据所述渲染指令中渲染数据的大小确定需要请求显存大小;所述申请部分,经配置为若所述空闲块链表中存在满足所述请求显存大小的空闲显存块,则
CPU

GPU
发送显存申请请求,
GPU
根据所述显存申请请求分配所述空闲显存块并在
CPU
端重置其相应的位图算法的状态标识位,其中,所述显存申请请求中至少包括请求显存大小;所述划分部分,经配置为若所述空闲块链表中不存在满足所述请求显存大小的空闲显存块,则查找所述空闲块链表中更大的空闲显存块并划分伙伴关系块,直到获得满足所述请求显存大小的空闲显存块

[0008]第四方面,本公开实施例提供一种
GPU
显存释放的装置,所述装置包括:通知部分

第一查询部分

第二查询部分以及释放部分;其中,所述通知部分,经配置为
GPU
使用完已分配的显存块,向
CPU
发送通知消息,其中,所述通知消息中至少包括待释放的显存块的标识;所述第一查询部分,经配置为
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的状态;所述第二查询部分,经配置为
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的伙伴关系块是否空闲,若是,则通知
GPU
合并所述伙伴关系块并更新合并后的显存块的位图算法的状态标识位;所述释放部分,经配置为
CPU
根据所述待释放的显存块的状态及其伙伴关系块的状态,向
GPU
发送显存释放请求,
GPU
通过伙伴算法释放所述待释放的显存块及其伙伴关系块并挂入到相应的空闲块链表

[0009]第五方面,本公开实施例提供了一种计算设备,所述计算设备包括:
CPU

GPU
以及实现
CPU

GPU
之间连接通信的系统总线;其中,所述
CPU

GPU
,经配置以实现第一方面所述
GPU
显存申请的方法或者实现第二本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种
GPU
显存申请的方法,其特征在于,该方法应用于具有
CPU

GPU
的计算设备,所述方法包括:
CPU

GPU
发送初始化指令以获取
GPU
显存的空闲块链表,通过位图算法的状态标识位标识所述空闲块链表中每一个显存块的状态;
CPU

GPU
发送渲染指令,
GPU
执行渲染前,
CPU
根据所述位图算法的状态标识位和所述渲染指令中渲染数据的大小,通过伙伴算法查找匹配的空闲显存块,其中,根据所述渲染指令中渲染数据的大小确定需要请求显存大小;若所述空闲块链表中存在满足所述请求显存大小的空闲显存块,则
CPU

GPU
发送显存申请请求,
GPU
根据所述显存申请请求分配所述空闲显存块并在
CPU
端重置其相应的位图算法的状态标识位,其中,所述显存申请请求中至少包括请求显存大小;若所述空闲块链表中不存在满足所述请求显存大小的空闲显存块,则查找所述空闲块链表中更大的空闲显存块并划分伙伴关系块,直到获得满足所述请求显存大小的空闲显存块
。2.
根据权利要求1所述方法,其特征在于,所述
CPU

GPU
发送渲染指令,
GPU
执行渲染前,
CPU
根据所述位图算法的状态标识位和所述渲染指令中渲染数据的大小,通过伙伴算法查找匹配的空闲显存块,其中,根据所述渲染指令中渲染数据的大小确定需要请求显存大小,包括:根据所述请求显存大小,通过位图算法的状态标识位确定满足所述请求显存大小的所有空闲态的显存块,其中,所述位图算法的状态标识位为0表示显存块空闲,所述位图算法的状态标识位为1表示显存块被占用;通过伙伴算法从所述所有空闲态的显存块中查找匹配的空闲显存块
。3.
根据权利要求2所述方法,其特征在于,所述通过伙伴算法从所述所有空闲态的显存块中查找匹配的空闲显存块,包括:基于所述请求显存大小,所述伙伴算法以2的幂次方大小确定需要查找的空闲显存块
。4.
根据权利要求1所述方法,其特征在于,所述若所述空闲块链表中不存在满足所述请求显存大小的空闲显存块,则查找所述空闲块链表中更大的空闲显存块并划分伙伴关系块,直到获得满足所述请求显存大小的空闲显存块,包括:根据所述请求显存大小,获取显存块大小为个页面大小的空闲显存块;其中,
i
值满足 <
m
< ,
m
为请求显存大小,
i
为空闲显存块大小的指数;若所述个页面大小的空闲显存块不满足所述请求显存大小,则将所述空闲显存块大小的指数标志
i
递增,以获取所述空闲块链表中更大的空闲显存块;将获取到的所述更大的空闲显存块划分为一个或多个伙伴关系块并判断所述伙伴关系块是否满足所述请求显存大小,若否,则继续分块,直到获取到满足所述请求显存大小的空闲显存块
。5.
一种
GPU
显存释放的方法,其特征在于,该方法应用于具有
CPU

GPU
的计算设备,所述方法包括:
GPU
使用完已分配的显存块,向
CPU
发送通知消息,其中,所述通知消息中至少包括待释放的显存块的标识;
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的状态;
CPU
根据所述待释放的显存块的标识,查询所述待释放的显存块的伙伴关系块是否空闲,若是,则通知
GPU
合并所述伙伴关系块并更新合并后的显存块的位图算法的状态标识位;
CPU
根据所述待释放的显存块的状态及其伙伴关系块的状态,向
GPU
发送显存释放请求,
GPU
通过伙伴算法释放所述待释放的显存块及其伙伴关系块并挂入到相...

【专利技术属性】
技术研发人员:张辉
申请(专利权)人:西安芯云半导体技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1