基于GPU直接存储器访问的显示加速方法、装置及介质与流程

未命名 10-08 阅读:126 评论:0

基于gpu直接存储器访问的显示加速方法、装置及介质
技术领域
1.本发明实施例涉及窗口图形系统技术领域,尤其涉及一种基于gpu直接存储器访问的显示加速方法、装置及介质。


背景技术:

2.窗口系统作为操作系统中图形显示的主要服务,负责将各个图形应用程序的窗口渲染数据显示到最终的显示器上,每个图形应用程序作为客户端,与窗口系统交互、配合以生成渲染结果。linux系统中有很多窗口系统的实现,如x window system、wayland、android surfaceflinger等,目前主流的窗口系统协议是用于x window system的x11和用于wayland窗口系统的wayland,两者的差别在于:基于wayland协议的架构中省去了x11中x server作为中间传递的过程,直接由合成器,即compositor去负责显示,因此,无论是x11还是wayland,均需要经过compositor将每个客户端的窗口进行合成,当混合完成之后,最终当前帧要显示的内容即图片,已经放置在了一块显存的存储空间中了,此时只需要将已存储到所述显存的存储空间中的各客户端的渲染结果经过混合后的合成结果数据搬运到显示处理器要读取的帧缓冲中即可,通常的做法是x server或者wayland会发起一次显存拷贝,将混合后的内容,拷贝到帧缓冲,即framebuffer,同步等待拷贝完成。以wayland为例,目前所述显存拷贝通常是由合成器在cpu侧完成,由于显存拷贝和渲染同步完成,将会阻塞下一帧的渲染并且同时占用cpu的资源,因此,上述技术方案在进行图形绘制的过程中,无法发挥gpu并行处理数据的优势,导致窗口系统的性能低下。


技术实现要素:

