一种基于并行PLB的数据处理方法、装置及计算机存储介质与流程

文档序号:18632913发布日期:2019-09-11 21:51阅读:326来源:国知局
一种基于并行PLB的数据处理方法、装置及计算机存储介质与流程

本发明实施例涉及图形处理器(gpu,graphicsprocessingunit)技术领域,尤其涉及一种并行多边形链表构造器(plb,polygonlistbuilder)的数据处理方法、装置及计算机存储介质。



背景技术:

随着计算阵列负载的不断增长,在采用基于分块渲染(tbr,tilebasedrendering)架构的统一式渲染架构中,均衡多边形链表构造的吞吐率与计算阵列computingarray的渲染速度至关重要。当计算阵列computingarray中的计算核心,即宏处理核心(mc,macrocore)数量处于一定数量范围时,目前单一的plb对多边形的构造速度基本能够与计算阵列的性能相匹配。但是,随着技术的不断发展和演进,当mc的数量达到一定规模时,单一的plb就无法满足计算阵列中不断增长的计算资源需求。



技术实现要素:

有鉴于此,本发明实施例期望提供一种基于并行plb的数据处理方法、装置及计算机存储介质;提高plb的处理性能,从而满足不断增长的计算资源需求。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供了一种基于并行plb的数据处理方法,所述方法应用于具有多路并行plb的gpu架构,所述方法包括:

命令处理器检测到计算阵列完成顶点着色处理后,按照设定的分发顺序分批向所述多路并行plb中的每一路plb分发顶点数据信息;

每路所述plb根据接收到的顶点数据信息从显存中读取渲染后的顶点数据,并根据读取到的顶点数据构造对应的多边形链表pl;

每路所述plb将构造得到的对应pl按照设定的写入顺序回写到显存gddr中;

所述计算阵列从所述显存中按所述写入顺序读取每路pl,并根据所述读取到的pl进行光栅化及片元着色处理。

第二方面,本发明实施例提供了一种基于并行plb的gpu架构,包括:命令处理器cp,计算阵列和显存;其特征在于,所述架构中还包括多路并行plb;其中,

所述cp,配置为检测到计算阵列完成顶点着色处理后,按照设定的分发顺序分批向所述多路并行plb中的每一路plb分发顶点数据信息;

每路所述plb,配置为根据接收到的顶点数据信息从显存中读取渲染后的顶点数据,并根据读取到的顶点数据构造对应的多边形链表pl;

以及,将构造得到的对应pl按照设定的写入顺序回写到显存gddr中;

所述计算阵列,配置为从所述显存中按所述写入顺序读取每路pl,并根据所述读取到的pl进行光栅化及片元着色处理。

第三方面,本发明实施例提供了一种计算机存储介质,其特征在于,所述计算机存储介质存储有基于并行plb的数据处理的程序,所述基于并行plb的数据处理的程序被至少一个处理器执行时实现第一方面所述的基于并行plb的数据处理方法的步骤。

本发明实施例提供了一种基于并行plb的数据处理方法、装置及计算机存储介质;在顶点着色完毕后,将顶点数据分发至并行plb进行处理,而并非通过单一的plb进行pl的构建,从而提升了pl的构建性能,以致当计算阵列的计算性能不断提升的情况下,pl的构建性能仍然与计算性能相进行匹配。

附图说明

图1为本发明实施例提供的示例性图元;

图2为本发明实施例提供的单一plb下gpu的处理流程示意图;

图3为本发明实施例提供的基于并行plb的数据处理方法流程示意图;

图4为本发明实施例提供的一种plb与pl的对应示意图;

图5为本发明实施例提供的一种tile标志位的数据形式示意图;

图6为本发明实施例提供的一种ram数据存储形式示意图;

图7为本发明实施例提供的基于多路并行plb的gpu架构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

