文献标识码: A
DOI:10.16157/j.issn.0258-7998.181708
中文引用格式: 马城城,田泽,黎小玉,等. 统一渲染架构GPU图形处理量化性能模型研究[J].电子技术应用,2019,45(2):27-32,36.
英文引用格式: Ma Chengcheng,Tian Ze,Li Xiaoyu,et al. Research on quantitative performance model of GPU graphics processing based on unified rendering architecture[J]. Application of Electronic Technique,2019,45(2):27-32,36.
0 引言
从1999年NVIDIA发布第一款GPU产品至今,GPU技术发展主要经历了固定功能流水线阶段、分离染色器架构阶段、统一染色器架构阶段[1]。其处理架构的不断改变使得图形处理能力和计算能力不断提升,相应的流水线结构、并行计算结构、并行数据通信结构、存储结构越发复杂,图形处理性能指标已难以从单方面去设计、评价。研究GPU图形处理性能模型意义重大。
国外NVIDIA、AMD等公司针对GPU图形处理性能方面进行了大量研究,但都是各公司的核心机密,公开甚少[2]。国内在统一渲染架构GPU性能方面进行了一定理论探讨,但主要集中在并行计算、存储结构、编程优化方面,针对GPU设计本身的研究几乎空白。
本文提出统一渲染架构GPU图形处理量化性能模型,在分析统一渲染架构GPU并行架构和工作原理基础上,分析影响图形处理的各种因素:图形指令生成、主机接口数据传输、图形指令解析、图形处理流水数据吞吐和统一染色阵列处理能力。为统一渲染架构GPU的性能参数设计提供方法支持。
1 统一渲染架构GPU图形处理模型
图形处理器经过近30年的发展,虽然图形处理器体系结构、处理方式发生了巨大变化,但其基于Z-Buffer的光栅化图形处理流水线一直沿用至今[3]。自2006年,NVIDIA发布统一渲染架构的GPU以来,统一渲染架构便成为GPU的主流[4]。NVIDIA、AMD等各厂家都有自己不同的实现方式,但基本的CPU+GPU异构工作方式、图形处理流程都基本一致[5-6]。下文将在分析代表产品的基础上,针对图形处理性能抽象统一渲染架构GPU图形处理模型。
1.1 GeForce 8800
GeForce 8800是2006年NVIDIA发布的第一款统一染色架构GPU,采用G80架构[7]。自此NVIDIA每两年发布一款GPU架构。2006年发布G80,2008年发布Tesla-GT200,2010年发布Fermi-GF100,2012年发布kepler,2014年发布年Maxwell,2016年发布Pascal。每一款GPU架构都对染色阵列数量及结构进行优化、调整,但图形处理过程改变甚微,基本保持着G80的处理过程,如图1所示。
图形处理任务由主机生成图形指令存储到主机内存中,GPU通过主机接口获取图形指令,然后将图形指令解析为统一染色阵列和固定的硬件单元的控制和数据信息,配合完成图形处理过程。
1.2 R700
R700是2008年AMD公司发布的具有大规模SIMD统一染色阵列的图形处理器架构[6],结构如图2所示。其存储系统包括两部分,一部分是驻于主机内存中的系统空间,另一部分则是位于GPU上的显存空间。存储系统中包含的数据包括命令队列、指令、常数以及输入、输出流,其中命令队列指明了GPU需要处理的任务;指令给出了执行部件的具体工作;常数、输入和输出流则提供了计算所需要的数据,这几个部分要素构成了GPU运行的基本要素。
一个完整R700的应用分为两个部分:运行在主机CPU上的主机程序和运行在GPU DPP阵列(Data-Parallel Processor,下文称为染色阵列)上的kernel程序。应用在运行过程中主机程序生成染色阵列运行所需的数据、染色器程序及需执行的命令。GPU通过主机接口获取主机生成的命令后由命令处理器(Command Processor)解析并控制固定处理单元和染色阵列运行,完成图形处理。
1.3 统一渲染架构GPU图形处理摸模型
抽象统一渲染架构GPU图形处理过程,如图3所示,包括主机指令生成、主机接口数据传输、图形指令解析、固定图形流水单元处理和统一染色阵列处理。主机和GPU通过“生产-消费者”关系工作,图形指令是主机和GPU交互的“桥梁”,主机图形指令生成负责图形API运行时生成图形指令,存储到主机内存中,等待GPU执行。GPU执行时通过主机接口获取到图形指令,并解析执行,将图形指令转换为图形参数配置和图形数据。图形参数配置和图形数据通过图形处理流水处理生成帧缓冲中的数据。图形处理流水在GPU实现包括固定图形流水实现方式和可编程染色阵列实现方式。
目前,OpenGL、Direct X及公开的资料中可编程染色器完成的部分包括顶点染色、几何染色、片段染色。其余图元组装、光栅化由固定图形流水方式实现。
2 图形处理性能分析
通过上述抽象的统一渲染架构GPU图形处理模型,可得一次图形处理过程主要包括:主机图形指令生成,主机接口总线数据传输,图形指令解析,图形处理流水处理。其中图形处理流水由统一染色器阵列和固定图形流水完成。图形处理量化性能模型如图4所示。
主机图形指令生成实现图形API到图形指令的运行时转换,存储到主机内存的Ringbuffer中;主机接口总线数据传输完成图形指令、数据从主机内存Ringbuffer到图形处理器的搬运;图形指令解析完成图形指令到图形参数配置、图形数据的转换;统一染色器阵列和固定图形流水配合完成图形流水处理。
在图形处理系统设计过程中均衡各部分性能是图形处理系统性能发挥、资源有效利用的关键所在。下面将对各部分性能指标进行量化分析。
2.1 主机图形指令生成
主机图形指令生成由运行在主机上的运行时编译软件完成,其性能由主机处理器性能和GPU运行时图形指令编译驱动决定。图形API在运行时编译过程中会进行图形上下文管理、图形参数处理、图形指令生成、存储等操作。如OpenGL开源实现Mesa 3D以及AMD的开源显卡驱动中的主机图形指令生成软件实现,如图5所示。
通过不完全分析统计,目前开源的图形API运行时编译普遍消耗200条指令以上的CPU汇编指令。为便于分析,假定图形API运行时编译平均消耗200条的CPU汇编指令,即在1 000 MIPS处理能力的主机环境下,图形指令的生成能力为5 MGIPS(Million Graphic Instructions Per Second)[10]。
图形API所携带的参数种类多、个数杂,图形指令在定义时一般都采用变长的包格式定义。如ATI Radeon R5xx所定义的图形指令格式,如图6所示。由于图形处理大部分为4维操作,如vertex(x,y,z,w)、color(R,G,B,A),图形API所携带的参数大部分为4个。以ATI Radeon R5xx Type-0图形指令格式为例,大部分的图形API所生成的图形指令为5个字(20 Byte)。
由此,1 000 MIPS处理能力的主机环境下,图形指令生成能力约为5 MGIPS,数据量约为1 00 MB/s。以奔腾4 HT 3.6 GHz主机环境为例,其能够提供7 GFLOPS计算能力,其图形指令生成能力约35 MGIPS,700 MB/s。
2.2 主机接口总线数据传输
目前流行的GPU主机接口有PCI、AGP、PCIE,各总线理论带宽如表1所示,一般的实现中带宽利用率在70%左右,因此在奔腾4 HT 3.6 GHz主机环境主机环境下,主机接口带宽要求至少为1.0 GB/s,由此可见至少占用PCIE1.0 x4进行图形指令数据传输。
2.3 图形指令解析
图形命令解析在GPU实现普遍采用RSIC处理器方式实现(CMD),如AMD R700。以R700架构HD4870GPU为例,其运行频率为700 MHz,要完成35 MGIPS的图形指令处理,即需要20周期完成一条图形指令的解析。若图形指令从存储在GPU内部的显示列表来,其指令解析能力要求将远超35 MGIPS。图形指令解析后将生成图形参数配置或图形数据,图形参数配置实现对各级图形流水运行状态或参数的配置,图形数据则经过图形流水各级进行图形处理。
2.4 图形处理流水
图形处理流水包括三个阶段:顶点阶段、几何阶段、像素(片段)阶段,如图7所示。顶点阶段针对独立的顶点数据进行处理,所处理顶点之间不存在相关性,评价指标为:顶点/秒,图元装配负责将顶点阶段处理完的孤立的顶点组织成点、线段、三角形 3种几何图元。几何阶段负责对点、线段、三角形进行裁剪、消隐等处理,不同图元处理的方法、算法有很大差异,因此几何阶段的评价指标包括:点/秒、线段/秒、三角形/秒。光栅化完成几何数据的离散化处理,将连续的几何数据转换为离散的片段数据。片段阶段和像素阶段都是对离散的像素数据进行处理,片段数据和像素数据的区别在于像素数据仅有位置和坐标信息,而片段数据几乎包含顶点所携带的所有属性,如纹理坐标、雾坐标等。为方便起见片段阶段处理和像素阶段处理的性能指标统一为:像素/秒。
顶点阶段、几何阶段、像素阶段之间性能指标存在一定相关性,顶点阶段根据图元类型的不同顶点数据和几何数据成特定比例关系,如表2所示。
而几何阶段与像素阶段的数据由绘制图形的大小决定,点图元由pointsize决定,线段由线段的长度和linewidth决定,三角形由面积决定,也就是几何图元和像素的比例关系决定性能瓶颈。
以三角形为例:当TRIANGLE:PIXEL > (三角形/秒)/(像素/秒),性能瓶颈将处于几何阶段;当TRIANGLE:PIXEL < (三角形/秒)/(像素/秒),性能瓶颈将处于像素阶段。
在实际GPU图形处理过程中,性能瓶颈可能出现在图形流水的任何阶段,具体与各处理阶段性能指标、实现方式、绘制图形的特征密切相关。如某GPU在设计性能指标为顶点阶段处理50兆顶点/秒,几何阶段100兆三角形/秒,像素阶段1 000 兆像素/秒,由上述可知该图形流水性能指标设计不合理,原因在于VERTEX:TRIANGLE最多1:1,即一个顶点生成1个三角形,因此50兆顶点/秒的顶点处理能力最多需要50兆三角形/秒的几何处理能力。
在图形处理流水中,顶点处理、几何处理、片段处理采用统一染色阵列实现方式,统一染色阵列实现方式能够动态平衡各流水阶段处理的性能要求,但同一染色阵列的性能需与固定处理单元性能参数保持平衡才能发挥出最优的图形处理能力。
2.5 统一染色阵列
图形处理中顶点处理、几何处理、片段处理采用可编程方式实现,以AMD、NVIDIA为代表的GPU厂家目前都采用SIMD、SIMT的统一染色阵列方式实现[13]。统一染色阵列不同阶段任务之间以固定管线实现图形流水线的连接。即固定管线为统一染色阵列提供图形数据的输入、输出功能。如图8所示,统一染色阵列运行过程中首先接收固定管线传递的图形数据,然后根据染色阵列工作状态采用一定的任务调度策略、线程调度策略将图形数据传递给特定的染色器,然后启动染色器运行,染色器处理完成后将图形数据传递给固定管线,进行下一阶段处理。染色器在处理过程中,从染色程序区取得待处理的染色器指令,以数据并行、线程并行、指令并行的处理方式实现图形处理。
由此,统一染色阵列图形处理性能主要由固定管线的图形任务或者图形数据提供能力,染色器任务调度、线程调度能力,染色器线程并行能力,染色器任务执行能力等决定。在系统设计时只有在典型应用情况下各方面能力保持均衡,统一染色阵列图形处理性能才能得到发挥。
固定管线的图形任务或者图形数据提供能力主要涉及数据的生成和传输能力,OpenGL规定染色器输入输出至少16组4维属性,若固定管线实现单周期任务处理能力,以目前典型32位图形处理系统为例,单周期实现16×4×32=2 048位数据的传输和处理。
任务调度、线程调度能力指根据染色器的工作方式和当前工作状态将固定管线的图形任务或者图形数据分配到特定的染色器上的能力。如图8染色器工作方式为4组4维处理方式,即一个图形处理线程可执行4个顶点或像素。
染色器线程并行为了提高染色器处理资源的利用率,通过多个独立的线程的切换执行隐藏长延时指令的执行时间。染色器线程处理方式与图形数据的普遍形式相关,能够在保证资源利用率高的情况下尽可能提高数据处理的并行性。如在实际应用过程中典型的像素块都是4×4的像素块,则数据并行需处理为16,典型图形数据又包含4个分量,即一套取值单元为16×4=64个染色器内核提供指令。
染色器任务执行能力由任务软件的运行指令数量和指令执行的并行能力决定,这与具体图形任务划分、染色器处理单元实现方式、发射结构等密切相关。各厂家实现方式,甚至面向不同应用领域的实现方式都存在较大差异。
2.6 性能均衡分析
在具体图形处理器设计过程中各阶段性能均衡对性能的发挥至关重要,通过上述各部分性能指标描述可得以下公式:
式(1)体现图形任务的数据生成效率与传输效率保持一致,而在系统应用中典型的通信链路速率利用率普遍为70%左右。
式(2)表示图形指令的生成要小于等于图形指令解析速率,因为在OpenGL等图形接口中定义有显示列表等其他高速通路的图形指令传输路径。在具体实现中图形指令众多,各指令处理性能千差万别,应用对指令的引用也不尽相同,因此评价性能时根据具体实现对指令处理进行分类,统计应用中各类指令所占权值,按照加权平均方式对图形指令生成、处理性能进行评价。
式(3)通过统计经验值建立主机性能与图形指令生成之间的关系。
式(4)体现图形处理中顶点阶段与几何阶段的性能应保持相当,在具体处理性能应与实际应用中点、线、三角形占比相关。
式(5)建立像素处理性能与几何处理性能之间的关系,图元面积与绘图分辨率息息相关。
式(6)建立染色器性能与图形任务处理性能之间关系,通过发射图形任务所包含的指令值执行总周期数与处理该任务所需的染色器总执行周期数,确定线程并行、数据并行、指令并行处理与图形任务性能的参数映射。
3 应用及结果分析
自研嵌入式图形处理器设计指标中规定三角形图元处理能力为150 M/s,像素处理能力为4 G/s,包含运行频率600 MHz的统一染色阵列。
通过式(4)可得:顶点阶段处理能力为150 M/s,几何阶段三角形处理能力为150 M/s;若顶点数据全部由主机指令生成,则至少150 M/s图形指令,以数据量最大的4维浮点数顶点为例,数据量为150×4×4=2 400 MB/s,通过式(1)可得需要主机通信速率约为3.4 GB/s,至少PCIE 2.0 x8才能满足带宽需求。通过式(2)可得图形指令解析速率不小于150 MGIPS;经不完全统计通过汇编级优化的自研图形处理器驱动约50条主机指令生成一条典型图形指令,通过式(3)可得需要主机性能为7.5 GIPS。
通过式(5)分析,当图元面积大于4 G/150 M约28个像素时,像素阶段性能会成为性能瓶颈,反之为顶点、几何阶段。
可编程染色阵列峰值任务生成率为150 M顶点,150 M三角形,4 G像素,由于在设计中典型的顶点、几何、像素染色成运行指令数据接近,约处理300条染色器指令,由此图形任务约为4.3 G。设计中像素采用4×4 Tile进行处理,因此以16个图形任务组成一个处理线程,一个任务由4个处理核心组成4维向量处理,即一个线程控制64个处理核心,通过式(6)可得每秒染色器线程调度速为4.3 G/16=268.75 M。染色内核拟采用双发射结构,运行频率为600 MHz,通过式(7)可得268.75 M×(300/2)=600 M×(内核数/16),即内核数应为1 075个,为便于设计设计内核数为1 024个。由此形成自研嵌入式图形处理器指标参数见表3。
通过在体系结构仿真平台上模拟表3所示的设计参数,并针对各模块以及整系统峰值进行测试,测试数据表明,实测性能指标与预期指标误差小于7.5%,能够有效支撑工程设计。
4 结论
本文在深入研究统一渲染架构GPU架构和工作原理基础上,提出一种统一渲染架构GPU的图形处理量化性能模型,并应用于自研嵌入式图形处理器设计中。仿真验证结果表明,该模型评估统一染色GPU图形处理性能与实测相比,误差小于7.5%。但目前研究仅从图形处理方面进行研究,尚未完全覆盖GPU设计的所有单元,尤其是未对存储系统、染色器阵列实现方式等进行分析。后续将从统一渲染架构GPU整体架构出发,研究各部分处理模块性能的关系,进一步提高模型的全面性和精度。
参考文献
[1] 蔡晶.GPGPU体系结构关键技术论证及模拟器研究与扩展[D].长沙:国防科学技术大学,2009.
[2] 韩博,周秉锋.GPGPU性能模型及应用实例分析[D].北京:北京大学计算机科学与技术研究所,2009.
[3] 王锋,杜云飞,陈娟.GPGPU性能模型研究[D].长沙:国防科学技术大学,2013.
[4] 朱俊峰,陈钢,张珂良,等.面向OpenCL架构的GPGPU量化性能模型[J].小型微型计算机系统,2013,34(5):1118-1125.
[5] FEINBUBE F,TROGER P,POLZE A.Joint forces:from multithreadedprogramming to GPU computing[J].IEEE Software,2010,28(1):51-57.
[6] BUCK I,FOLEY T,HORN D,et al.Brook for GPUs:stream-computing on graphics hardware[J].ACM Transactions on Graphics,2004,23(3):777-786.
[7] GALOPPO N,GOVINDARTJU N K,HENSON M,et al.LU-GPU:Efficient algorithms for solving dense linear systems on graphics hardware[C].SC′05:Proceedings of the 2005 ACM/IEEE Conference on Supercomputing,2005.
[8] LUEBKE D,HUMPHREYS G.How GPUs work[J].IEEE Computer,2007,40(2):96-100.
[9] 韩俊刚,刘有耀,张晓.图形处理器的历史现状和发展趋势[J].西安邮电学院学报,2011,16(3):61-64.
[10] GOVINDARAJU N K,LARSEN S,GRAY J,et al.A memory model for scientific algo rithms on graphics processors[C].Proceedings of the ACM IEEE Conference on Supercomputing,Tampa,2006:1-6.
[11] WILLIAMS S,WATERMAN A,PATTERSON D.Roofline:an insightful visual performance model for multicore architectures[J].Communications of the ACM,2009,52(4):65-76.
[12] 王之元.并行计算可扩展性分析与优化——能耗、可靠性和计算性能[D].长沙:国防科学技术大学,2011.
[13] 赵荣彩,唐志敏,张兆庆,等.软件流水的低功耗编译技术研究[J].软件学报,2003,14(8):1357-1363.
[14] HUANG M,RENAU J,TORRELLAS J.Profile-based energy reduction for high-performance processors[Z].2001.
[15] 熊英,罗琼.基于OpenCL的NDVI算法的并行化实现[J].电脑开发与应用,2013(11):77-78.
[16] 詹云,赵新灿,谭同德.基于OpenCL的异构系统并行编程[J].计算机工程与设计,2012,33(11):4191-4195.
作者信息:
马城城1,2,田 泽1,2,黎小玉1,2,孙琳娜3
(1.中国航空工业西安航空计算技术研究所 ,陕西 西安710068;
2.集成电路与微系统设计航空科技重点实验室,陕西 西安710068;3.西安翔腾微电子科技有限公司,陕西 西安710068)