3.有鉴于此,本发明实施例期望提供一种基于gpu直接存储器访问的显示加速方法、装置及介质,能够提升系统整体的显示帧率,从而提高gpu系统的吞吐量并减少cpu的消耗。
4.本发明实施例的技术方案是这样实现的:第一方面,本发明实施例提供一种基于gpu直接存储器访问的显示加速方法,包括:cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。
5.第二方面,本发明实施例提供一种基于gpu直接存储器访问的显示加速装置,所述加速装置包括:渲染部分、合成部分、拷贝部分以及获得部分;其中,所述渲染部分,经配置为cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;所述合成部分,经配置为cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;所述拷贝部分,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;所述获得部分,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。
6.第三方面,本发明实施例提供一种计算设备,所述计算设备包括:通信接口,存储器和处理器;各个组件通过总线系统耦合在一起;其中,所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;所述存储器,用于存储能够在所述处理器上运行的计算机程序;所述处理器,用于在运行所述计算机程序时,执行第一方面所述基于gpu直接存储器访问的显示加速方法的步骤。
7.第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有基于gpu直接存储器访问的显示加速程序,所述基于gpu直接存储器访问的显示加速程序被至少一个处理器执行时实现第一方面所述基于gpu直接存储器访问的显示加速方法的步骤。
8.本发明实施例提供了一种基于gpu直接存储器访问的显示加速方法、装置及介质,通过cpu向gpu发送渲染指令并通过gpu加速将各图形客户端窗口系统的渲染结果执行合成以获取到当前帧的合成结果并存储到显存的第一存储空间,在所述当前帧的合成结果存储到显存的第一存储空间后,所述cpu侧的合成器向gpu发起dma请求以拷贝所述当前帧的合成结果至帧缓存,同时cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果,由于所述当前帧的合成结果的拷贝是在gpu侧完成的,因此,不需要占用cpu的资源,减少了对cpu的消耗。通过该技术方案实现了渲染流程和拷贝流程的并行执行,提升了系统整体的显示帧率,从而提高了gpu的吞吐量。
附图说明
9.图1为本发明实施例提供的计算设备的组成示意图;图2为基于x11协议的窗口系统的架构图;图3为基于wayland协议的窗口系统的架构图;图4为现有技术提供的一种以同步方式实现显存拷贝和渲染的流程图;图5为本发明实施例提供的一种基于gpu直接存储器访问的显示加速方法流程图;
图6为本发明实施例提供的一种以异步方式实现显存拷贝和渲染的流程图;图7为本发明实施例提供的一种基于gpu直接存储器访问的显示加速方法的详细流程图;图8为本发明实施例提供的一种基于gpu直接存储器访问的显示加速装置示意图。
具体实施方式
10.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
11.参见图1,其示出了能够实现本发明实施例技术方案的计算设备100的组成示意图,需注意,图1所示出的计算设备是可能的设备的仅一个示例,并且可根据需要在各种系统中的任一设备中实现本发明的实施方案。该计算设备100的组成具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(pda)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。如图1所示,计算设备100的组成可以包括中央处理器(central processing unit,cpu)10、图形处理器(graphic processing unit,gpu)20、存储器30,还包括显示控制器40、显示器41以及通信接口50。显示控制器40可为与gpu20相同的集成电路(integrated circuit,ic)的部分,也可在包含gpu 20的一或多个ic的外部或可形成于在包含gpu 20的ic外部的ic中。
12.具体来说,cpu 10可包括控制计算设备100运算的通用或专用处理器,其经配置以处理供执行的计算机程序的指令。用户可经由通信接口50与耦合到计算设备100的另一输入装置(未图示)例如:轨迹球、键盘、鼠标、麦克风、触摸垫、触摸屏以及其他类型的装置,例如交换机接口,将输入提供给计算设备100组成中的cpu 10,以使得cpu10执行一或多个软件应用程序的指令。在cpu 10上执行的应用程序可包括图形用户接口(graphic user interface,gui)应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序或使用2d、3d图形渲染应用程序等,本发明实施例以执行图形渲染应用程序为例,所述图形渲染应用程序也可以简称为应用程序或程序,如图1中所示的应用程序11。此外,cpu 10上执行的图形渲染应用程序可包含一或多个图形渲染指令(也可以理解为待渲染的画面帧中包含一或多个所述图形),所述图形渲染指令可符合图形应用程序编程接口(application programming interface,api),例如,开放式图形库api(opengl api)、开放式图形库嵌入系统(opengl es)api、direct3d api、x3dapi、renderman api、webgl api、开放式计算语言(opencltm)、renderscript或任何其他异构计算api或任何其他公用或专有标准图形或计算api,本发明下面的描述中将以opengl api为例进行说明。
13.gpu 20可经配置以执行图形运算,从而将一或多个图形图元渲染到显示器41进行展示。可以理解为,cpu10通过控制gpu驱动程序12,将渲染指令翻译为gpu 20可读的渲染命令,然后gpu 20根据收到的一或多个图形渲染命令,包括但不限于图形命令和图形数据,所述图形数据可包含绘制命令、状态信息、图元信息、纹理信息等,以使得gpu 20执行所述图
形渲染命令中的一些或者全部,从而将一或多个图形图元通过窗口系统进行渲染并通过合成器13通知gpu20加速进行合成,将当前帧的渲染结果存放在显存21中,然后通过显示控制器40将当前帧的渲染结果在显示器41上展示出来。gpu 20内部结构包括但不限于显存21、处理器集群22。在本发明实施例中显存21可为gpu20的一部分。因此,gpu 20可在不使用总线的情况下从显存21读取数据或将数据写入到显存21。换句话说,gpu 20可使用本地存储装置而不是芯片外存储器在本地处理数据,此类显存21可被称作芯片上存储器。这允许gpu 20通过消除经由总线读取和写入数据并以更高效的方式操作,其中,经由总线操作可经历繁重的总线业务。在一些示例中,gpu 20可不包含单独的存储器,而是经由总线利用外置的存储器30;此外,所述显存21还可以包括帧缓存23,所述帧缓存23可为显存21的一部分或可与显存21分离,本发明实施例以所述帧缓存23为显存21的一部分为例。所述帧缓存23可存储渲染图像数据,例如像素数据,其具体存储的数据为每个像素的红色、绿色、蓝色、α(rgba)分量,其中“rgb”分量对应于色彩值,并且“a”分量对应于目的地α值(例如,用于图像合成的不透明度值)。在一些示例中,所述帧缓存23还可被称为帧缓冲器(frame buffer)或输出缓冲器,用于预览所述画面帧的渲染效果,也可以理解为预览所述画面帧的渲染效果可以通过frame buffer机制实现,帧缓冲器是内核空间中的一种驱动程序接口,它本身不具备任何运算数据的能力,中间不会对数据做处理,但其需要显卡驱动的支持。所述处理器集群22,用于执行图形处理管线,以便对图形渲染命令进行解码,并对图形处理管线进行配置以执行图形渲染命令中所指定的操作。在一些情况下,gpu 20可内置有高度并行结构,其提供比cpu 10高效的对复杂图形相关运算的处理。举例来说,gpu 20可包含经配置以并行方式对多个顶点或像素进行运算的多个处理元件。在一些情况下,gpu 20的高度并行性质允许gpu 20比使用cpu 10更快速地将图形图像(例如,gui和二维(2d)和/或三维(3d)图形场景)绘制到显示器41上。在一些情况下,可将gpu20集成到目标设备的母板中。在其他情况下,gpu 20可存在于图形卡上,所述图形卡安装在目标设备的母板中的端口中,或可以其它方式并入在经配置以与目标设备互操作的外围装置内。gpu 20可包含一或多个处理器,例如一或多个微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)或其他等效的集成或离散逻辑电路。gpu 20还可包含一或多个处理器核心,使得gpu 20可被称作多核处理器。
14.存储器30,经配置用于存储能够在cpu 10上运行的应用程序指令、gpu 20执行需要的图形数据以及其运行结果数据。例如,gpu 20可将完全形成的图像存储在存储器30中。存储器30可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(ram)、静态ram(sram)、动态ram(dram)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、快闪存储器、磁性数据媒体或光学存储媒体。前述显存21的类型参见所述存储器30的类型,此处不再赘述。显示控制器40可从存储器30检索图像且输出使显示器41的像素照亮以显示所述图像的值。显示器41可为计算设备100的显示器,其显示由gpu20产生的图形图像内容。显示器41可为液晶显示器(lcd)、有机发光二极管显示器(oled)、阴极射线管(crt)显示器、等离子显示器或另一类型的显示装置。
15.基于gpu 20执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元通过以应用程序作为客户端的窗口系统上进行渲染并通过gpu 20加速进行合成后存放在显存21的存储空间中,然后在显示器41上展示出来。所述窗口系统是gui的一种,也是当前
计算机设备、智能设备广泛使用的一种,通常以wimp(windows、icons、menus以及pointer)的形式提供人机交互接口。如图2所示,其示出了基于x11协议的窗口系统的架构图,所述x即为xwindow system的简称,所述x window system是一种基于位图绘制的类unix的窗口图形系统,它提供了基本的图形框架协议,已经被普遍应用于linux、unix等操作系统中,用于在屏幕上描绘、呈现图像与移动程序窗口,同时也受理、运行及管理与鼠标、键盘、触摸屏等输入设备的交互程序。所述x window system一般都使用client-server架构,所述server管理所有输入设备以及用于输出的显示设备,图形应用程序作为所述server的一个client,在窗口中运行并绘制gui,具体的逻辑调用流程如图2中数字序号顺序