目前,在tbr的gpu架构中,整个屏幕被划分为大小统一的分块tile,本发明实施例默认进行tile划分的尺寸为16×16,而plb负责计算当前多边形所覆盖的tile,并以链表的方式对覆盖到tile的多边形进行组织管理。参见图1,其中,图1a示出了两个不同的三角形图元,分别覆盖不同的tile,其中一个三角形图元如实线所示,另一个三角形图元如虚线所示,两个三角形图元所覆盖的tile有重合。图1b为与1a所示出的三角形图元形成的包围盒所覆盖的tile,详细来说,实线三角形图元产生的包围盒所覆盖的tile内标记为0,虚线三角形图元产生的包围盒所覆盖的tile内标记为1。每当plb处理完一个图元,都会将这个图元的顶点信息写入到它所覆盖的每一个tile中。对于目前常规的仅包括一个plb的gpu架构来说,具体的处理流程参见图2所示,

步骤1:命令处理器(cp,commandprocessor)在接收到主机或cpu传输的着色命令信息后,调度并启动计算阵列开始着色,命令处理器会将着色命令信息传送给计算阵列computingarray;

步骤2:计算阵列接收到命令处理器发送的调度命令后,根据调度命令中所包括的顶点信息,比如顶点数据存储地址、顶点数据格式等,从显存(gddr,graphicsdoubledatarate)中读取顶点数据,并从gddr读取到顶点数据后,计算阵列开始进行顶点着色;

步骤3:在完成顶点着色后,计算阵列将渲染完的顶点数据回写到显存中供plb使用;

步骤4:计算阵列向cp返回第一状态信号,从而使得cp根据该状态信号对图形渲染管线进行控制;

步骤5:cp检测到计算阵列完成顶点着色后,启动plb工作;

步骤6:plb从gddr中读取渲染后的顶点开始进行多边形链表(pl,polygonlist)的构造;

步骤7:plb完成pl构造后,将构造结果回写到gddr中;

步骤8:plb向cp返回第二状态信号,从而使得cp根据第二状态信号控制流水线执行;

步骤9:计算阵列从gddr中读取多边形链表数据,进行光栅化处理(rop,rop,rasteroperatiuon)和片元着色操作;

步骤10:计算阵列完成rop以及片元着色操作后,将最终获得的像素写回gddr。

对于图2所示的处理流程,需要说明的是,在只包含一个plb的gpu架构中,步骤6中所描述的plb进行多边形链表构造的实现过程依次需要经过顶点抓取、图元装配、包围盒、tile切割以及产生pl这些操作,最后通过步骤7并将构造得到的多边形链表写回到显存gddr中。

具体地,对于顶点抓取操作来说,由于绘制模式可以分为数组绘制drawarray模式和索引绘制drawelements模式,两种模式下对顶点的抓取方式以及抓取位置有所不同,根据从主机接收到的顶点绘制模式、索引地址以及顶点数目等信息后进行顶点抓取;

对于图元装配来说,根据输入的图元类型,将顶点抓取传递来的顶点数据装配成相应图元,并最终以点、线和三角形的图元形式传递给包围盒;

对于包围盒来说,将接收到的图元经历视见体剔除、背面剔除、小三角形的包围盒处理以及裁剪处理,并将最终获得的包围盒坐标进行下一步的tile切割处理;

对于tile切割来说,将tile根据当前包围盒传递来的数据按照最合适的tile大小进行划分,并将该大小下的tile坐标、tile的编号等进行产生pl的处理;

对于产生pl来说,根据tile切割传递来的tile的坐标(x,y),可以容易的找到图元数据应该存放的tile-list序号,此外,根据主机配置的起始地址,就可以通过步骤7,将图元覆盖的tile信息写回到显存中。

而随着现代gpu架构的不断发展,gpu内计算阵列中的渲染核心数不断增加。对于tbr架构而言,以大规模的顶点构建场景为例,在此类场景中,当前常规方案中的单一plb对pl的构建性能是无法匹配计算核心的计算性能。基于此,为了使pl的构造性能能够匹配计算阵列不断发展的计算性能,本发明实施例期望通过多个plb并行地对pl进行构建来匹配计算阵列不断发展的计算性能。参见图3,其示出了本发明实施例提供的一种基于并行plb的数据处理方法,该方法可以应用于具有多路并行plb的gpu架构中,该方法可以包括:

s301:命令处理器cp检测到顶点着色处理完成后,按照顶点着色的顺序分批向多路并行多边形链表构造器plb中的每一路plb分发顶点数据信息;

s302:每路所述plb根据接收到的顶点数据信息从显存gddr中读取渲染后的顶点数据,并根据读取到的顶点数据构造对应的多边形链表pl;

s303:每路所述plb将构造得到的对应pl按照设定的写入顺序回写到显存gddr中;

s304:计算阵列computingarray从显存gddr中按所述写入顺序读取每路pl,并根据读取的pl进行光栅化及片元着色处理。

通过图3所示的技术方案,可以看出,在顶点着色完毕后,将顶点数据分发至并行plb进行处理,而并非通过单一的plb进行pl的构建,从而提升了pl的构建性能,以致当计算阵列的计算性能不断提升的情况下,pl的构建性能仍然与计算性能相进行匹配。

需要说明的是,随着目前计算阵列中计算核心数目以及计算性能的不断增长,单个计算核心的计算性能已经能够与单个的plb的pl处理性能相匹配,对于图3所示的技术方案,在一种可能的实现方式中,所述多路并行plb中的plb数量与所述计算阵列中的计算核心数量相匹配。举例来说,设定单个计算核心的计算性能与单个的plb的pl处理性能相匹配,那么当计算阵列中包括n个计算核心,则对应需要n个plb才能够匹配相应的性能需求。因此,每路plb均能够分别独立地管理自身对应的多边形链表pl。为了管理方便,每路plb对应的多边形链表pl在显存gddr中的起始地址均是由系统预先分配;另外,由于pl图元中存储的图元信息需要按照进入渲染管线的顺序再读取出来做片元着色,为了减少显存的访问,在调度分配tile的过程中,需要将每个pl中同一个tile按照进入渲染管线的顺序提取其中的多边形做后续处理。

对于图3所示的技术方案,在一种可能的实现方式中,所述命令处理器检测到计算阵列完成顶点着色处理后,按照设定的分发顺序分批向所述多路并行plb中的每一路plb分发顶点数据信息,包括:

所述命令处理器将当前顶点着色完毕的顶点数据按照绘制draw命令中的顶点顺序分批地按照所述多路并行plb中plb的顺序向每路所述plb分发顶点数据信息;其中,当所述绘制draw命令为drawarrays模式,则所述顶点数据信息包括图元类型、起始地址和数据个数;当所述绘制命令为drawelements模式,则所述顶点数据信息包括图元类型、起始地址、数据个数、索引数据格式和数据索引。

举例来说,一条绘制draw命令对涉及的顶点数据是具有顺序性的,若当前按照该条绘制draw命令完成顶点着色后进入plb的顶点数据可以确保第一批顶点数据一定分发到第一路plb,接下来的每一批顶点数据都可以按照plb的次序分发,且在全部plb都处理完该路顶点之前不再处理下一条draw命令而向任何一路分发顶点。那么显而易见的,每个plb对应的pl的顺序也就能够固定下来,例如,按照优先级递减地从第一路至最后一路进行固定。

可以理解地,当按照上述实现方式完成向各路plb分配顶点数据信息的操作之后,s302中所述的每路所述plb根据接收到的顶点数据信息从显存中读取渲染后的顶点数据,并根据读取到的顶点数据构造对应的多边形链表pl这一步骤的具体实现可以参照前述图2所示的技术方案步骤6中所述的plb进行多边形链表构造的实现过程来实现,详细来说,每路plb根据自身对应分配的顶点数据信息,依次经过顶点抓取、图元装配、包围盒、tile切割以及产生pl这些操作,从而生成每路plb对应的pl;最后通过s303并将构造得到的多边形链表写回到显存gddr中。

