发明内容
有鉴于此,本发明实施例提供一种基于多GPU的图像渲染方法、装置及可读存储介质,从而减少GPU图像渲染的时间。
本发明的第一方面提供了一种基于多GPU的图像渲染方法,包括:获取目标图像,检测不同数量的可用设备渲染所述目标图像的第一渲染时间,其中,所述可用设备为用于图像渲染的GPU设备;比较不同数量的可用设备对应的所述第一渲染时间,获取所述第一渲染时间的数值最小时的所述可用设备作为目标设备;根据所述目标设备、第二渲染时间对所述目标图像进行划分得到第二图像,其中,所述第二渲染时间为单个所述目标设备对所述目标图像进行渲染需要的时间;基于所述目标设备中的渲染任务对所述第二图像进行渲染得到第二图像结果,对所述第二图像结果进行合并得到所述目标图像的渲染图,其中,所述渲染任务用于渲染所述第二图像。
根据本发明的一些实施例,所述获取目标图像,检测不同数量的可用设备渲染所述目标图像的第一渲染时间,比较不同数量的可用设备对应的所述第一渲染时间,获取所述第一渲染时间的数值最小时的所述可用设备作为目标设备,包括:调整所述可用设备的数量,并基于所述可用设备的数量对所述目标图像进行均分得到第一图像;分配所述第一图像到所述可用设备,获取所述可用设备渲染所述第一图像的时间作为第一渲染时间;比对不同数量的可用设备所需要的第一渲染时间的大小,获取第一渲染时间最小对应的数量作为第一数值,选取所述第一数值的所述可用设备作为目标设备。
根据本发明的一些实施例,所述根据所述目标设备、第二渲染时间对所述目标图像进行划分得到第二图像,包括:获取单个所述目标设备对所述目标图像进行渲染需要的时间作为第二渲染时间;获取单个所述目标设备在固定时间内对所述目标图像的渲染帧数得到第二渲染时间;比较不同的所述目标设备的所述第二渲染时间的倒数得到分割比例;基于所述分割比例对所述目标图像进行划分得到第二图像。
根据本发明的一些实施例,所述基于所述目标设备中的渲染任务对所述第二图像进行渲染得到第二图像结果,对所述第二图像结果进行合并得到所述目标图像的渲染图,包括:分配渲染任务到所述目标设备;所述目标设备对所述渲染任务进行并行执行得到第二图像结果;对所述第二图像结果进行合并得到所述目标图像的渲染图。
根据本发明的一些实施例,所述基于所述目标设备中的渲染任务对所述第二图像进行渲染得到第二图像结果,对所述第二图像结果进行合并得到所述目标图像的渲染图,包括:分配渲染任务到所述目标设备;所述目标设备对所述渲染任务进行并行执行得到第二图像结果;对所述第二图像结果进行合并得到所述目标图像的渲染图。
根据本发明的一些实施例,所述基于所述目标设备中的渲染任务对所述第二图像进行渲染得到第二图像结果,对所述第二图像结果进行合并得到所述目标图像的渲染图,包括:获取所述目标设备中任务队列,其中,所述任务队列用于执行所述渲染任务;分配所述渲染任务的子任务到所述任务队列;获取相同类型的所述子任务对应的所述任务队列进行并行执行得到第二图像结果;对所述第二图像结果进行合并得到所述目标图像的渲染图。
本发明的另一方面提供了一种基于多GPU的图像渲染装置,包括:第一模块,用于获取目标图像,检测不同数量的可用设备渲染所述目标图像的第一渲染时间,其中,所述可用设备为用于图像渲染的GPU设备;第二模块,用于比较不同数量的可用设备对应的所述第一渲染时间,获取所述第一渲染时间的数值最小时的所述可用设备作为目标设备;第三模块,用于根据所述目标设备、第二渲染时间对所述目标图像进行划分得到第二图像,其中,所述第二渲染时间为单个所述目标设备对所述目标图像进行渲染需要的时间;第四模块,用于基于所述目标设备中的渲染任务对所述第二图像进行渲染得到第二图像结果,对所述第二图像结果进行合并得到所述目标图像的渲染图,其中,所述渲染任务用于渲染所述第二图像。
本发明的另一方面提供了一种电子设备,包括处理器以及存储器;所述存储器用于存储程序;所述处理器执行所述程序实现如上所述的任一项所述的基于多GPU的图像渲染方法。
根据本发明实施例的电子设备,至少具有与上述的基于多GPU的图像渲染同样的有益效果。
本发明的另一方面提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如上所述的任一项所述的基于多GPU的图像渲染方法。
根据本发明实施例的计算机可读存储介质,至少具有与上述的基于多GPU的图像渲染方法同样的有益效果。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前面的方法。
本发明的实施例通过获取渲染时间最小的GPU可用设备数目,基于这个数目选取第一渲染时间最短时候的可用设备数值,将这些可用设备作为目标设备,通过动态调整GPU数量,避免了因为模型太简单,导致多个GPU之间进行通信造成的开销比多GPU同时渲染节省的开销大,反而使渲染速度下降的问题;利用每个目标设备对目标图像进行渲染所需要的时间,对目标图像进行划分得到第二图像,之后利用目标设备中的渲染任务对第二图像进行渲染得到第二图像结果,将第二图像结果进行结合得到目标图像的渲染图,从而动态调整像素切割比例,让高性能GPU分担一部分低性能GPU的像素数据,减轻低性能GPU负担达成负载均衡,同时还平均各GPU渲染时间,缩小渲染时间差从而减少系统整体的渲染时间。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。当前,对于图像渲染主要依靠GPU完成,GPU在对3D图像进行渲染的过程中,首先需要程序开发者准备好GPU要执行的任务指令,然后把任务指令通过队列提交给GPU的执行引擎,GPU执行引擎从队列中获取到任务指令就会执行里面的任务从而完成图像渲染过程。现有的图像渲染过程是把所有渲染任务提交到一个队列中,越接近队列头部的任务越先被GPU执行。
而对于图像渲染的加速大多采用传统的硬件加速图像渲染方法,即增加GPU设备,把所有的渲染任务平均分配给多个GPU完成。每个GPU会采用串行方案完成各自的渲染任务,即先加载模型数据,模型数据加载完成后,再计算每个像素点在当前模型环境下应该显示的颜色值,颜色值计算完成后多个GPU再将颜色数据传输到目标对象,最后目标对象将渲染结果展示到屏幕上。主流的多GPU图像渲染方案有交替帧和切割帧两种方案。交替帧方案是通过不同GPU渲染不同时刻的图像,再根据时间顺序呈现图像来实现;切割帧方案是通过对单张图像进行等比例切割,每个GPU渲染一部分,让不同的GPU共同渲染同一帧的数据,之后再将多个GPU的渲染结果合并并展现在屏幕上。
可是,现有的硬件加速技术不适合用在简单模型上,因为没有考虑当模型过于简单时,多个GPU之间进行通信造成的开销可能会比多GPU同时渲染节省的开销大,最后导致渲染速度下降。除此之外,由于每个GPU完成各自渲染任务时使用的是串行方案,导致单个GPU资源利用未达到饱和状态,造成GPU资源浪费。而如果采用单GPU进行渲染,虽然针对简单模型的问题解决了,但是对于复杂模型,单GPU的渲染能力有限,在实时性要求高的场景下存在渲染不够快,渲染高质量图像的帧率低等问题。所以在复杂渲染情形下,我们使用多GPU架构满足业务需求。传统的多GPU图像渲染方案无法充分发挥处理器性能以达到高实时性要求,且在异构GPU架构下无法很好处理不同架构GPU之间的负载不均衡等问题,导致高延迟现象出现。对此,本申请提出了一种基于多GPU的图像渲染方法、装置及可读存储介质,从而减少GPU图像渲染的时间。
参考图1,图1为本发明实施例提供的基于多GPU的图像渲染方法的流程图,包括步骤S110-步骤S140:
步骤S110,获取目标图像,检测不同数量的可用设备渲染目标图像的第一渲染时间,其中,可用设备为用于图像渲染的GPU设备。
步骤S120,比较不同数量的可用设备对应的第一渲染时间,获取第一渲染时间的数值最小时的可用设备作为目标设备。
具体地,获取要渲染的对象,即目标图像。统计当前可用设备总数,即查找当前运行环境下有多少GPU可以用来执行渲染任务的,之后加载渲染模型,根据模型的复杂度确定本次渲染任务所需GPU的最佳数量,具体地,调整可用设备的数量,统计不同数量下可用设备对目标图像进行渲染所要花费的时间作为第一渲染时间,具体地:调整可用设备的数量,根据数量对目标图像进行均分得到第一图像,其中第一图像的数量与当前调整后可用设备的数量相同,分别分配第一图像到不同的可用设备,通过可用设备对第一图像进行渲染得到第一图像结果,进而对第一图像结果进行合成得到目标图像的渲染图,获取整个渲染过程需要的时间作为第一渲染时间,在当前可用设备总数范围内不断调整可用设备的数量,并对目标图像进行渲染,获取不同数量的可用设备对应的第一渲染时间,直到当前可用设备总数范围内不同数量的可用设备都对目标图像进行了渲染,选取出第一渲染时间最小时,对应的可用设备的数量作为第一数值,选取第一数值对应数量的可用设备作为目标设备。示例性地:第一轮用1个GPU进行图像渲染工作并统计这一轮消耗的时间,第二轮用2个GPU进行图像渲染工作并统计第二轮消耗的时间,比较两轮渲染消耗的时间长短,如果第二轮时间比第一轮短,说明用2个GPU渲染速度比1个GPU渲染速度更快,以此类推,再统计使用3个GPU进行图像渲染会消耗的时间,直到找到在最短渲染时间下用到的GPU数目。进一步地,创建3个变量,temp,用来存放每次使用当前GPU数目再进行渲染需要消耗的时间;tmin,用来存放遍历GPU数目后渲染消耗的最短时间;i,用来表示当前轮数使用到的GPU数目,其中,temp初始值为一个非常大的数字(INF)。在第i轮中将目标图像按像素区域均等的切分成i份,再把像素区域分别分配给i个GPU;收到像素区域的每个GPU完成对应图像的像素颜色计算工作;当i个GPU都执行完各自的渲染任务后,每个GPU会将i个计算结果汇总至第一个GPU;统计从将目标图像按像素区域均等切分到每个GPU将i个计算结果汇总至第一个GPU的用时,将统计结果存放在temp中,即为第一渲染时间;统计完i个GPU渲染一帧画面所需的时间,下一轮循环将统计i+1个GPU渲染一帧画面所需的时间。对比传统方案中采用数目固定的多个GPU加速图像渲染,通过基于模型复杂度动态调整GPU数量,避免了因为模型太简单,导致多个GPU之间进行通信造成的开销比多GPU同时渲染节省的开销大,反而使渲染速度下降的问题。
步骤S130,根据目标设备、第二渲染时间对目标图像进行划分得到第二图像,其中,第二渲染时间为单个目标设备对目标图像进行渲染需要的时间。
具体地,获取得到目标设备的个数,即第一数值之后,将目标图像平均划分成n份得到第二图像,其中,n为目标设备的个数,分配第二图像到各个目标设备进行渲染。更进一步地,在实际情况中,可能出现多个目标设备的规格型号不一致,或者目标设备的负载不同,此时如果均分目标图像可能会导致目标设备负载不均衡的问题,因此,获取单个目标设备在固定时间内对目标图像渲染的帧数得到第二渲染时间,具体地,对图像进行渲染的时间取决于单位时间内渲染的帧数,并取该指标的倒数作为单帧目标图像的渲染时间,即第二渲染时间。渲染时间越短对应性能最好,反之则性能最差。要说明的是,固定时间可以是任意值,此时并不限制时间的设置,但是常用还是单位时间,如一秒内渲染的帧数,这样能够减少获取分割比例所需要的时间。更进一步地,设置渲染次数阈值,当单个目标设备在固定时间内对目标图像进行渲染并获取渲染帧数进而得到第二渲染时间的次数不大于渲染次数阈值的时候,重复进行渲染并得到不同次数对应的第二渲染时间,直到渲染次数大于渲染次数阈值,获取不同次数对应的第二渲染时间的平均值作为该目标设备最终的第二渲染时间,从而提高准确度。重复相同的操作计算所有目标设备对应的第二渲染时间,基于各个目标设备对应的第二渲染时间进行比较得到分割比例,具体地,比较第二渲染时间这个操作,更具体解释为获取各个目标设备渲染次数与第二渲染时间的比值,将得到的比值作为分割比例,根据分割比例对目标图像进行划分得到第二图像,即,基于第二渲染时间进行比较并不是直接将第二渲染时间进行比较。要注意的是,第二图像的个数与目标设备的个数,即第一数值相等。示例性地,(1)设置total=1,{T1,T2,……,Tn}={0,0,……,0}:total表示目前的渲染次数,初始值为1;{T1,T2,……,Tn}表示GPU1、GPU2、……、GPUn的累计渲染时间,初始值均为0。n为目标设备的个数;N为总计渲染次数,意为衡量N次GPU的渲染性能;(2)获取各GPU此次渲染时间;(3){T1,T2,……,Tn}记录各GPU的累计渲染时间:变量{T1,T2,……,Tn}记录下对应GPU的渲染时间;(4)计算N/T1:N/T2:……:N/Tn,并作为像素分割比例:计算比较值N/T1:N/T2:……:N/Tn,得出每个GPU的FPS作为性能指标,将此比较值作为最新的像素分割比例。传统的基于分割帧的多GPU方案在渲染过程中造成延时的一大原因是,所有GPU均完成渲染后才能合成为完整图像,所以存在GPU之间的等待时间。对于异构GPU系统,多个GPU之间会存在性能差异,如果仍然采用均分图像的像素切割方案会让高性能GPU渲染速度快于低性能GPU,高性能GPU需要等待低性能GPU完成任务,这会导致很大的GPU等待时延,拉低整体系统的渲染性能。因此,通过动态调整像素切割比例,让高性能GPU分担一部分低性能GPU的像素数据,这不仅有利于减轻低性能GPU负担达成负载均衡目的,还可以平均各GPU渲染时间,缩小渲染时间差从而减少系统整体的渲染时间。此外,还能够适用于各种同构和异构的多GPU系统。
步骤S140,基于目标设备中的渲染任务对第二图像进行渲染得到第二图像结果,对第二图像结果进行合并得到目标图像的渲染图,其中,渲染任务用于渲染第二图像。
具体地,根据目标设备中的渲染任务对第二图像进行渲染得到第二图像结果,每个目标设备处理对应的第二图像,当对目标图像进行切割得到第二图像之后,目标设备接收任务指令执行对应的渲染任务,对第二图像进行渲染得到第二图像结果,之后将第二图像结果进行合并得到目标图像的渲染图。分配渲染任务到对应的目标设备,目标设备并行执行渲染任务中的计算任务得到第二图像结果,将第二图像结果合并得到目标图像的渲染图,通过并行执行减少了渲染的时间。
更进一步地,渲染任务中包括不少于一个子任务,示例性地,包括用于计算第二图像颜色值的计算任务、用于进行拷贝的拷贝任务、用于展示到屏幕的展示任务。而且不同类型的子任务之间可能存在先后顺序,示例性地,完成计算任务后才能开始拷贝任务,完成拷贝任务之后才能进行展示任务。其中,每个GPU都具有一定数量的任务队列,而任务队列是用于执行子任务的。获取目标设备中任务队列,其中,任务队列用于执行渲染任务;分配渲染任务的子任务到任务队列;获取相同类型的子任务对应的任务队列进行并行执行得到第二图像结果;对第二图像结果进行合并得到目标图像的渲染图。
更进一步地,基于任务队列中用于执行计算任务的任务队列的数目对第二图像进行均分,从而确保目标设备内的计算任务的队列任务能够并行执行。示例性地,根据比对第一渲染时间得出结论,当GPU个数为4的时候,渲染时间是最小的,为了提升单个GPU的资源利用率,对目标图像进行动态切割获得第二图像的细粒度数据,并将第二图像交给不同的目标设备并行渲染,具体地,将目标图像根据切割比例划分成4份第二图像,每一个图像都被分配一个目标设备执行渲染任务,而这几个目标设备当中都分别具有4个任务队列,将渲染任务的子任务分配到不同的任务队列中,其中,任务队列1和任务队列2被分配到计算任务来计算区域内像素的颜色值,任务队列3被分配到拷贝任务,任务队列4被分配到展示任务。要说明的是,不同的任务之间可能存在先后关系也可能没有,渲染任务中包括有渲染顺序,而当不同的任务队列被分配到的子任务为统一类型时,可以并行执行,比如任务队列1和任务队列2被分配到计算任务来计算区域内像素的颜色值,则任务队列1和任务队列2可以并行执行,而任务队列3被分配到拷贝任务,根据渲染顺序,在同一帧中,拷贝任务在计算任务之后,因此,任务队列3需要在计算任务完成后才能执行。因为将子任务提交给了不同的任务队列,因此,子任务之间可以异步并行执行,例如:在第一帧当中,目标图像被划分成了4个第二图像分配给4个对应的目标设备,其中,目标设备A当中有4个任务队列,目标设备A对其中一个第二图像执行渲染任务,其中,任务队列1和任务队列2执行计算任务,任务队列3执行拷贝任务,任务队列4执行展示任务,任务队列1和任务队列2并行执行完成之后,任务队列3开始执行第一帧目标图像的拷贝任务,而此时因此任务队列1和任务队列2已经完成任务,因此,可以继续同时执行第二帧目标图像的计算任务,通过异步并行,渲染速度可以得到显著提升。
更进一步地,除了针对计算任务,还可以针对其他子任务进行并行执行,示例性地,目标设备A中有7个任务队列,其中,任务队列1到任务队列4执行计算任务,任务队列5和任务队列6执行拷贝任务,任务队列7执行展示任务。则目标设备在执行渲染任务的时候,任务队列5和任务队列6分别负责两个计算任务的任务队列的数据拷贝。从而加快了实时渲染速度。
可以看出,当确定是同类型的子任务的时候,可以并行执行对应的任务队列。但是要注意的是,在获得计算任务对应的任务队列之后,基于计算任务对应的任务队列的数目对第二图像进行划分,从而保证能够并行执行计算任务的任务队列,这是因为计算任务用于计算区域内像素的颜色值,处理的对象是图像,因此需要对第二图像进行划分,确定每个计算任务的任务队列要处理的区域。而针对其他的子任务,例如拷贝任务,要处理的是完成计算任务后的数据,因此并不需要对第二图像进行划分。同理,例如展示任务,处理的是完成拷贝后的数据,也就是说,更进一步地,确定子任务为计算任务的时候,需要基于计算任务对应的任务队列的数目对第二图像进行划分得到第三图像,用于计算任务计算第三图像的像素的颜色值得到第三图像结果,将第三图像结果进行合并就是所在目标设备对应的第二图像结果。任务队列完成子任务之后得到第二图像结果,合并第二图像结果得到目标图像的渲染图。传统的针对图像的渲染方案是串行执行渲染任务的,示例性地,目标设备A中有7个任务队列,其中,任务队列1到任务队列4执行计算任务,任务队列5和任务队列6执行拷贝任务,任务队列7执行展示任务。则需要等待任务队列1完成后再到任务队列2执行,之后等待任务队列2完成后,任务队列3开始执行……一个个执行直到完成了图像的渲染工作。毫无疑问,比起异步并行执行,传统的方法耗时更多,导致渲染速度更慢。
以下提供具体实施例方便进一步理解:
参考图2,图2为本发明实施例提供的第二图像划分以及任务队列划分示意图,假设经过对第一渲染时间的比对,确定目标设备为2个的时候,渲染效率最高,则将目标图像的屏幕区域进行像素分割,将目标图像的屏幕空间均分为两份,将第一部分内的渲染任务分配给GPU1,将第二部分内的渲染任务分配给GPU2。从而保证了GPU1和GPU2可以并行执行渲染任务。在对目标图像进行划分屏幕空间后,检测GPU1和GPU2内的任务队列并进行分配,其中,为了更清晰显示并行执行任务队列的情况,且只有子任务为计算任务的时候,才需要对第二图像进行划分,因此图2中仅仅显示了用于执行计算任务的子任务对应的任务队列,省略了其他子任务对应的任务队列。实际操作中,任务队列不单单要执行计算任务,还要执行其他的子任务。经过分配,分配结果中为,GPU1和GPU2内分别有3个任务队列用于执行计算任务,因此对GPU1和GPU2对应的第二图像的像素区域再次进行平均划分,要说明的是,划分的数目是根据中的任务队列中计算任务的数目决定的,经过划分,确保GPU1和GPU2内多个队列也能并行工作。
但是在实际情况中,不同的目标设备的性能是不一样的,鉴于此,参考图3,图3为发明实施例提供的第二图像均匀划分以及第二图像按分割比例划分示意图。左边是参考图2得到的均匀划分的方案。右边是根据每个目标设备渲染时间得到分割比例,进而执行动态分割的方案。经过比较第一渲染时间,得到两个GPU进行渲染的时候最快,进一步地,对GPU1和GPU2的性能进行重复的测试,为了提高准确性,分别进行了10次渲染测试,得到GPU1对目标图像1秒内渲染的平均帧数为60,GPU2对目标图像1秒内渲染的平均帧数为180,则GPU1的第二渲染时间为1/60,GPU2的第二渲染时间为1/180,也就是说,GPU1的渲染次数与第二渲染时间的GPU1比值为10/60,与GPU2的渲染次数与第二渲染时间的GPU2比值为10/180,则分割比例为10/60:10/180,即为1:3,根据这个分割比例对目标图像进行划分得到第二图像,使得GPU1和GPU2各自渲染的第二图像的像素比例为1:3,GPU1和GPU2可以并行执行渲染任务。之后检测GPU1和GPU2中的任务队列,其中,用于执行计算任务的任务队列的个数分别为3个,因此GPU1和GPU2根据任务队列的数目均分第二图像,方便执行计算任务的任务队列并行执行。要说明的是,图3中也仅仅展示了用于执行计算任务的任务队列,省略了执行其他子任务的任务队列。可以看出,通过让性能更好的GPU处理更多的第二图像的像素数据,极大缓解了低性能GPU的计算压力。同时,对每个GPU内部分配到的像素区域,GPU内部仍采用像素平均分割方案,使用多个任务队列并行计算每部分像素。
以下提供目标设备中任务队列执行的具体实施例:参考图4,图4为发明实施例提供的多任务队列执行结构示意图,第二图像根据计算任务对应的任务队列数目进行划分,在本实施例中,目标设备具有四个用于执行计算任务的任务队列,因此将第二图像划分成4个第三图像对应的像素区域,包括像素区域1、像素区域2、像素区域3和像素区域4,通过任务队列对这4个像素区域执行计算任务,同时,目标设备中还包括其他任务队列,用于执行图像拷贝任务和图像展示任务,完成渲染任务中的子任务后,将结果输送到GPU执行引擎。其中,执行计算任务的任务队列可以并行执行。
以下提供并行执行方法的具体实施例:参考图5,图5为发明实施例提供的传统任务队列执行示意图以及任务队列并行执行示意图对比。在具体实施例中,某个目标设备的渲染任务包括有4个计算任务、2个拷贝任务和1个展示任务。参考图5上方的图,传统任务队列执行方法,在第一帧图像中,逐一执行完4个计算任务之后再逐一执行2个拷贝任务,再执行展示任务。渲染第一帧图像花费了t7段时间,再完成对第一帧图像的渲染后才能开始渲染第二帧图像,渲染两帧总共花费了t14段时间。而任务队列并行执行中,参考图5下方的图,4个计算任务对应的任务队列并行执行,随后执行2个拷贝任务和1个展示任务,在第一帧图像的渲染中花费了t4段时间,渲染两帧图像总共花费了t8段时间。而更进一步地,在队列并行执行过程中,在执行拷贝任务的过程中,计算任务对应的任务队列已经完成工作处于空闲状态,此时可以处理第二帧图像中的计算任务,此时处理两帧要花费的时间小于t8段时间。渲染速度得到显著提升。更进一步地,图6为本发明实施例提供另一任务队列并行执行示意图。除了针对计算任务并行执行以外,还可以对其他子任务并行执行,在具体实施例中,某个目标设备的渲染任务包括有4个计算任务、2个拷贝任务和1个展示任务。计算任务对应的任务队列并行执行计算任务后,因为有两个拷贝任务对应的任务队列,因此一个拷贝任务对应的任务队列处理两个计算任务对应的任务队列输出的数据。可以看出渲染第一帧图像只需要花费t3段时间,渲染两帧只需要花费t6段时间,进一步提升渲染速度,减少渲染时间。
更进一步地,对于将目标图像的渲染图呈现到屏幕上包括但不限于以下方式:
获取其中一个目标设备作为展现设备,通过展现设备接收目标图像的渲染图并与屏幕进行交互,将目标图像的渲染图进行呈现;或者,通过各个目标设备与屏幕进行交互,将第二图像结果进行呈现。具体地,即获取其中一个GPU将各个第二图像结果进行合并后,通过这个GPU将合并后的第二图像结果呈现到屏幕,这种方式只限定与单一屏幕,或者,通过各个进行渲染的目标设备将渲染后的第二图像结果直接呈现到屏幕上,在屏幕上呈现的就是完成的目标图像的渲染图,这种方式可以实现多GPU分屏渲染。
参照图7,图7为本发明实施例提供的基于多GPU的图像渲染装置的示意图,包括第一模块210、第二模块220、第三模块230和第四模块240:
第一模块210,用于获取目标图像,检测不同数量的可用设备渲染目标图像的第一渲染时间,其中,可用设备为用于图像渲染的GPU设备;
第二模块220,用于比较不同数量的可用设备对应的第一渲染时间,获取第一渲染时间的数值最小时的可用设备作为目标设备;
第三模块230,用于根据目标设备、第二渲染时间对目标图像进行划分得到第二图像,其中,第二渲染时间为单个目标设备对目标图像进行渲染需要的时间;
第四模块240,用于基于目标设备中的渲染任务对第二图像进行渲染得到第二图像结果,对第二图像结果进行合并得到目标图像的渲染图,其中,渲染任务用于渲染第二图像。
本发明实施例还公开了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行图1所示的方法。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。