所示,首先从键盘或者鼠标等外设输入内容到窗口系统时,内核(kernel)接收到输入事件,通过事件设备(evdev)输入驱动程序传递给xserver;接着,所述x server传递到相应的客户端程序(x client);随后,所述客户端程序(x client)根据输入作出响应,再将新的绘制结果传递给所述x server;然后,所述x server传递给合成器(compositor)来混合本次需要显示的所有窗口的内容,并且compositor在完成之后告知xserver;最后x server调用内核模型设置(kernel model set,kms)接口来进行显示,其中,所述kms是一种内核提供给应用层的有显示功能的库,用于控制显示设备属性的内核驱动,如显示分辨率等。对于基于wayland协议的窗口系统,如图3所示,与图2中所述基于x11协议的窗口系统相比,将waylandcompositor直接替换x11中的x server,其省略了compositor作为中间传递的过程,所述compositor直接负责显示。
16.结合图2和图3所示的窗口系统的架构图,可知,无论是基于x11还是wayland协议,均需要经过合成器将每个图形客户端窗口系统渲染的当前帧的渲染结果进行合成。当合成完成之后,当前帧要显示的内容,即图片的渲染数据或称之为合成结果已经放置在一块显存的存储空间中了,例如放置在显存的第一存储空间中。此时只需x server或者合成器发起一次显存拷贝,即将所述显存的第一存储空间中的当前帧的合成结果拷贝到如图1所示的显示控制器40要读取的帧缓存23中并同步等待拷贝完成以将当前帧的渲染数据在显示器上展示。以wayland为例,所述显存拷贝目前的实现方式是通过合成器在cpu侧拷贝,参见图4,其示出了现有技术提供的一种以同步方式实现显存拷贝和渲染的流程图,当执行显存拷贝时,下一帧的渲染暂停,以2个客户端为例,图形客户端1和图形客户端2完成渲染后,分别将渲染结果存储到显存对应的缓冲区中,例如显存的第二存储空间,合成器将需要显示的所有图形客户端的窗口的渲染结果执行合成或混合,即将所述图形客户端1和图形客户端2的渲染结果输入到合成器并进行混合后生成合成结果,即当前帧需要显示的渲染数据写入到显存的第一存储空间中,合成器向gpu发送直接存储器访问(direct memory access,dma)请求,所述gpu响应于所述dma请求,按照其提供的显存到显存的直接存储器访问机制,将所述合成结果拷贝到如图1中的帧缓存中。当同步显存拷贝完成后,合成器返回到渲染流程并通知各图形客户端继续下一帧的渲染。
17.上述技术方案存在以下问题,一方面显存拷贝在cpu侧完成会占用cpu的资源,另一方面由于显存拷贝和下一帧渲染是同步操作的,会阻塞下一帧的渲染,从而导致gpu的吞吐量较低。基于此,本发明提出一种基于gpu直接存储器访问的显示加速的技术方案,通过该技术方案,将显存拷贝和下一帧渲染异步实现,不阻塞后续的渲染流程,从而可以提高系统的显示帧率以及gpu的吞吐量并减少cpu资源的消耗。参见图5,其示出了本发明实施例提
供的一种基于gpu直接存储器访问的显示加速方法,该方法应用于具有cpu和gpu的计算设备,该方法包括:s501:cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;s502:cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;s503:在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;s504:在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。
18.根据上述方案的描述,本发明实施例通过cpu向gpu发送渲染指令并通过gpu加速将各图形客户端窗口系统的渲染结果执行合成以获取到当前帧的合成结果并存储到显存的第一存储空间,在所述当前帧的合成结果存储到显存的第一存储空间后,所述cpu侧的合成器向gpu发起dma请求以拷贝所述当前帧的合成结果至帧缓存,同时cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果,由于所述当前帧的合成结果的拷贝是在gpu侧完成的,因此,不需要占用cpu的资源,减少了对cpu的消耗。通过该技术方案实现了渲染流程和拷贝流程的并行执行,提升了系统整体的显示帧率,从而提高了gpu的吞吐量。
19.针对图5所示的技术方案,在一些可能的实现方式中,所述cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果,包括:接收输入设备通过内核发送的图形渲染请求;将所述图形渲染请求发送给相应的多个图形客户端的窗口系统并调用图形渲染函数执行渲染以获取所述多个图形客户端窗口的渲染结果。
20.对于上述实现方式,具体来说,结合图1和图3,以wayland为例,在实际应用中,kernel获取用户通过鼠标、键盘或者触摸屏等输入设备输入的事件,例如图形渲染请求,通过驱动设备或驱动程序,如图1中的gpu驱动程序,将不同输入设备特定的事件协议转换为linux evdev输入标准事件,然后通过evdev输入驱动程序将其发送给wayland compositor,wayland compositor收到该图形渲染请求消息后,确定该事件影响哪个窗口系统,并将其发送到相应图形客户端的窗口系统。需要说明的是,由于wayland compositor是总控制中心,用于管理窗口的层级关系、动画效果,并且明确该坐标产生的鼠标点击信息的发送目标,因此,所述wayland compositor收到消息后,立刻能明确将该消息转发至目标客户端的窗口系统。相应的wayland client将在自身的窗口系统上自行进行绘制而不需要再请求所述wayland compositor的许可,即直接渲染机制。可以理解地,所述wayland client是自行完成渲染工作。在所述wayland client完成渲染后,只需要通知所述wayland compositor渲染已完成并将渲染结果存储到对应的显存的存储空间,例如,所述第二存储空间,因此,整个过程变得十分简单而且高效。
21.针对图5所示的技术方案,在一些可能的实现方式中,所述cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间,包括:将多个图形客户端窗口系统生成的当前帧的渲染结果存储到显存的第二存储空间;通过gpu加速将所述显存的第二存储空间中的所述当前帧的渲染结果进行合成以生成当前帧的合成结果并存储到显存的第一存储空间。
22.对于上述实现方式,在一些示例中,所述通过gpu加速将所述显存的第二存储空间中的所述当前帧的渲染结果进行合成以生成当前帧的合成结果并存储到显存的第一存储空间,包括:向显存发送申请缓冲区的请求以获取前缓冲区和后缓冲区;在前一帧的合成结果未完成全部拷贝到帧缓存时,将所述当前帧的合成结果存放到所述后缓冲区中。
23.对于上述示例,具体来说,为了提高gpu的显示帧率,可以为各图形客户端窗口系统渲染的数据,通过合成器混合后的合成结果在显存中的存放申请两个缓冲区,分为前缓冲区和后缓冲区,当前一帧的合成结果还未完成全部拷贝时,可以使用后缓冲区来放置当前帧的合成结果,从而减少系统阻塞的发生。
24.针对图5所示的技术方案,在一些可能的实现方式中,所述在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存,包括:cpu通过gpu内核驱动程序的接口向gpu发送dma请求;根据所述dma请求,通过dma执行单元从显存的第一存储空间中读取所述当前帧的合成结果并存储到dma通道中;将所述当前帧的合成结果通过所述dma通道拷贝至帧缓存。
25.对于上述实现方式,在一些示例中,所述根据所述dma请求,通过dma执行单元从显存的第一存储空间中读取所述当前帧的合成结果并存储到dma通道中,包括:根据硬件配置及所述当前帧的合成结果的数据量确定一个或多个dma通道;设置各dma通道的优先级并基于所述各dma通道的优先级处理所述dma请求;根据所述dma请求,将所述当前帧的合成结果分别存储到相应的dma通道中。
26.对于上述示例,具体来说,所述dma是将渲染结果数据从显存的一个地址空间复制到另一个地址空间,实现数据的直接传输,其可以提供外设设备和显存、或者显存和显存、或者显存和外设设备之间的高速数据传输。当cpu初始化dma传输动作时,具体来说是cpu侧的合成器来完成所述初始化dma传输动作,对于数据传输是由gpu中的dma执行单元来完成的。所述dma传输无需cpu直接控制传输,也没有中断处理方式的保留现场和恢复现场过程,通过硬件为随机存取存储器和输入输出设备提供了一条直接传输数据的通道并且不占用cpu的资源。对于基于dma传输的参数一般包括数据的源地址、数据的目的地址、传输的数据量的多少以及传输次数,而对于通道个数的设定是根据具体的硬件配置和需要传输的数据量大小决定的,对于需要采用多通道拷贝的场景,每个通道均直接连接专用的硬件dma请求,触发通道启动工作也可以采用软件方式触发,当合成器向gpu发送dma请求时,gpu中的
dma执行单元根据确定的通道优先级来处理所述dma请求。在一些示例中,每个dma请求均对应一个数据流,例如,所述dma请求可以从8个通道中根据其优先级进行选择通过哪个通道进行数据传输。
27.对于上述实现方式,在一些示例中,所述将所述当前帧的合成结果通过所述dma通道拷贝至帧缓存,包括:基于gpu的显存到显存的直接存储器访问方式,通过多通道并发方式将所述当前帧的合成结果拷贝至帧缓存。
28.对于上述示例,对于采用多通道的显存拷贝可被视为并行进行,每个通道负责一部分所述当前帧的合成结果的拷贝。具体来说,参见图6,其示出了本发明实施例提供的一种以异步方式实现显存拷贝和渲染的流程图,gpu对各图形客户端窗口系统的渲染结果完成合成后存储到显存的第一存储空间中;通过gpu内部驱动接口向gpu中的dma执行单元发送dma请求,根据所述dma请求采用多通道传输,例如dma channel 1、dma channel 2等,具体可以根据硬件配置和需要传输的当前帧的合成结果数据量的大小确定通道的个数,将已存储到显存中的合成结果通过各dma通道以并行的方式拷贝至帧缓存中。也可以理解为,通过dma传输的数据量的大小是可编程的,但是最大值为65535。当所述拷贝动作完成后,所述dma执行单元通过gpu内核驱动接口向合成器返回dma完成通知消息;然后显示控制器读取帧缓存中的所述当前帧的合成结果并展示在显示器上。
29.针对图5所示的技术方案,参见图7,其示出了本发明实施例提供的一种基于gpu直接存储器访问的显示加速方法的详细流程图,具体步骤如下:s701:多个图形客户端分别在自身的窗口系统渲染完成后将渲染结果存储到显存的存储空间中;具体来说,如图3所示,kernel获取用户通过鼠标、键盘或者触摸屏等输入设备输入的事件,例如图形渲染请求,通过驱动设备或驱动程序,如图1中的gpu驱动程序,将不同输入设备特定的事件协议转换为linux evdev输入标准事件,然后通过evdev输入驱动程序将其发送给wayland compositor,wayland compositor收到该图形渲染请求消息后,确定该事件影响哪个窗口系统,并将其发送到相应的图形客户端的窗口系统,所述图形客户端的窗口系统调用图形渲染函数执行渲染以获取各图形客户端的渲染结果。
30.s702:cpu向gpu下发渲染指令并通过gpu加速将所述各图形客户端的渲染结果进行合成;s703:合成完毕输出当前帧要显示的渲染数据,即合成结果;s704:通过gpu驱动接口向gpu发起dma请求以启动合成结果的拷贝操作;详细来说,所述合成器发送dma请求后,gpu中的dma执行单元与所述合成器之间的交互流程具体为接收所述合成器发送的dma请求,并根据通道的优先级处理所述dma请求,当dma执行单元开始访问发出请求的合成器时,dma执行单元立即发送一个应答信号。当从dma执行单元得到应答信号时,合成器立即释放dma请求,同时所述dma执行单元撤销应答信号,dma传输结束,如果有更多的请求时,可以启动下一个传输周期或拷贝周期。
31.s705:判断上一帧的dma是否拷贝完成,若是,跳转到步骤s707;若否,则跳转到步骤s706;s706:等待上一帧的dma拷贝任务执行完成;
s707:gpu开始执行dma拷贝操作,将显存中的合成结果拷贝至帧缓存;具体地,响应于cpu侧的合成器发起dma请求,gpu的dma执行单元执行显存拷贝,所述dma执行单元将所述合成结果从显存的第一存储空间搬送到帧缓冲存中。
32.s708:合成器发起dma请求后,即可返回渲染流程;s709:多个图形客户端开始下一帧的渲染;s710:dma执行单元在完成显存拷贝完成后,通过显示控制器展示在显示器上并向合成器发送拷贝完成通知消息;s711:合成器接收到所述拷贝完成通知消息后执行清理回调;s712:一帧数据显示完成。
33.基于前述技术方案相同的发明构思,参见图8,其示出了一种基于gpu直接存储器访问的显示加速装置800,所述加速装置800包括:渲染部分801、合成部分802、拷贝部分803以及获得部分804;其中,所述渲染部分801,经配置为cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;所述合成部分802,经配置为cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;所述拷贝部分803,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;所述获得部分804,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。
34.在一些示例中,所述渲染部分801,经配置为:接收输入设备通过内核发送的图形渲染请求;将所述图形渲染请求发送给相应的多个图形客户端的窗口系统并调用图形渲染函数执行渲染以获取所述多个图形客户端窗口的渲染结果。
35.在一些示例中,所述合成部分802,经配置为:将多个图形客户端窗口系统生成的当前帧的渲染结果存储到显存的第二存储空间;通过gpu加速将所述显存的第二存储空间中的所述当前帧的渲染结果进行合成以生成当前帧的合成结果并存储到显存的第一存储空间。
36.在一些示例中,所述合成部分802,经配置为:向显存发送申请缓冲区的请求以获取前缓冲区和后缓冲区;在前一帧的合成结果未完成全部拷贝到帧缓存时,将所述当前帧的合成结果存放到所述后缓冲区中。
37.在一些示例中,所述拷贝部分803,经配置为:cpu通过gpu内核驱动程序的接口向gpu发送dma请求;
根据所述dma请求,通过dma执行单元从显存的第一存储空间中读取所述当前帧的合成结果并存储到dma通道中;将所述当前帧的合成结果通过所述dma通道拷贝至帧缓存。
38.在一些示例中,所述拷贝部分803,经配置为:根据硬件配置及所述当前帧的合成结果的数据量确定一个或多个dma通道;设置各dma通道的优先级并基于所述各dma通道的优先级处理所述dma请求;根据所述dma请求,将所述当前帧的合成结果分别存储到相应的dma通道中。
39.在一些示例中,所述拷贝部分803,经配置为:基于gpu的显存到显存的直接存储器访问方式,通过多通道并发方式将所述当前帧的合成结果拷贝至帧缓存。
40.可以理解地,上述一种基于gpu直接存储器访问的显示加速装置800的示例性技术方案,与前述一种基于gpu直接存储器访问的显示加速方法的技术方案属于同一构思,因此,上述一种基于gpu直接存储器访问的显示加速装置800的技术方案未详细描述的细节内容,均可以参见前述一种基于gpu直接存储器访问的显示加速方法的技术方案的描述,本发明实施例对此不做赘述。
41.可以理解地,图5所示的技术方案及其示例既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现,本发明实施例是以软件功能模块的方式实现。如果以软件功能部分的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有基于gpu直接存储器访问的显示加速的程序,所述基于gpu直接存储器访问的显示加速的程序被至少一个处理器执行时实现上述技术方案中所述一种基于gpu直接存储器访问的显示加速方法的步骤。
42.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

