发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种基于GPU图形显示的显存自适应管理方法,通过设计分层显存回收池和结合应用需求的显存空间权重机制,建立同图形显示应用关联的显存自适应管理方法,从而在有限的显存资源下,能够更合理地管理显存空间,满足复杂应用的显存需求,极大地减少显存碎片,提升图形显示应用的性能体验。
本发明提供的一种基于GPU图形显示的显存自适应管理方法,包括如下步骤:S1、将显存区域划分为3个区域:固定显存区、显存回收池和剩余空间,在GPU图形显示驱动初始化时,创建包含多个区域的显存回收池;S2、为显存回收池中的每个区域建立独立的显存对象管理链表;S3、描述图形显示应用使用时与GPU图形驱动和显存的自适应交互;S4、描述图形显示应用退出时与GPU图形驱动和显存的自适应交互。
在上述技术方案中,所述步骤S1的具体过程如下:GPU图形显示驱动初始化时,创建4个区域的显存回收池,分别对应各个尺寸显示应用的显存对象进行管理,所述GPU图形显示应用的图形大小按以下功能划分:包括图标、按键、工具条的小型显示大小;包括窗口界面的中型显示大小;包括背景的全屏幕显示大小,以上功能划分作为显存回收池的4个区域大小边界。
在上述技术方案中,所述步骤S1中,所述显存回收池的区域范围值,以800*600作为基准分辨率,包括0-100*100、100*100-400*300、400*300-800*600以及800*600以上,如果显示分辨率为其他分辨率,边界值为前述边界值*N,N=其他分辨率/基准分辨率。
在上述技术方案中,所述步骤S2的具体过程如下:在显存回收池中的显存对象管理链表中,设计两个子链表:一、显屏子链存放显屏数据的显存对象,所述显屏数据与主存数据进行交互融合并显示;二、离屏子链存放离屏数据的显存对象,所述离屏数据为应用中间处理数据;所述两个子链表首尾相连组成显存对象管理链表,显屏子链从小到大排列,离屏子链从大到小排列。
在上述技术方案中,所述显存对象管理链表中每个显存对象包含如下元素:权重、应用进程号ID、显屏/离屏属性、显存区域大小。
在上述技术方案中,所述步骤S3的具体过程如下:S31、图形显示应用创建时,通过GPU驱动申请显存空间,初始显存回收池为空,从剩余空间中申请,并在显存对象信息中加入元素信息;S32、图形显示应用运行中释放显存时,直接通过图形显示应用存储管理模块推入到显存回收池中;S33、图形显示应用运行中重新申请显存空间时,从显存池中抓取显存对象,优先抓取拥有此应用ID标识的对象;未选中匹配的空间时,继续遍历显存回收池直到找到合适的,并将选中的显存对象从显存回收池中剔除;如果整个显存回收池都无匹配对象,则通过GPU驱动从剩余空间中获取新的显存空间,附上元素信息后提交给图形显示应用使用;S34、在整个图形显示应用运行过程中反复执行第二步和第三步,完成自适应管理要求。
在上述技术方案中,所述步骤S32还包括当新的显存对象被推入显存回收池时,首先分析其元素信息,其具体过程如下:S321、根据大小信息,判断推入的显存回收池区域和其对应的显存对象管理链表;S322、根据属性信息,判断推入的显存对象管理链表子链表;S323、根据大小信息,判断推入的显存对象管理链表子链表具体位置。
在上述技术方案中,所述步骤S4的具体过程如下:S41、图形显示应用正在使用的全部显存对象通过GPU驱动释放到剩余空间中;S42、根据显存对象中的ID信息,遍历显存回收池的全部显存对象管理链表,把关联ID信息的显存对象抓取出来,通过GPU驱动释放到剩余空间中。
在上述技术方案中,所述步骤S3还包括显存空间权重机制,具体过程如下:所述步骤S31中,GPU驱动申请显存空间,然后在显存对象信息中加入权重值1,表示当前空间为闲置状态;显存对象映射给图形显示应用使用,提升显存对象信息权重值2,表示当前空间为被使用状态;所述步骤S32中,所述显存空间被显示应用解除映射,显示应用并没有结束时,降低显存对象信息权重值1,表示当前空间回到闲置状态,并将此显存对象推入显存回收池中;所述步骤S33中,图形显示应用重新申请显存空间时,从显存池中抓取合适的显存对象,提升显存对象信息权重值2,表示当前空间为被使用状态;所述步骤S34中,GPU驱动对前述步骤中所有显存对象信息权重值为0的显存空间,彻底释放。
在上述技术方案中,所述步骤S4还包括显存空间权重机制,具体过程如下:所述步骤S41中,图形显示应用结束时,所有关联显存空间解除映射,连续降低显存对象信息权重值两次0;所述步骤S42中,同时遍历显存回收池中标有此应用ID的显存对象,统一降低显存对象信息权重值0,并从显存对象管理链表中剔除,GPU驱动对前述步骤中所有显存对象信息权重值为0的显存空间,彻底释放。
本发明基于GPU图形显示的显存自适应管理方法,具有以下有益效果:本发明提供的基于GPU图形显示的显存自适应管理方法,利用显存回收池和显存空间权重机制,在图形显示应用运行时动态地管理显存空间,更新回收池链表中的显存对象信息及其权重值,自适应地改变回收池体量和链表结构,提高显存利用率,极大减少显存碎片,达到最大程度地提高GPU图形应用的性能表现。
具体实施方式
下面结合附图及实施例对本发明作进一步的详细描述,但该实施例不应理解为对本发明的限制。
参见图1,本发明基于GPU图形显示的显存自适应管理方法,包括如下步骤:
S1、将显存区域划分为3个区域:固定显存区、显存回收池和剩余空间,在GPU图形显示驱动初始化时,创建包含多个区域的显存回收池;
S2、为显存回收池中的每个区域建立独立的显存对象管理链表;
S3、描述图形显示应用使用时与GPU图形驱动和显存的自适应交互;
S4、描述图形显示应用退出时与GPU图形驱动和显存的自适应交互。
参见图2,本发明中,将显存区域划分为3个区域:固定显存区、显存回收池和剩余空间。
固定显存区用来存放GPU图形显示最终显示区数据,固定大小并长期占用,故GPU驱动初始化时,从显存开辟固定区域用于显示。固定显存区在确定分辨率下大小固定,在其他分辨率下等比例缩放。
显存回收池里存放GPU图形显示使用过的显存空间;剩余空间表示未被使用的显存空间。随着应用的使用,显存回收池的体量会变大,剩余空间逐渐减少,极限情况下,剩余空间为空;当应用结束后,变化相反,极限情况下显存回收池为空。
GPU图形显示应用流程中暂时释放的显存空间,以闲置空间的形式按照大小存放在显存回收池的不同区域中,GPU驱动未释放此空间。当图形显示应用结束时,GPU驱动将释放所有图形显示应用使用的显存空间,并从显存回收池中剔除应用使用过的显存空间,并释放。
显存的整个容量是有限的。针对GPU图形显示驱动,最终显示需要占用固定的显存空间,作为显示输出的强占显存空间,在GPU图形显示驱动初始化时固定开辟并不做释放处理。所以,显存回收池的容量小于等于显存容量的三分之二。
参见图3,在GPU图形显示驱动初始化时,创建了4个区域的显存回收池。分别用于对不同尺寸显示应用的显存对象进行管理。
根据GPU图形显示应用的图形大小,按功能划分为如下几种大小:图标、按键、工具条等小型显示大小;窗口界面等中型显示大小;背景等全屏幕显示大小;按如上划分,作为显存回收池的4个区域大小边界。
显存回收池的区域大小边界值,以800*600分辨率为基准,分别为0-100*100、100*100-400*300、400*300-800*600以及800*600以上。如果显示分辨率为其他分辨率,边界值为前述边界值*N,N=其他分辨率/基准分辨率。
虽然显存回收池的各个区域的边界大小值在当前分辨率下是固定的。然而回收池的容量是自适应动态调整的。根据显存回收池的各个区域的显存对象管理链表长度的变化,显存回收池的容量也呈动态变化。
参见图4,所述步骤S2为显存回收池中的每个区域建立独立的显存对象管理链表。
在显存回收池中的显存对象管理链表中,设计两个子链表。显屏子链存放显屏数据的显存对象,此数据同主存数据要进行交互融合并显示;离屏子链存放离屏数据的显存对象,此数据为应用中间处理数据,两个子链表首尾相连组成显存对象管理链表。显屏子链从小到大排列,离屏子链从大到小排列。
子链表中的显存对象使用频次是不一样,为了减轻搜索链表的复杂度,GPU驱动会判断显存对象数据类型,定点搜索对应子链表。
显存对象管理链表中每个显存对象包含如下元素:权重、应用进程号ID、属性(显/离屏)、显存区域大小等其他信息。
显存对象管理链表按显存对象大小进行排序。新进的显存对象,首先判断进入区域,然后遍历当前区域的显存对象管理链表,计算插入位置。
显示应用需要重新申请显存空间时,根据大小选择搜索显存回收池的区域,然后遍历显存对象管理链表,找到合适的显存对象,该对象即时从显存对象管理链表中剔除。
参见图5,所述步骤S3中,描述图形显示应用与GPU图形驱动和显存的自适应交互具体过程如下:
S31、图形显示应用创建时,通过GPU驱动申请显存空间,初始显存回收池为空,从剩余空间中申请,并在显存对象信息中加入元素信息;
S32、图形显示应用运行中释放显存时,直接通过图形显示应用存储管理模块推入到显存回收池中;
S33、图形显示应用运行中重新申请显存空间时,从显存池中抓取显存对象,优先抓取拥有此应用ID标识的对象,未选中匹配的空间时,继续遍历显存回收池直到找到合适的,并将选中的显存对象从显存回收池中剔除;如果整个显存回收池都无匹配对象,则通过GPU驱动从剩余空间中获取新的显存空间,附上元素信息后提交给图形显示应用使用;
S34、在整个图形显示应用运行过程中步骤S32和步骤S33会反复执行,完成自适应管理要求。
参见图6,所述步骤S32还包括当新的显存对象被推入显存回收池时,应首先分析其元素信息,其具体过程如下:
S321、根据大小信息,判断推入的显存回收池区域和其对应的显存对象管理链表;
S322、根据属性信息,判断推入的显存对象管理链表子链;
S323、根据大小信息,判断推入子链的具体位置。
参见图7,所述步骤S4描述图形显示应用退出时同GPU图形驱动和显存的自适应交互,具体过程如下:
S41、图形显示应用正在使用的全部显存对象通过GPU驱动释放到剩余空间中;
S42、根据显存对象中的ID信息,遍历显存回收池的全部链表,把关联ID信息的显存对象抓取出来,通过GPU驱动释放到剩余空间中。
参见图8,在描述图形显示应用、以及GPU图形驱动与显存的自适应交互中,创建了显存空间权值机制,其具体的工作步骤如下:
第一步、GPU驱动申请显存空间,然后在显存对象信息中加入权重值1,表示当前空间为闲置状态;
第二步、显存对象映射给图形显示应用使用,提升显存对象信息权重值2,表示当前空间为被使用状态;
第三步、显存空间被显示应用解除映射,显示应用并没有结束时,降低显存对象信息权重值1,表示当前空间回到闲置状态,并将此显存对象推入显存回收池中;
第四步、图形显示应用重新申请显存空间时,从显存池中抓取合适的显存对象,提升显存对象信息权重值2,表示当前空间为被使用状态;
第五步、图形显示应用结束时,所有关联显存空间解除映射,连续降低显存对象信息权重值两次0,同时遍历显存回收池中标有此应用ID的显存对象,统一降低显存对象信息权重值0,并从显存对象管理链表中剔除;
第六步、GPU驱动对上述步骤中所有显存对象信息权重值为0的显存空间,彻底释放。
在一种可能的实施例中,所述的显存自适应管理方法,分别可以用于:图形显示应用所需显存资源管理;系统桌面应用所需显存资源管理。
在一种可能的实施例中,所述的显存自适应管理方法,还可用于:基于开放式图形库(OpenGL)的应用所需显存资源管理;基于开放式计算库(OpenCL)的应用所需显存资源管理;图形2D应用所需显存资源管理。
在一种可能的实施例中,所述的显存自适应管理方法,更广泛用于:所有通过GPU图形驱动框架使用显存资源的各类应用,其对显存资源的管理都可使用此方法。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。