CN116909511A - 提升gpu双缓冲显示效率的方法、装置及存储介质 - Google Patents
提升gpu双缓冲显示效率的方法、装置及存储介质 Download PDFInfo
- Publication number
- CN116909511A CN116909511A CN202311174014.0A CN202311174014A CN116909511A CN 116909511 A CN116909511 A CN 116909511A CN 202311174014 A CN202311174014 A CN 202311174014A CN 116909511 A CN116909511 A CN 116909511A
- Authority
- CN
- China
- Prior art keywords
- buffer
- buffer area
- copy
- function
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000000872 buffer Substances 0.000 title claims abstract description 173
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000012545 processing Methods 0.000 title description 17
- 238000009877 rendering Methods 0.000 claims abstract description 88
- 229910052754 neon Inorganic materials 0.000 claims abstract description 37
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 claims abstract description 37
- 230000006870 function Effects 0.000 claims description 76
- 230000009977 dual effect Effects 0.000 claims description 9
- 238000004891 communication Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000011960 computer-aided design Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/14—Digital output to display device ; Cooperation and interconnection of the display device with other functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本发明实施例公开了一种提升GPU双缓冲显示效率的方法、装置及存储介质,该方法可以包括:将当前帧的渲染结果存储到第一缓冲区;将所述第一缓冲区与第二缓冲区进行交换;在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。通过该技术方案,在嵌入式使用场景下能够节省大数据拷贝时的时间并提升第一缓冲区和第二缓冲区交换时GPU的显示帧率。
Description
技术领域
本发明实施例涉及计算机图像处理技术领域,尤其涉及一种提升图形处理器(Graphic Processing Unit,GPU)双缓冲显示效率的方法、装置及存储介质。
背景技术
现有的GPU双缓冲显示方案是调用eglSwapBuffers函数内部的系统内存拷贝(memcpy)函数来实现后端缓冲区中渲染结果拷贝至前端缓冲区。具体来说,目前双缓冲机制的原理为:在GPU渲染完成后,所有渲染操作对应的渲染结果将被保存在GPU的显存中,即后端缓冲区。通过调用所述eglSwapBuffers函数将所述后端缓冲区交换至前端缓冲区。在调用eglSwapBuffers函数进行交换的过程中,通过内存拷贝(memcpy)函数将所述后端缓冲区的渲染结果整体复制到所述前端缓冲区中,以使得所述前端缓冲区的渲染结果展示在屏幕上。其中,所述前端缓冲区和所述后端缓冲区所负责的功能各不相同,所述前端缓冲区中存放的是当前帧需要在屏幕上显示的像素;所述后端缓冲区中存放的是GPU经过一系列渲染操作后像素的RGB数据,即渲染结果,是下一帧需要显示的结果。在屏幕显示前,拷贝所述后端缓冲区中的渲染结果至所述前端缓冲区,将最新一帧的渲染数据展示到显示器的屏幕上。
现有技术方案存在如下缺陷:系统内存拷贝函数在大数据量拷贝时会非常耗时,在进行前后端缓冲区交换时,极大地影响GPU的显示帧率。
发明内容
有鉴于此,本发明实施例期望提供一种提升GPU双缓冲显示效率的方法、装置及存储介质,能够节省大数据量拷贝时的时间并提升前端缓冲区和后端缓冲区交换时GPU的显示帧率。
本发明实施例的技术方案是这样实现的:
第一方面,本发明实施例提供一种提升GPU双缓冲显示效率的方法,包括:
将当前帧的渲染结果存储到第一缓冲区;
将所述第一缓冲区与第二缓冲区进行交换;
在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
第二方面,本发明实施例提供一种提升GPU双缓冲显示效率的装置,所述装置包括:存储部分、交换部分、拷贝部分以及展示部分;其中,
所述存储部分,经配置为将当前帧的渲染结果存储到第一缓冲区;
所述交换部分,经配置为将所述第一缓冲区与第二缓冲区进行交换;
所述拷贝部分,经配置为在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
所述展示部分,经配置为将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
第三方面,本发明实施例提供了一种计算设备,所述计算设备包括:通信接口,存储器和处理器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行第一方面所述提升GPU双缓冲显示效率的方法的步骤。
第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有提升GPU双缓冲显示效率的程序,所述提升GPU双缓冲显示效率的程序被至少一个处理器执行时实现第一方面所述提升GPU双缓冲显示效率的方法的步骤。
本发明实施例提供了一种提升GPU双缓冲显示效率的方法、装置及存储介质,通过GPU经过一系列渲染操作后将当前帧像素的RGB数据即渲染结果存放到第一缓冲区,将所述第一缓冲区与第二缓冲区进行交换,并在交换过程中,将所述当前帧的渲染结果通过ARM平台的neon指令拷贝到第二缓冲区,然后将所述第二缓冲区中的渲染结果发送至显示器以展示到屏幕上,通过该技术方案可以减少大数据量拷贝时的时间并提升所述第一缓冲区和第二缓冲区交换时GPU的显示帧率。
附图说明
图1为本发明实施例提供的计算机系统组成示意图;
图2为一种前后端缓冲区交换时的内存拷贝流程图;
图3为本发明实施例提供的一种提升GPU双缓冲显示效率的方法流程图;
图4为本发明实施例提供的双缓冲交换流程图;
图5为本发明实施例提供的前后端缓冲交换时的内存拷贝流程图;
图6为本发明实施例提供的一种提升GPU双缓冲显示效率的装置示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
参见图1,其示出了能够实现本发明实施例技术方案的计算机系统100的组成示意图,需注意,图1所示出的计算机系统是可能的系统的仅一个示例,并且可根据需要在各种系统中的任一系统中实现本发明的实施方案。该计算机系统100的组成具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。如图1所示,计算机系统100的组成可以包括中央处理器(Central Processing Unit,CPU),比如图1中示出的CPU 10、GPU 20以及系统内存30,还包括显示控制器40、显示器41以及通信接口50。显示控制器40可为与GPU 20相同的集成电路(IntegratedCircuit,IC)的部分,也可在包含GPU20的一或多个IC的外部或可形成于在包含GPU20的IC外部的IC中。
具体来说,CPU 10可包括控制计算机系统100运算的通用或专用处理器,其经配置以处理供执行的计算机程序的指令。用户可经由通信接口50与耦合到计算机系统100的另一输入装置(未图示)例如:轨迹球、键盘、鼠标、麦克风、触摸垫、触摸屏以及其他类型的装置,例如交换机接口,将输入提供给计算机系统100组成中的CPU 10,以使得CPU 10执行一或多个软件的应用程序11的指令。在CPU 10上执行的应用程序可包括图形用户接口(Graphic User Interface,GUI)应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序或使用2D、3D图形渲染应用程序等,本发明实施例以执行图形渲染应用程序为例,所述图形渲染应用程序也可以简称为应用程序或程序。此外,CPU10上执行的图形渲染应用程序可包含一或多个图形渲染指令(也可以理解为待渲染的画面帧中包含一或多个所述图形),所述图形渲染指令可符合图形应用程序编程接口(Application Programming Interface,API),例如,开放式图形库API(OpenGL API)、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3DAPI、RenderMan API、WebGLAPI、开放式计算语言(OpenCLTM)、RenderScript或任何其它异构计算API或任何其它公用或专有标准图形或计算API,本发明下面的描述中将以OpenGL ES为例进行说明。
GPU 20可经配置以执行图形运算,从而将一或多个图形图元渲染到显示器41进行展示。可以理解为,CPU 10通过控制GPU驱动程序12,将渲染指令翻译为GPU 20可读的渲染命令,然后GPU 20根据收到的一或多个图形渲染命令,包括但不限于图形命令和图形数据,所述图形数据可包含绘制命令、状态信息、图元信息、纹理信息等,以使得GPU20执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元进行渲染并在显示器41上展示出来。GPU 20内部结构包括但不限于图形存储器21、处理器集群22。在本发明实施例中,图形存储器21可为GPU 20的一部分。因此,GPU 20可在不使用总线的情况下从图形存储器21读取数据且将数据写入到图形存储器21。换句话说,GPU 20可使用本地存储装置而不是芯片外存储器在本地处理数据,此类图形存储器21可被称作芯片上存储器。这允许GPU 20通过消除GPU 20经由总线读取和写入数据的需要来以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。所述图形存储器21可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。在一些示例中,GPU 20可不包含单独的存储器,而是经由总线利用外置的系统内存30。本发明实施例以GPU20经由总线利用外置的系统内存30实现数据的存储为例。所述处理器集群22,用于执行图形处理管线,以便对图形渲染命令进行解码,并对图形处理管线进行配置以执行图形渲染命令中所指定的操作。在一些情况下,GPU 20可内置有高度并行结构,其提供比CPU 10高效的对复杂图形相关运算的处理。举例来说,GPU 20可包含经配置以并行方式对多个顶点或像素进行运算的多个处理元件。在一些情况下,GPU20的高度并行性质允许GPU20比使用CPU 10更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器41上。在一些情况下,可将GPU 20集成到目标设备的母板中。在其它情况下,GPU20可存在于图形卡上,所述图形卡安装在目标设备的母板中的端口中,或可以其它方式并入在经配置以与目标设备互操作的外围装置内。GPU20可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。GPU 20还可包含一或多个处理器核心,使得GPU 20可被称作多核处理器。
系统内存30,经配置用于存储能够在CPU 10上运行的应用程序指令、GPU 20执行需要的图形数据以及其运行结果数据,例如,GPU 20可将完全形成的图像存储在系统内存30中。在一些示例中,所述系统内存30还可以包括显存31,所述显存31可存储渲染图像数据,例如像素数据,其具体存储的数据为每个像素的红色、绿色、蓝色、α(RGBA)分量,其中“RGB”分量对应于色彩值,并且“A”分量对应于目的地α值(例如,用于图像合成的不透明度值)。在一些示例中,所述显存31也可与系统内存30分离,本发明实施例以显存31与系统内存30分离为例。所述显存31也可称之为帧缓存,可以将所述显存31划分为不同的缓冲区,如图1所示的第一缓冲区32和第二缓冲区33,其中,所述第一缓冲区32用于存放GPU 20经过一系列渲染操作后像素的RGB数据,即渲染结果;所述第二缓冲区33用于存放当前帧需要在屏幕上显示的像素数据。在一些示例中,所述显存31还可被称为帧缓冲器(Framebuffer)或输出缓冲器,用于预览所述画面帧的渲染效果,也可以理解为预览所述画面帧的渲染效果可以通过Frame buffer机制实现,帧缓冲器是内核空间中的一种驱动程序接口,它本身不具备任何运算数据的能力,中间不会对数据做处理,但其需要真的显卡驱动的支持。显示控制器40可从系统内存30或显存31检索图像且输出使显示器41的像素照亮以显示所述图像的值。显示器41可为计算机系统100的显示器,其显示由GPU 20产生的图形图像内容。显示器41可为液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器或另一类型的显示装置。
结合图1所示的计算机系统100,基于GPU 20执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元进行渲染以生成当前帧的渲染结果并存储到系统内存30对应的存储空间内。对于将所述当前帧的渲染结果展示在屏幕上,目前的实现方案是双缓冲机制,在屏幕显示前,先执行将后端缓冲区和前端缓冲区进行交换,并在交换过程中,通过内存拷贝函数将所述后端缓冲区中的渲染结果拷贝至所述前端缓冲区,即将最新一帧的渲染数据展示到显示器的屏幕上。具体来说,如图2所示,其示出了一种前后端缓冲区交换时的内存拷贝流程图,GPU将所有渲染操作完成后,将渲染结果保存在GPU的后端缓冲区中,如图1中所示的第一缓冲区32,其中,所述第一缓冲区32中存放的是GPU经过一系列渲染操作后像素的RGB数据即当前帧的渲染结果,是下一帧需要显示的渲染结果;将所述下一帧需要显示的渲染结果通过eglSwapBuffers函数内部底层调用内存拷贝(memcpy)函数来实现拷贝至所述前端缓冲区中,如图1中所示的第二缓冲区33,其中,所述第二缓冲区33中存放的是需要在显示器41上显示的当前帧的像素,即当前帧的渲染结果或最新一帧的渲染结果。
需要说明的是,所述将所述下一帧需要显示的渲染结果通过eglSwapBuffers函数内部底层调用内存拷贝(memcpy)函数来实现拷贝至所述前端缓冲区中,详细来说,在调用eglSwapBuffers函数时,在eglSwapBuffers函数内部会调用内存拷贝(memcpy)函数,从而实现将所述后端缓冲区和前端缓冲区的渲染结果进行拷贝;然后通过eglSwapBuffers函数将所述前端缓冲区中的当前帧的渲染结果发送给显示器以展示在屏幕上,并继续下一帧的渲染。
对于上述实现方案,通过双缓冲机制必须要求有比单缓冲更多的显存和CPU消耗时间,因为所述后端缓冲区的拷贝需要显存的存储空间,而拷贝操作需要CPU时间并且对于使用eglSwapBuffers函数的内部调用内存拷贝(memcpy)函数完成的系统内存拷贝会耗时很长,在进行所述前端缓冲区和后端缓冲区交换时,极大地影响GPU的显示帧率。
基于此,本发明提出一种提升GPU双缓冲显示效率的技术方案,通过该技术方案可以节省大数据拷贝时的时间和提升后端缓冲区和前端缓冲区交换时GPU的显示帧率。参见图3,其示出了本发明实施例提供的一种提升GPU双缓冲显示效率的方法,该方法可以应用于GPU端,该方法包括:
S301:将当前帧的渲染结果存储到第一缓冲区;
S302:将所述第一缓冲区与第二缓冲区进行交换;
S303:在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
S304:将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
根据上述方案的描述,本发明实施例通过GPU经过一系列渲染操作后将当前帧像素的RGB数据即渲染结果存放到第一缓冲区,将所述第一缓冲区与第二缓冲区进行交换,并在交换过程中,将所述当前帧的渲染结果通过ARM平台的neon指令拷贝到第二缓冲区,然后将所述第二缓冲区中的渲染结果发送至显示器以展示到屏幕上,通过该技术方案可以减少大数据量拷贝时的时间并提升所述第一缓冲区和第二缓冲区交换时GPU的显示帧率。
针对图3所示的技术方案,在一些可能的实现方式中,所述将所述第一缓冲区与第二缓冲区进行交换,具体来说,在一些示例中,结合图1,基于OpenGL的应用程序调用方式为CPU 10通过应用程序11向GPU驱动程序12发出指令,GPU驱动程序12可调配指定供GPU 20执行的一或多个运算以便渲染图元的一或多个命令,以用于将一或多个图形图元渲染到可显示的图形图像中。当GPU 20接收到来自CPU 10的图形渲染命令时,GPU 20可使用处理器集群22执行图形处理管线,以便对命令进行解码,并对图形处理管线进行配置以执行图形渲染命令中所指定的操作,将所述指定的操作对应的渲染结果存储到所述第一缓冲区,如图4所示,通过调用eglSwapBuffers函数实现所述第一缓冲区和第二缓冲区的交换,即后端缓冲区和前端缓冲区的交换,将最新一帧的渲染数据展示在屏幕上。
针对图3所示的技术方案,在一些可能的实现方式中,所述在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区,包括:
在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区;其中,所述重写后的内存拷贝函数包括ARM平台的neon指令。
需要说明的是,高性能RISC机器(Advanced RISC Machines,ARM)是一种低功耗的精简指令集计算机(ReducedInstruction Set Computer,RISC)微处理器。所述ARM的指令集有armv5、armv6、armv8和neon指令等。最初的ARM平台的指令集为通用计算型指令集,指令集都是针对单个数据进行计算,没有并行计算到功能。随着版本的更新,后面逐渐加入了一些复杂到指令以及并行计算到指令,而所述neon指令是专门针对大规模到并行运算而设计的,其是适用于ARM平台下的处理器中的一种高级的单指令多数据(Single InstructionMultiple Data,SIMD)扩展指令集。所述neon指令可加速多媒体和信号处理算法,如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成等。例如,对于采用armv8版本的指令集的处理器下,有128位SIMD架构扩展,即128位neon SIMD寄存器。如果操作32位整数,可同时操作4个neon SIMD寄存器。如果操作16位整数,可同时操作8个neon SIMD寄存器。如果操作8位整数,可同时操作16个neon SIMD寄存器,所述neon SIMD寄存器的出现是专门针对大规模并行运算设计的。
为了结合neon指令的并行运算处理上的优点,在一些示例中,所述方法还包括:
根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝(memcpy)函数,获得重写后的内存拷贝(memcpy)函数。
需要说明的是,为了在相关方案的内存拷贝(memcpy)函数中增加neon指令,可以通过汇编函数的方式对内存拷贝(memcpy)函数进行重写。具体地,所述根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝(memcpy)函数,获得重写后的内存拷贝(memcpy)函数,包括:
获取原始内存拷贝(memcpy)函数的汇编代码;
根据ARM平台的向量寄存器修改所述汇编代码中与寄存器对应的代码内容,获得修改后的汇编代码;
将所述neon指令结合至所述修改后的汇编代码,生成所述重写后的内存拷贝(memcpy)函数。
针对上述示例及其具体实现方式,在重写后的内存拷贝(memcpy)函数中, neon指令的汇编代码片段如下:
stdlibp_neon_fast_aligned_memcpy_64:
prfm pldl1strm, [x1, #(3*64) ] // preload 3 loops ahead
ld4 { v0.2d, v1.2d, v2.2d, v3.2d}, [x1], #(128*4/8)
subs x2, x2, #(8*64/8) //Transfer 8x64-bit registers at atime
st4 { v0.2d, v1.2d, v2.2d, v3.2d}, [x0], #(128*4/8)
bne stdlibp_neon_fast_aligned_memcpy_64
ret
对于上述汇编代码片段中指令,需要说明的是:prfm指令实现从L1 cache中的数据预取。ld4指令实现并行从虚拟随机访问存储器(Virtual Random Access Memory,VRAM)中读取64byte数据到4个128位寄存器{v0.2d,v1.2d,v2.2d,v3.2d}中。st4指令实现并行存储4个128位寄存器{v0.2d,v1.2d,v2.2d,v3.2d}到随机存储器中。
在一些示例中,所述在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区,包括:
通过调用eglSwapBuffers函数,使得GPU执行将所述第一缓冲区与所述第二缓冲区进行交换的交换过程;
在执行所述交换过程中,通过所述eglSwapBuffers函数内部底层调用所述重写后的内存拷贝(memcpy)函数;
执行所述重写后的内存拷贝(memcpy)函数中的汇编代码以将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区。
在本发明实施例中,结合图5所示出的前、后端缓冲交换时的内存拷贝流程图,在前端缓冲区和后端缓冲区进行交换时需要进行内存拷贝,通过使用高并行度的neon指令,并结合ARM平台硬件特性,使用其特有的128位向量寄存器编写出汇编函数来实现高效率的内存拷贝,从而实现系统内存的加速拷贝,在GPU渲染过程中的每一帧均要经过上述过程中的前后端缓冲区交换后,最终显示到显示器的屏幕上。
需要说明的是,使用汇编重写内存拷贝(memcpy)函数,在汇编中加入neon指令;当调用eglSwapBuffers函数时,在eglSwapBuffers函数内部会调用所述内存拷贝(memcpy)函数,从而实现将后端缓冲区的渲染结果拷贝至前端缓冲区。在交换后端缓冲区和前端缓冲区的过程中,将所述内存拷贝(memcpy)函数替换为加入neon指令的汇编代码,从而提升了数据拷贝的效率。
基于前述技术方案相同的发明构思,参见图6,其示出了一种提升GPU双缓冲显示效率的装置600,所述装置600包括:存储部分601、交换部分602、拷贝部分603以及展示部分604;其中,
所述存储部分601,经配置为将当前帧的渲染结果存储到第一缓冲区;
所述交换部分602,经配置为将所述第一缓冲区与第二缓冲区进行交换;
所述拷贝部分603,经配置为在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
所述展示部分604,经配置为将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
在一些示例中,所述拷贝部分603,经配置为在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区;其中,所述重写后的内存拷贝函数包括ARM平台的neon指令。
在一些示例中,所述拷贝部分603,经配置为根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝(memcpy)函数,获得重写后的内存拷贝(memcpy)函数。
在一些示例中,所述拷贝部分603,经配置为:
获取原始内存拷贝(memcpy)函数的汇编代码;
根据ARM平台的向量寄存器修改所述汇编代码中与寄存器对应的代码内容,获得修改后的汇编代码;
将所述neon指令结合至所述修改后的汇编代码,生成所述重写后的内存拷贝(memcpy)函数。
在一些示例中,所述拷贝部分603,经配置为:
通过调用eglSwapBuffers函数,使得GPU执行将所述第一缓冲区与所述第二缓冲区进行交换的交换过程;
在执行所述交换过程中,通过所述eglSwapBuffers函数内部底层调用所述重写后的内存拷贝(memcpy)函数;
执行所述重写后的内存拷贝(memcpy)函数中的汇编代码以将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区。
可以理解地,上述提升GPU双缓冲显示效率的装置600的示例性技术方案,与前述提升GPU双缓冲显示效率的方法的技术方案属于同一构思,因此,上述提升GPU双缓冲显示效率的装置600的技术方案未详细描述的细节内容,均可以参见前述提升GPU双缓冲显示效率的方法的技术方案的描述,本发明实施例对此不做赘述。
可以理解地,图3所示的技术方案及其示例既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现,本发明实施例是以软件功能模块的方式实现。如果以软件功能部分的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有提升GPU双缓冲显示效率的程序,所述提升GPU双缓冲显示效率的程序被至少一个处理器执行时实现上述技术方案中所述提升GPU双缓冲显示效率的方法的步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种提升GPU双缓冲显示效率的方法,其特征在于,所述方法包括:
将当前帧的渲染结果存储到第一缓冲区;
将所述第一缓冲区与第二缓冲区进行交换;
在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
2.根据权利要求1所述方法,其特征在于,所述在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区,包括:
在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区;其中,所述重写后的内存拷贝函数包括ARM平台的neon指令。
3.根据权利要求2所述方法,其特征在于,所述方法还包括:
根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝memcpy函数,获得重写后的内存拷贝memcpy函数。
4.根据权利要求3所述方法,其特征在于,所述根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝memcpy函数,获得重写后的内存拷贝memcpy函数,包括:
获取原始内存拷贝memcpy函数的汇编代码;
根据ARM平台的向量寄存器修改所述汇编代码中与寄存器对应的代码内容,获得修改后的汇编代码;
将所述neon指令结合至所述修改后的汇编代码,生成所述重写后的内存拷贝memcpy函数。
5.根据权利要求2所述方法,其特征在于,所述在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区,包括:
通过调用eglSwapBuffers函数,使得GPU执行将所述第一缓冲区与所述第二缓冲区进行交换的交换过程;
在执行所述交换过程中,通过所述eglSwapBuffers函数内部底层调用所述重写后的内存拷贝memcpy函数;
执行所述重写后的内存拷贝memcpy函数中的汇编代码以将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区。
6.一种提升GPU双缓冲显示效率的装置,其特征在于,所述装置包括:存储部分、交换部分、拷贝部分以及展示部分;其中,
所述存储部分,经配置为将当前帧的渲染结果存储到第一缓冲区;
所述交换部分,经配置为将所述第一缓冲区与第二缓冲区进行交换;
所述拷贝部分,经配置为在交换过程中,通过ARM平台的neon指令进行内存拷贝以将所述当前帧的渲染结果拷贝至所述第二缓冲区;
所述展示部分,经配置为将所述第二缓冲区内的渲染结果发送至显示器以展示在屏幕上。
7.根据权利要求6所述装置,其特征在于,所述拷贝部分,经配置为在交换过程中,利用重写后的内存拷贝函数将所述第一缓冲区内的渲染结果拷贝至所述第二缓冲区;其中,所述重写后的内存拷贝函数包括ARM平台的neon指令。
8.根据权利要求7所述装置,其特征在于,所述拷贝部分,经配置为根据ARM平台的向量寄存器,将所述neon指令通过编写汇编函数的方式加入至内存拷贝memcpy函数,获得重写后的内存拷贝memcpy函数。
9.一种计算设备,其特征在于,所述计算设备包括:通信接口,处理器,存储器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行权利要求1至5任一项所述提升GPU双缓冲显示效率的方法的步骤。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有提升GPU双缓冲显示效率的程序,所述提升GPU双缓冲显示效率的程序被至少一个处理器执行时实现权利要求1至5任一项所述提升GPU双缓冲显示效率的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311174014.0A CN116909511A (zh) | 2023-09-12 | 2023-09-12 | 提升gpu双缓冲显示效率的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311174014.0A CN116909511A (zh) | 2023-09-12 | 2023-09-12 | 提升gpu双缓冲显示效率的方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116909511A true CN116909511A (zh) | 2023-10-20 |
Family
ID=88363365
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311174014.0A Pending CN116909511A (zh) | 2023-09-12 | 2023-09-12 | 提升gpu双缓冲显示效率的方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116909511A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435532A (zh) * | 2023-12-22 | 2024-01-23 | 西安芯云半导体技术有限公司 | 基于视频硬件加速接口的拷贝方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9161006B1 (en) * | 2014-12-05 | 2015-10-13 | Kamcord, Inc. | Systems and methods for efficient screen capture |
CN106098022A (zh) * | 2016-06-07 | 2016-11-09 | 北京小鸟看看科技有限公司 | 一种缩短图像延迟的方法和装置 |
CN109035131A (zh) * | 2017-06-12 | 2018-12-18 | 龙芯中科技术有限公司 | 显示图像的方法、装置、可读存储介质及电子设备 |
CN111741232A (zh) * | 2020-08-11 | 2020-10-02 | 成都索贝数码科技股份有限公司 | 基于双显卡nvlink提高超高清非编编辑性能的方法 |
CN113473226A (zh) * | 2021-08-09 | 2021-10-01 | 深圳软牛科技有限公司 | 提高视频渲染效率的方法、装置、计算机设备及存储介质 |
-
2023
- 2023-09-12 CN CN202311174014.0A patent/CN116909511A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9161006B1 (en) * | 2014-12-05 | 2015-10-13 | Kamcord, Inc. | Systems and methods for efficient screen capture |
CN106098022A (zh) * | 2016-06-07 | 2016-11-09 | 北京小鸟看看科技有限公司 | 一种缩短图像延迟的方法和装置 |
CN109035131A (zh) * | 2017-06-12 | 2018-12-18 | 龙芯中科技术有限公司 | 显示图像的方法、装置、可读存储介质及电子设备 |
CN111741232A (zh) * | 2020-08-11 | 2020-10-02 | 成都索贝数码科技股份有限公司 | 基于双显卡nvlink提高超高清非编编辑性能的方法 |
CN113473226A (zh) * | 2021-08-09 | 2021-10-01 | 深圳软牛科技有限公司 | 提高视频渲染效率的方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
程思: "基于 ARMv8架构的髙速图像釆集系统设计", 信息科技辑, no. 2019, pages 138 - 2106 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435532A (zh) * | 2023-12-22 | 2024-01-23 | 西安芯云半导体技术有限公司 | 基于视频硬件加速接口的拷贝方法、装置及存储介质 |
CN117435532B (zh) * | 2023-12-22 | 2024-03-22 | 西安芯云半导体技术有限公司 | 基于视频硬件加速接口的拷贝方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110928695B (zh) | 一种关于显存的管理方法、装置及计算机存储介质 | |
EP3087553B1 (en) | Optimized multi-pass rendering on tiled base architectures | |
US8547382B2 (en) | Video graphics system and method of pixel data compression | |
CN108027955B (zh) | 经带宽压缩的图形数据的存储技术 | |
US20160048980A1 (en) | Bandwidth reduction using texture lookup by adaptive shading | |
US20160292812A1 (en) | Hybrid 2d/3d graphics rendering | |
US20050280652A1 (en) | System and method for a universal data write unit in a 3-D graphics pipeline including generic cache memories | |
CN108027956B (zh) | 后期深度测试与保守深度测试之间的动态切换 | |
CN109564694B (zh) | 用于基于入库的图形处理的顶点着色器 | |
JP2018512644A (ja) | 低品質タイルを使用してメモリ帯域幅を減らすためのシステムおよび方法 | |
CN114972607B (zh) | 加速图像显示的数据传输方法、装置及介质 | |
CN113256764A (zh) | 一种光栅化装置、方法及计算机存储介质 | |
US20170083323A1 (en) | Speculative scalarization in vector processing | |
CN111311478B (zh) | 一种gpu渲染核数据的预读取方法、装置及计算机存储介质 | |
CN112686797A (zh) | 用于gpu功能验证的目标帧数据获取方法、装置及存储介质 | |
CN116909511A (zh) | 提升gpu双缓冲显示效率的方法、装置及存储介质 | |
CN112991143A (zh) | 一种图元装配的方法、装置及计算机存储介质 | |
US10504462B2 (en) | Non-linear processing of two-dimensional data | |
EP3170069B1 (en) | Vector scaling instructions for use in an arithmetic logic unit | |
US10157443B1 (en) | Deferred batching of incremental constant loads | |
US20240242417A1 (en) | Block matching window search instruction using a graphics processing unit (gpu) texture pipeline | |
CN118229507A (zh) | 一种图像处理方法、装置、系统、设备及计算机存储介质 | |
CN116457830A (zh) | 基于区域不连续性的运动估计 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |