一种关于显存的管理方法、装置及计算机存储介质
技术领域
本发明实施例涉及图形处理器的显存管理技术领域,尤其涉及一种关于显存的管理方法、装置及计算机存储介质。
背景技术
通常来说,计算设备具有至少一个可编程处理元件,通常称为中央处理器(CPU);除此之外,计算设备通常还具有其他用于各种类型的专业化处理的可编程处理器,诸如用于图形处理操作的图形处理器(GPU,Graphic Processing Unit)。GPU通常包括被设计为基于CPU所提供的指令和数据在并行数据流上执行相同指令的多个核或处理元件,从而使得GPU能够在并行地进行大数据块处理的算法中比CPU更有效。一般来讲,CPU充当计算设备的系统主机并且将专业化并行任务交给GPU。
一般来说,由于系统内存的容量相对于GPU的显存容量都较大,因此,GPU需要处理的数据通常以缓冲区对象的形式存储于系统内存中,当GPU将要开始基于CPU下发的指令而并行运算时,CPU通过驱动程序指令将存储于系统内存的缓冲区对象复制至显存后,GPU才开始进行并行运算过程。而缓冲区对象的数据通常较大,若每次GPU在并行运算前都将缓冲区对象从系统内存复制至GPU显存,该复制过程会造成较大的性能损耗。
发明内容
有鉴于此,本发明实施例期望提供一种关于显存的管理方法、装置及计算机存储介质;能够降低缓冲区对象的复制过程,提升计算设备的整体系统性能。
本发明实施例的技术方案是这样实现的:
第一方面,本发明实施例提供了一种关于显存的管理方法,所述方法可以包括:
图形处理器GPU驱动程序基于设定的分配逻辑为被创建的缓冲区对象在显存中分配物理空间;
所述GPU驱动程序为所述被创建的缓冲区对象进行内存映射MMAP操作以建立所述被创建的缓冲区对象在所述显存中的物理地址与系统内存中的虚拟地址之间的映射关系;
所述GPU驱动程序将所述映射关系写入GPU的内存管理单元MMU的映射表;
图形应用程序通过所述GPU驱动程序将待缓冲数据,通过所述被创建的缓冲区对象写入所述显存中由所述GPU驱动程序分配的缓冲物理空间。
第二方面,本发明实施例提供了一种关于显存的管理装置,所述装置包括:CPU、图形处理器GPU以及存储有GPU驱动程序和图形应用程序的存储器;其中,
所述CPU,经配置为运行所述GPU驱动程序以执行以下步骤:
基于设定的分配逻辑为被创建的缓冲区对象在显存中分配物理空间;以及,
为所述被创建的缓冲区对象进行内存映射MMAP操作以建立所述被创建的缓冲区对象在所述显存中的物理地址与系统内存中的虚拟地址之间的映射关系;以及,
将所述映射关系写入所述GPU的内存管理单元MMU的映射表;
所述CPU,还经配置为运行所述图形应用程序以执行:通过所述GPU驱动程序将待缓冲数据,通过所述被创建的缓冲区对象写入所述显存中由所述GPU驱动程序分配的缓冲物理空间。
第三方面,本发明实施例提供了一种计算机存储介质,所述计算机存储介质存储有关于显存的管理程序,所述关于显存的管理程序被至少一个处理器执行时实现第一方面所述的关于显存的管理方法的步骤。
本发明实施例提供了一种关于显存的管理方法、装置及计算机存储介质;缓冲区对象被创建完成后,GPU驱动程序为其于显存中分配物理地址,并建立系统虚拟地址与该物理地址之间的映射关系;图形应用程序将被创建的缓冲区对象按照该物理地址写入至显存。从而无需将缓冲区对象创建于系统内存中,避免在渲染过程中将缓冲区对象由系统内存复制至显存,通过减少复制操作以提升整体性能。
附图说明
图1为本发明实施例提供的一种缓冲区对象的复制流程示意图;
图2为本发明实施例提供的一种系统内存以及显存的分配示意图;
图3为本发明实施例提供的一种计算装置的组成示意图;
图4为本发明实施例提供的详细说明图3中处理器、GPU和系统内存的实例实施方案的框图;
图5为本发明实施例提供的一种关于显存的管理方法流程示意图;
图6为本发明实施例提供的一种系统内存及显存的处理状态示意图;
图7为本发明实施例提供的一种关于显存的管理方法的具体实施流程示意图;
图8为本发明实施例提供的显存换出的具体实施流程示意图;
图9为本发明实施例提供的显存换入的具体实施流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
一般来说,缓冲区对象(BO,Buffer Object)允许图形应用程序显式地指定把哪些数据存储在图形卡的显存中以供GPU进行处理。而常规方案中,通常将缓冲区对象首先存储于系统内存中,在需要进行渲染的时候,再由系统内存将缓冲区对象复制到显存中,具体过程如图1所示:
步骤S1:CPU基于图形应用程序创建BO;
步骤S2:CPU将BO写入系统内存RAM;
步骤S3:CPU基于图形应用程序通过图形内核驱动程序向GPU下发渲染命令;
步骤S4:图形内核驱动程序基于下发的渲染命令将BO由系统内存RAM存储至显存VRAM;
步骤S5:图形内核驱动程序基于渲染命令对GPU发起渲染流程;
步骤S6:GPU根据渲染流程通过内存管理单元(MMU,Memory Management Unit)读取存储至VRAM的BO以实现渲染流程。
示例性地,上述图形应用程序可符合图形应用程序编程接口(API) ,例如开放式图形库(OpenGL,Open Graphics Library)API、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、开放式计算语言(OpenCLT M) 、RenderScript或任何其它异构计算API,或任何其它公用或专有标准图形或计算API。
对于系统内存以及显存,上述过程的分配结果可以如图2所示,API在系统内存虚拟空间中的内核空间设置BO,并将其存储至物理显存中由操作系统管理的显存地址,并且在物理显存中的隐藏显存内建立虚拟空间与存储有BO的物理显存之间的地址映射。
对于以上常规方案,通常来说,由于缓冲区对象一般都比较大,并且每次渲染都需要将缓存对象从内存拷贝到显存,内存拷贝会带来比较大的性能损耗。有鉴于此,本发明实施例期望能够减少内存向显存复制缓冲区对象BO的操作,以提高整体性能。基于此,本发明实施例的技术方案会在BO构造过程中,直接在显存中进行创建,从而通过减少复制操作以提升整体性能。
参见图3,其示出了能够实现本发明实施例技术方案的计算装置2,该计算装置2的实例包括但不限于:无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器,等。在图3的实例中,该计算装置2可以包括:处理器6、系统内存10和GPU 12。计算装置2还可包含显示处理器14、收发器模块3、用户接口4和显示器8。收发器模块3和显示处理器14两者可为与处理器6和/或GPU 12相同的集成电路(IC)的部分,两者可在包含处理器6和/或GPU 12的一或多个IC的外部,或可形成于在包含处理器6和/或GPU 12的IC外部的IC中。
为清楚起见,计算装置2可包含图3中未图示的额外模块或单元。举例来说,计算装置2可在其中计算装置2为移动无线电话或的实例中包含扬声器和麦克风(两者均未在图3中示出)来实现电话通信,或在计算装置2为媒体播放器的情况下包含扬声器。计算装置2还可包含摄像机。此外,计算装置2中所示的各种模块和单元可能不是在计算装置2的每个实例中都是必需的。举例来说,在计算装置2为桌上型计算机或经装备以与外部用户接口或显示器连接的其它装置的实例中,用户接口4和显示器8可在计算装置2外部。
用户接口4的实例包含(但不限于)轨迹球、鼠标、键盘和其它类型的输入装置。用户接口4还可为触摸屏,并且可作为显示器8的部分并入。收发器模块3可包含电路以允许计算装置2与另一装置或网络之间的无线或有线通信。收发器模块3可包含调制器、解调器、放大器和用于有线或无线通信的其它此类电路。
处理器6可为微处理器,例如中央处理单元(CPU),其经配置以处理供执行的计算机程序的指令。处理器6可包括控制计算装置2的运算的通用或专用处理器。用户可将输入提供到计算装置2,以致使处理器6执行一或多个软件应用程序。在处理器6上执行的软件应用程序可包含(例如)操作系统、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序、视频游戏应用程序、图形用户接口应用程序或另一程序。另外,处理器6可执行用于控制GPU 12的运算的GPU驱动程序22。用户可经由一或多个输入装置(未图示) (例如,键盘、鼠标、麦克风、触摸垫或经由用户接口4耦合到计算装置2的另一输入装置)将输入提供到计算装置2。
在处理器6上执行的软件应用程序可包含一或多个图形渲染指令,其指示处理器6来致使将图形数据渲染到显示器8。在一些实例中,所述软件指令可符合图形应用程序编程接口(API),例如开放式图形库OpenGL API、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、开放式计算语言(OpenCLT M) 、RenderScript或任何其它异构计算API,或任何其它公用或专有标准图形或计算API。所述软件指令还可为针对无渲染算法(例如计算摄影、卷积神经网络、视频处理、科学应用程序等)的指令。为了处理图形渲染指令,处理器6可向GPU 12发出一或多个图形渲染命令(例如,处理器6通过GPU驱动程序22向GPU 12下发图形渲染命令),以致使GPU 12执行图形数据的渲染中的一些或全部。在一些实例中,待渲染的图形数据可包含例如点、线、三角形、四边形、三角形带等图形图元的列表。
GPU 12可经配置以执行图形运算,从而将一或多个图形图元渲染到显示器8。因此,当在处理器6上执行的软件应用中的一者需要图形处理时,处理器6可将图形命令和图形数据提供到GPU 12以用于渲染到显示器8。图形数据可包含(例如)绘制命令、状态信息、图元信息、纹理信息等。在一些情况下,GPU 12可内置有高度并行结构,其提供比处理器6高效的对复杂图形相关运算的处理。举例来说,GPU 12可包含经配置来以并行方式对多个顶点或像素进行运算的多个处理元件,例如着色器单元。在一些情况下,GPU 12的高度并行性质允许GPU 12比使用处理器6直接将场景绘制到显示器8更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器8上。
在一些情况下,可将GPU 12集成到计算装置2的母板中。在其它情况下,GPU 12可存在于图形卡上,所述图形卡安装在计算装置2的母板中的端口中,或可以其它方式并入在经配置以与计算装置2互操作的外围装置内。GPU 12可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。GPU 12还可包含一或多个处理器核心,使得GPU 12可被称作多核处理器。
在一些实例中,GPU 12可将完全形成的图像存储在系统内存10中。显示处理器14可从系统内存10检索图像,且输出致使显示器8的像素照亮以显示所述图像的值。显示器8可为计算装置2的显示器,其显示由GPU 12产生的图像内容。显示器8可为液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器或另一类型的显示装置。
图4是进一步详细说明图3中处理器6、GPU 12和系统内存10的实例实施方案的框图。如图4所示,处理器6可执行至少一个软件应用程序18、图形API 20和GPU 驱动程序22,其中的每一者可为一或多个软件应用程序或服务。在一些实例中,图形API 20和GPU驱动程序22可实施为CPU 6的硬件单元。
可供GPU 12使用的存储器可包含显存16,其可存储经渲染图像数据,例如像素数据,以及任何其它数据,因此,显存16还可被称为帧缓冲器。在具体实施过程中,显存16可为系统内存10的部分或可与系统内存10分离。
显存16存储GPU 12的目的地像素。每个目的地像素可与唯一屏幕像素位置相关联。在一些实例中,显存16可存储每个目的地像素的色彩分量和目的地α值。举例来说,显存16可存储每个像素的红色、绿色、蓝色、α(RGBA)分量,其中“RGB”分量对应于色彩值,并且“A”分量对应于目的地α值(例如,用于图像合成的不透明度值)。尽管将显存16和系统内存10说明为单独的存储器单元,但在其它实例中,显存16可以是系统内存10的一部分。此外显存16还可能够存储除像素之外的任何合适的数据。
软件应用程序18可为利用GPU 12的功能性的任何应用程序。举例来说,软件应用程序18可为图形应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序或使用2D或3D图形的另一类型的软件应用程序。
软件应用程序18可包含指令GPU 12渲染图形用户接口(GUI)和/或图形场景的一或多个绘制指令。举例来说,绘制指令可包含界定将由GPU 12渲染的一组一或多个图形图元的指令。在一些实例中,绘制指令可共同地界定用于GUI中的多个开窗表面的全部或部分。在额外实例中,所述绘制指令可共同地定义图形场景的全部或部分,所述图形场景包含在由应用程序定义的模型空间或世界空间内的一或多个图形对象。
软件应用程序18可经由图形API 20调用GPU驱动程序22,以向GPU 12发出一或多个命令,以用于将一或多个图形图元渲染到可显示的图形图像中。举例来说,软件应用程序18可调用GPU驱动程序22,以向GPU 12提供图元定义。在一些情况下,图元定义可以例如三角形、矩形、三角形扇、三角形带等的绘制图元的列表的形式被提供到GPU 12。图元定义可包含指定与待呈现的图元相关联的一或多个顶点的顶点规格。所述顶点规格可包含每个顶点的位置坐标,且在一些情况下包含与顶点相关联的其它属性,例如色彩属性、法向量和纹理坐标。图元定义还可包含图元类型信息(例如,三角形、矩形、三角形扇、三角形带等)、缩放信息、旋转信息及类似者。
基于由软件应用程序18向GPU驱动程序22发出的指令,GPU驱动程序22可调配指定供GPU 12执行的一或多个运算以便渲染图元的一或多个命令。当GPU 12接收到来自CPU 6的命令时,GPU 12可使用处理器集群46执行图形处理管线,以便对命令进行解码,并对图形处理管线进行配置以执行命令中所制定的操作。
通常来说,典型的符合图形API的图形应用程序指令指示CPU 6将图形数据进行渲染的过程,可以包括:构建场景,创建缓冲区对象,写入缓冲区对象,发出渲染命令这些步骤。对于创建缓冲区对象步骤和写入缓冲区对象步骤,通常会通过GPU驱动程序22进行实际处理。
结合上述图3及图4所描述的计算装置2,参见图5,其示出了本发明实施例提供的能适用于计算装置2的一种关于显存的管理方法,该方法可以应用于上述图3及图4所描述的计算装置2中,该方法可以包括:
S501:GPU驱动程序22基于设定的分配逻辑为所述被创建的缓冲区对象在显存16中分配物理空间;
S502:GPU驱动程序22为所述被创建的缓冲区对象进行内存映射(MMAP,MemoryMAPping)操作以建立所述被创建的缓冲区对象在显存16中的物理地址与系统内存10中的虚拟地址之间的映射关系;
S503:GPU驱动程序22将所述映射关系写入GPU 12的内存管理单元MMU的映射表;
S504:图形应用程序通过GPU驱动程序22将待缓冲数据,通过所述被创建的缓冲区对象写入显存16中由所述GPU驱动程序分配的缓冲物理空间。
通过图5所示的技术方案,缓冲区对象被创建完成后,GPU驱动程序22为其于显存16中分配物理地址,并建立系统虚拟地址与该物理地址之间的映射关系;图形应用程序将被创建的缓冲区对象按照该物理地址写入至显存16。从而无需将缓冲区对象创建于系统内存10中,避免在渲染过程中将缓冲区对象由系统内存10复制至显存16,通过减少复制操作以提升整体性能。
对于图5所示的技术方案,在一些示例中,在GPU驱动程序22基于设定的分配逻辑为所述被创建的缓冲区对象在显存16中分配物理地址之前,所述方法还包括:
图形应用程序基于CPU 6的调用,向GPU驱动程序22发出关于创建缓冲区对象的申请请求;
GPU驱动程序22基于所述申请请求处理所述被创建的缓冲区对象。
对于图5所示的技术方案,在一些示例中,在所述被创建的缓冲区对象写入完毕后,所述方法还包括:
图形应用程序通过GPU驱动程序22向GPU 12发出渲染操作指令;
GPU 12基于所述渲染操作指令中描述符从MMU所存储映射表中查找所述被创建的缓冲区对象于显存16中的物理地址;其中,所述描述符包括关于所述被创建的缓冲区对象于系统内存10中的虚拟地址;
GPU 12根据查找到的物理地址从显存16中读取所述被创建的缓冲区对象,并根据所述被创建的缓冲区对象执行渲染流程。
对于图5所述的技术方案及其示例,参见图6,其示出了在实现过程中的系统内存10及显存16的处理状态,从图6中可以看出,在CPU 6所使用的系统内存10的虚拟地址空间内,无论是用户空间,还是内核空间不存在缓冲区对象,而由于缓冲区对象在被构造或创建的过程中,直接创建在显存16,从而减少存储拷贝过程,提高整体性能。
在具体实现过程中,图5所述的技术方案及其示例的具体实施流程如图7所示,可以包括:
S71、图形应用程序通过系统调用向GPU驱动程序22申请创建缓冲区对象;
S72、GPU驱动程序22处理创建缓冲区对象的调用,执行分配逻辑获取缓冲区对象在显存16的物理地址;
S73、图形应用程序进行缓冲区对象映射操作;
S74、GPU驱动程序22进行mmap操作,建立系统内存10的虚拟地址与显存16的物理地址之间的映射关系;
S75、GPU驱动程序22将系统内存10的虚拟地址到显存16的物理地址映射关系写入GPU 12的MMU映射表;
S76、图形应用程序进行缓冲区对象写入操作,即写入显存16已分配的物理空间;
S77、图形应用程序下发渲染命令以发起渲染操作;
S78、GPU 12执行渲染命令;
S79、GPU 12根据渲染命令中渲染描述符所记载的虚拟地址,通过 MMU映射表在显存16中查找实际待渲染的缓冲区对象,并执行渲染流程。
通过上述实施流程,实现了图5所述的技术方案及其示例,能够直接将缓冲区对象创建在显存16,减少了系统内存10与显存16之间的存储拷贝过程,从而提高整体性能。
需要说明的是,上述图5所示的技术方案及其示例和具体实施流程的内容,适应于显存空间足够的情况。但是对于常规的图形应用程序,例如OpenGL应用程序来说,通常会有以下几种类型的数据:顶点数据和纹理数据。而对于大型的复杂场景来说,往往可能包含数以万计的顶点数据,以及数以兆(MB)计的纹理数据。当显存16空间不足够使用的情况下,GPU 12通常会停止图形应用程序的运行,从而无法正常地进行图形处理,针对此情况,尽管目前能够通过相关技术将部分的系统内存10作为显存16使用以扩大显存空间,但是当涉及到多个应用程序并发使用GPU 12的情况下,仍旧没有一种有效的机制将当前应用程序的数据和程序放置在显存16中,因此仍然影响GPU 12在多个应用场景下的性能。根据程序局部性原理,在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。而如果将部分的系统内存10作为显存16使用,那么GPU12当前需要处理的数据很有可能仍旧存储于系统内存10中,那么GPU 12在利用该数据进行渲染的过程中仍旧需要频繁的访问总线,而且频繁的总线访问也会对CPU 6产生性能影响,从而降低整个计算装置2的系统性能。另外由于目前将部分的系统内存10作为显存16使用的方案仍旧属于基于硬件的实现方案,可以扩展的显存空间依然有限,当扩展显存使用完的时候,仍旧会导致图形应用程序无法继续执行的问题。
有鉴于此,在以上描述的技术方案的基础上,当显存16的空间不足以应对图形应用程序运行的情况下,可以将显存16内的数据搬移至系统内存10,从而为当前图形应用程序所创建的缓冲区对象在显存16内开辟一空闲空间;在一些示例中,在GPU驱动程序22基于设定的分配逻辑为所述被创建的缓冲区对象在显存16中分配物理地址之前,所述方法还包括:
GPU驱动程序22检查显存16空间的使用状态;
相应于显存16的空闲空间不足以应对图形应用程序的运行,GPU驱动程序22于系统内存10创建一缓冲区对象;
GPU驱动程序22根据当前最少使用时钟(LRU-Clock,Least Recently Used-Clock)置换算法在显存16内进行换出页的选择;
GPU驱动程序22通过直接内存存取(DMA,Direct Memory Access)方式将被选择的换出页数据由显存16搬移至系统内存10所创建的缓冲区对象;
GPU驱动程序22更新MMU中的映射表,并为被选择的换出页数据设置用于表征当前虚拟地址为系统内存10的标识;
GPU驱动程序22将被选择的换出页数据的显存空间分配至当前需要创建缓冲区对象的图形应用程序。
对于本示例,在显存16的空间不够使用的情况下,通过GPU驱动程序22主动将显存16内存储的较少使用的数据搬移至系统内存10,也可称为“显存换出”,从而为当前运行的图形应用程序创建缓冲区对象提供了足够的显存空间。具体来说,本示例的具体实施过程如图8所示,可以包括:
S81、图形应用程序通过系统调用向GPU驱动程序22申请创建缓冲区对象。
S82、GPU驱动程度22检查显存16的使用情况。
S83、若GPU驱动程序22发现显存空间不够用,则在系统内存10创建一块缓冲区对象。
S84、GPU驱动程序22使用LRU-Clock 算法进行换出页的选择;可以理解地,LRU-Clock 算法则为图8中的换出逻辑。
S85、GPU驱动程序22发起 DMA将被选择的换出页数据从显存16搬到系统内存10中所创建的缓冲区对象。
S86、GPU驱动程序22更新MMU中的映射表,并且设置表征当前被选择的换出页数据的虚拟地址在主存的标识;详细来说,地址总线的第48位为存储位置标识,其中,1表示主存,0表示显存。
S87、GPU驱动程序22将已经被置换出去的空闲的显存空间分配给申请显存的图形应用程序。
可以理解地,图8所示的流程执行完毕后,就能够以前述图7所示流程的第2步开始继续运行图形应用程序。
基于前述示例及具体实施流程,当GPU 12在执行渲染流程的过程中,若发现待处理的缓冲区对象于系统内存10中,则需要将其由系统内存10换入至显存16,也可称为“显存换入”,在一些示例中,所述方法还包括:GPU 12通过MMU获取待处理的缓冲区对象;相应于GPU 12发现待处理的缓冲区对象的虚拟地址在主存,设置一寄存器为所述待处理的缓冲区对象的虚拟地址;GPU 12产生中断信号,所述中断信号由GPU驱动程序22中的中断服务程序进行处理;GPU驱动程序22获取所述寄存器中所寄存的虚拟地址对应于系统内存10的数据和地址;GPU驱动程序22寻找显存16中的空闲空间,并发起DMA将待处理的缓冲区对象写入所述空闲空间;GPU驱动程序22更新MMU映射表,建立待处理的缓冲区对象于系统内存10的虚拟地址与被写入的显存空闲空间的物理地址之间的映射关系;GPU驱动程序22通知GPU12继续执行渲染流程。
对于上述示例,被设置的寄存器在具体实施过程中可以利用RAM_ADDR寄存器以实现通过GPU 12发出中断信号以触发GPU驱动程序22实现与系统内存10进行显存换入,保证了GPU的正常工作,详细来说,上述示例的具体实施过程如图9所示,可以包括:
S91、GPU 12运行实际的渲染程序;
S92、GPU 12通过MMU 获取缓冲区对象;
S93、GPU 12中MMU硬件模块发现缓冲区对象地址第 48 位为 1(内存在主存),设置 RAM_ADDR 寄存器为缓冲区对象地址;
S94、GPU 12产生显存换入中断;
S95、中断处理程序处理显存换入中断,获取 RAM_ADDR 寄存中GPU 虚拟地址对应的主存中数据,以及地址;
S96、GPU驱动程序22寻找显存16的空闲空间;
S97、GPU驱动程序22发起DMA 操作进行数据换入;
S98、GPU驱动程序22更新 MMU 映射表,将虚拟地址跟换入数据实际物理地址进行关联;
S99、GPU 继续进行步骤1 的渲染。
结合图3及图4所示的计算装置以及前述图5所示的方案,本发明实施例还提供了一种关于显存的管理装置,所述装置包括:CPU、图形处理器GPU以及存储有GPU驱动程序和图形应用程序的存储器;其中,
所述CPU,经配置为运行所述GPU驱动程序以执行以下步骤:
基于设定的分配逻辑为被创建的缓冲区对象在显存中分配物理空间;以及,
为所述被创建的缓冲区对象进行内存映射MMAP操作以建立所述被创建的缓冲区对象在所述显存中的物理地址与系统内存中的虚拟地址之间的映射关系;以及,
将所述映射关系写入所述GPU的内存管理单元MMU的映射表;
所述CPU,还经配置为运行所述图形应用程序以执行:通过所述GPU驱动程序将待缓冲数据,通过所述被创建的缓冲区对象写入所述显存中由所述GPU驱动程序分配的缓冲物理空间。
在一些示例中,所述CPU,还经配置为运行所述图形应用程序以执行:基于CPU的调用,向所述GPU驱动程序发出关于创建缓冲区对象的申请请求;
所述CPU,还经配置为运行所述GPU驱动程序以执行基于所述申请请求处理所述被创建的缓冲区对象。
在一些示例中,所述CPU,还经配置为运行所述图形应用程序以执行:通过所述GPU驱动程序向所述GPU发出渲染操作指令;
所述GPU,经配置为执行以下步骤:
基于所述渲染操作指令中描述符从MMU所存储映射表中查找所述被创建的缓冲区对象于所述显存中的物理地址;其中,所述描述符包括关于所述被创建的缓冲区对象于所述系统内存中的虚拟地址;以及,
根据查找到的物理地址从所述显存中读取所述被创建的缓冲区对象,并根据所述被创建的缓冲区对象执行渲染流程。
在一些示例中,所述CPU,还经配置为运行所述GPU驱动程序以执行以下步骤:
检查显存空间的使用状态;以及
相应于所述显存的空闲空间不足以应对所述图形应用程序的运行,于系统内存创建一缓冲区对象;以及,
根据当前最少使用时钟LRU-Clock置换算法在所述显存内进行换出页的选择;以及,
通过直接内存存取DMA方式将被选择的换出页数据由所述显存搬移至所述系统内存所创建的缓冲区对象;以及,
更新MMU中的映射表,并为所述被选择的换出页数据设置用于表征当前虚拟地址为系统内存的标识;以及,
将所述被选择的换出页数据的显存空间分配至当前需要创建缓冲区对象的图形应用程序。
在一些示例中,所述GPU,还经配置以执行以下步骤:
通过MMU获取待处理的缓冲区对象;以及,
相应于所述GPU发现所述待处理的缓冲区对象的虚拟地址在主存,设置一寄存器为所述待处理的缓冲区对象的虚拟地址;以及,
产生中断信号,所述中断信号通过CPU运行GPU驱动程序中的中断服务程序进行处理;
所述CPU,还经配置为运行所述GPU驱动程序执行以下步骤:
获取所述寄存器中所寄存的虚拟地址对应于所述系统内存的数据和地址;以及,
寻找所述显存中的空闲空间,并发起DMA将待处理的缓冲区对象写入所述空闲空间;以及,
更新MMU映射表,建立所述待处理的缓冲区对象于所述显存的虚拟地址与被写入的显存空闲空间的物理地址之间的映射关系;以及,
通知所述GPU继续执行所述渲染流程。
可以理解地,上述关于显存的管理装置可以为图3或图4所示计算装置中的一部分,因此,关于显存的管理装置中各部件的具体实施说明,参见图3或图4中的相应阐述,在此不做赘述。
在上述一或多个实例或示例中,所描述的功能可实施于,所描述功能可实施于硬件、软件、固件或其任何组合中。如果实施于软件中,那么可将功能作为一或多个指令或代码存储在计算机可读媒体上或经由计算机可读媒体传输。计算机可读媒体可包含计算机数据存储媒体或通信媒体,通信媒体包含促进将计算机程序从一处传递到另一处的任何媒体。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本发明中描述的技术的指令、代码和/或数据结构的任何可用媒体。举例来说且非限制,此类计算机可读媒体可包括U盘、移动硬盘、RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁性存储装置,或可用于运载或存储呈指令或数据结构的形式的所要程序代码且可由计算机存取的任何其它媒体。并且,任何连接被恰当地称作计算机可读媒体。举例来说,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)或例如红外线、无线电和微波等无线技术从网站、服务器或其它远程源传输软件,那么同轴电缆、光纤电缆、双绞线、DSL或例如红外线、无线电和微波等无线技术包含于媒体的定义中。如本文中所使用,磁盘和光盘包含压缩光盘(CD)、激光光盘、光学光盘、数字多功能光盘(DVD)、软性磁盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光以光学方式再现数据。以上各项的组合也应包含在计算机可读媒体的范围内。
代码可由一或多个处理器执行,所述一或多个处理器例如是一或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA)或其它等效的可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。因此,如本文中所使用的术语“处理器”和“处理单元”可指前述结构或适于实施本文中所描述的技术的任何其它结构中的任一者。另外,在一些方面中,本文中所描述的功能性可在经配置用于编码和解码的专用硬件和/或软件模块内提供,或者并入在组合式编解码器中。而且,所述技术可完全实施于一或多个电路或逻辑元件中。
本发明实施例的技术可实施于各种各样的装置或设备中,所述装置或设备包含无线手持机、集成电路(IC)或一组IC(即,芯片组)。本发明中描述各种组件、模块或单元是为了强调经配置以执行所公开的技术的装置的功能方面,但未必需要由不同硬件单元实现。实际上,如上文所描述,各种单元可结合合适的软件和/或固件组合在编码解码器硬件单元中,或者通过互操作硬件单元的集合来提供,所述硬件单元包含如上文所描述的一或多个处理器。
已描述了本发明的各种方面。这些和其它实施例在所附权利要求书的范围内。需要说明的是:本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。