对于每路plb来说,由于每路plb无法提前获知自身需要针对哪些tile构造pl,那么每路plb初始均针对屏幕划分获得的所有tile构造对应的pl。参见图4所示,设定屏幕划分为8个tile,对于箭头所示的n路plb各自所对应的pl来说:各路plb对应的pl,其起始tile可能不同,比如plb0的起始tile为tilex,plb1的起始tile为非tilex;各路plb对应的pl,其pl中所包括的tile也有可能不同,比如plb2中不包括tilex,plbn中不包括tilen。但是每路plb在构造pl过程中,均针对屏幕划分所得到的所有8个tile进行pl构造。

由于多路并行plb中每路plb均需要将自身构造得到的pl写入显存gddr,为了能够清楚地对各路plb所写入的pl进行管理,对于图3所示的技术方案,在一种可能的实现方式中,s303中所述每路所述plb将构造得到的对应pl按照设定的写入顺序回写到显存gddr中,包括:

按照各路所述plb的顺序对应地设置随机存储单元;

将每路所述plb将对应的pl内的所有tile的起始地址按照tile标识顺序存至每个所述plb对应的随机存储单元;

每路所述plb将对应的pl内的所有tile均设置标志位;所述标志位包括tile标识以及用于指示所述tile标识所表示的tile是否存放有效图元信息的指示位;

每路所述plb将设置完成的所有tile的标志位按照tile标识对应的与随机存储单元内的tile起始地址一同存放。

举例来说,随机存储单元在具体实现过程中可以是随机存取存储器(ram,randomaccessmemory),其可以设置于显存gddr中作为显存gddr的一个组成部分,也可以在片上设置合适大小的存储空间。使得计算阵列在读取pl时,能够方便快捷地进行读取。需要说明的是,上述实现方式中的写入过程同样便于后续计算阵列进行读取,具体来说,可以对每路plb所对应的pl中所有tile设置标志位,不仅对tile进行标记,而且对tile内是否存放有效信息进行标识。设定以第一路plb构造的pl为例,一共8个tile,tile标识由0开始,其中的tile1、tile3和tile7中存放有效的图元信息,其他为空。那么这8个tile设置标志位的格式如图5所示,参见图5所示的标志位,包含有两个信息,其中前三位由高位到低位为tile标识的二进制编码,最后一位用于指示该tile标识所指示的tile是否存放有效的图元信息,如果存放,则为1,如果没有则为0;可以理解地,标志位中除最低位以外的其他位用于存放tile标识,标志位中的最低位用于存放该tile标识所指示的tile是否存放有效图元信息的指示。因此,若屏幕划分为更多的tile,那么可以通过扩展标志位中除最低位以外的其他位的位数来支持更多的tile,本发明实施例对此不做赘述;对于图5所示的第一路plb构造的pl中8个tile的标志位,可以对应设置一ram进行存放,因此,每路plb均可以对应设置一ram来存放自身构造的pl中的tile的标志位。仍然以图5所示的第一路plb构造的pl中8个tile的标志位为例,可以将所有8个tile的起始地址按行存放至该路plb对应的ram中,并且每一行的起始地址信息可以拼接上图5所示的该tile的标志位以此类推,每路pl都对应一个ram来存放每个tile的起始地址和标志位。具体ram的数据存储形式如图6所示。

可以理解地,通过上述实现方式完成写入之后,计算阵列在进行读取时,首先对ram中的标志位进行匹配,若对应的tile中恰好有数据,那么读取ram中该行与标志位拼接的起始地址,并将该起始地址对应的存储空间中的数据读取出来。再针对下一路pl中的对应tile进行上述操作。从而实现了多路并行plb结构下,针对各路plb所构造的pl的管理组织问题。计算阵列能够清楚地读取各路plb所构造的pl并进行后续的光栅化及片元着色处理。

基于前述技术方案相同的发明构思,参见图7,其示出了本发明实施例提供的一种基于并行plb的gpu架构70,该架构70可以包括:命令处理器cp701,计算阵列computingarray702和显存gddr703;此外,所述架构70中还包括多路并行plb704;其中,

所述cp701,配置为检测到计算阵列702完成顶点着色处理后,按照设定的分发顺序分批向所述多路并行plb704中的每一路plb704分发顶点数据信息;