技术特征:
1.一种基于gpu直接存储器访问的显示加速方法,其特征在于,该方法应用于具有cpu和gpu的计算设备,包括:cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。2.根据权利要求1所述方法,其特征在于,所述cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果,包括:接收输入设备通过内核发送的图形渲染请求;将所述图形渲染请求发送给相应的多个图形客户端的窗口系统并调用图形渲染函数执行渲染以获取所述多个图形客户端窗口的渲染结果。3.根据权利要求1所述方法,其特征在于,所述cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间,包括:将多个图形客户端窗口系统生成的当前帧的渲染结果存储到显存的第二存储空间;通过gpu加速将所述显存的第二存储空间中的所述当前帧的渲染结果进行合成以生成当前帧的合成结果并存储到显存的第一存储空间。4.根据权利要求3所述方法,其特征在于,所述通过gpu加速将所述显存的第二存储空间中的所述当前帧的渲染结果进行合成以生成当前帧的合成结果并存储到显存的第一存储空间,包括:向显存发送申请缓冲区的请求以获取前缓冲区和后缓冲区;在前一帧的合成结果未完成全部拷贝到帧缓存时,将所述当前帧的合成结果存放到所述后缓冲区中。5.根据权利要求1所述方法,其特征在于,所述在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存,包括:cpu通过gpu内核驱动程序的接口向gpu发送dma请求;根据所述dma请求,通过dma执行单元从显存的第一存储空间中读取所述当前帧的合成结果并存储到dma通道中;将所述当前帧的合成结果通过所述dma通道拷贝至帧缓存。6.根据权利要求5所述方法,其特征在于,所述根据所述dma请求,通过dma执行单元从显存的第一存储空间中读取所述当前帧的合成结果并存储到dma通道中,包括:根据硬件配置及所述当前帧的合成结果的数据量确定一个或多个dma通道;设置各dma通道的优先级并基于所述各dma通道的优先级处理所述dma请求;
根据所述dma请求,将所述当前帧的合成结果分别存储到相应的dma通道中。7.根据权利要求5所述方法,其特征在于,所述将所述当前帧的合成结果通过所述dma通道拷贝至帧缓存,包括:基于gpu的显存到显存的直接存储器访问方式,通过多通道并发方式将所述当前帧的合成结果拷贝至帧缓存。8.一种基于gpu直接存储器访问的显示加速装置,其特征在于,所述加速装置包括:渲染部分、合成部分、拷贝部分以及获得部分;其中,所述渲染部分,经配置为cpu通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;所述合成部分,经配置为cpu向gpu发送渲染指令并通过gpu加速将所述多个图形客户端窗口的渲染结果进行合成,获得所述当前帧的合成结果,并将所述当前帧的合成结果存储到显存的第一存储空间;所述拷贝部分,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu向gpu发送dma请求;其中,所述dma请求用于拷贝所述当前帧的合成结果至帧缓存;所述获得部分,经配置为在所述当前帧的合成结果存储到显存的第一存储空间后,cpu通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过gpu加速将所述多个图形客户端窗口系统针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。9.一种计算设备,其特征在于,所述计算设备包括:通信接口,处理器,存储器;各个组件通过总线系统耦合在一起;其中,所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;所述存储器,用于存储能够在所述处理器上运行的计算机程序;所述处理器,用于在运行所述计算机程序时,执行权利要求1至7任一项所述基于gpu直接存储器访问的显示加速方法的步骤。10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有基于gpu直接存储器访问的显示加速的程序,所述基于gpu直接存储器访问的显示加速的程序被至少一个处理器执行时实现权利要求1至7任一项所述基于gpu直接存储器访问的显示加速方法的步骤。

技术总结
本发明实施例公开了一种基于GPU直接存储器访问的显示加速方法、装置及介质,该方法包括:CPU通过多个图形客户端窗口系统针对当前帧进行渲染,获得所述多个图形客户端窗口的渲染结果;CPU向GPU发送渲染指令并通过GPU加速将所述多个图形客户端窗口的渲染结果进行合成,获得合成结果,并存储到显存的第一存储空间;在存储到显存的第一存储空间后,CPU向GPU发送DMA请求;在存储到显存的第一存储空间后,CPU通过所述多个图形客户端窗口系统对下一帧进行渲染以及通过GPU加速将针对所述下一帧的渲染结果进行合成,获得所述下一帧的合成结果。通过该技术方案能够提高GPU系统的吞吐量并减少CPU的消耗。并减少CPU的消耗。并减少CPU的消耗。


技术研发人员:李通
受保护的技术使用者:西安芯云半导体技术有限公司
技术研发日:2023.08.30
技术公布日:2023/10/5
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