每路所述plb704,配置为根据接收到的顶点数据信息从显存703中读取渲染后的顶点数据,并根据读取到的顶点数据构造对应的多边形链表pl;

以及,将构造得到的对应pl按照设定的写入顺序回写到显存703中;

所述计算阵列702,配置为从所述显存703中按所述写入顺序读取每路pl,并根据所述读取到的pl进行光栅化及片元着色处理。

在上述方案中,所述多路并行plb704中的plb704数量与所述计算阵列702中的计算核心数量相匹配;且每路plb704对应的pl在所述显存703中的起始地址由系统预先分配,且每路所述plb704基于屏幕划分获得的所有tile构造对应的pl。

在上述方案中,所述cp701,配置为:

将当前顶点着色完毕的顶点数据按照绘制draw命令中的顶点顺序分批地按照所述多路并行plb704中plb704的顺序向每路所述plb704分发顶点数据信息;其中,当所述绘制draw命令为drawarrays模式,则所述顶点数据信息包括图元类型、起始地址和数据个数;当所述绘制命令为drawelements模式,则所述顶点数据信息包括图元类型、起始地址、数据个数、索引数据格式和数据索引。

在上述方案中,所述显存703中按照各路所述plb704的顺序对应地设置随机存储单元;以及,将每路所述plb704将对应的pl内的所有tile的起始地址按照tile标识顺序存至每个所述plb704对应的随机存储单元;

每路所述plb704,配置为将对应的pl内的所有tile均设置标志位;所述标志位包括tile标识以及用于指示所述tile标识所表示的tile是否存放有效图元信息的指示位;以及,将设置完成的所有tile的标志位按照tile标识对应的与随机存储单元内的tile起始地址一同存放。

对于上述图7所示的基于多路并行plb的gpu架构70,其具体的处理过程如下:

步骤1:cp701在接收到主机或cpu传输的着色命令信息后,调度并启动计算阵列开始着色,cp701会将着色命令信息传送给计算阵列computingarray;

步骤2:计算阵列702接收到cp701发送的调度命令后,根据调度命令中所包括的顶点信息,比如顶点数据存储地址、顶点数据格式等,从显存703(gddr,graphicsdoubledatarate)中读取顶点数据,并从gddr703读取到顶点数据后,计算阵列702开始进行顶点着色;

步骤3:在完成顶点着色后,计算阵列702将渲染完的顶点数据回写到显存703中供plb704使用;

步骤4:计算阵列702向cp701返回第一状态信号,从而使得cp701根据该状态信号对图形渲染管线进行控制;

需要说明的是,上述4个步骤与图2中所示的步骤相似,在此不再赘述。由于本发明实施例是基于多路并行plb的gpu架构的技术方案,因此,对于plb构造pl的过程会与图2中相应的所示步骤有区别,具体如下:

步骤5:cp701检测到计算阵列702完成顶点着色后,启动多路plb704工作,并控制顺序向多路plb704分发顶点数据的信息;其中,顶点数据信息可以包括顶点数据存储地址、顶点数据格式等;

步骤6:每路plb704从显存703中读取渲染后的顶点开始进行pl的构造;

步骤7:每路plb704完成pl链表构造后,将构造结果回写到分块显存中;

步骤8:plb704向cp701返回状态信息,cp701根据状态信息控制流水线执行;

步骤9:计算阵列702从显存703中根据tile的序号按顺序读取每路plb704构造的pl数据,进行光栅化和片元着色计算;

步骤10:计算阵列702完成片元着色以及rop操作后,将最终的像素写回显存703。

需要说明的是,对于步骤7和步骤9来说,对应的写回和读取策略可以参照图3所示的技术方案中针对s303所描述的实现方式,在此不再赘述。

可以理解地,上述技术方案中基于多路并行plb的gpu架构70中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有基于并行plb的数据处理的程序,所述基于并行plb的数据处理的程序被至少一个处理器执行时实现图3所述的基于并行plb的数据处理方法的步骤。

需要说明的是:本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1