当前位置:首页 期刊杂志

嵌入式GPU中可重构视口变换单元的设计与实现

时间:2024-05-04

田汝佳,蒋 林,邓军勇,张雪婷

(西安邮电大学 电子工程学院,西安 710121)

1 引 言

图形处理器(Graphics Processing Unit,GPU)的发展可划分为工作站、个人电脑、移动设备三个阶段.近年来,智能手机和平板电脑等移动设备带来的产业革命不断升温,移动电子产品的发展趋势极为迅猛.根据App Annie & IDC发布的2016年度回顾报告表明游戏、视频、即时通信等显示类应用位于手机应用排行榜之首.因此,每年大量的移动设备对高质量图形渲染的迫切需求也成为移动图形处理器发展及研究的内在驱动.相比于桌面GPU,由于自身功耗和带宽等方面的限制,移动GPU以较低的运算成本实现高性能、高质量的图形效果逐步成为设计的重点之一[1,2].为了在显示区域观察到预期场景,无论图形渲染流水线采用固定流水线、可编程流水线或者统一着色器结构[3],都需要进行一系列的坐标系变换,即把世界坐标系中3D图形的位置坐标映射到用于显示的屏幕坐标系中,包括几何变换、投影变换、裁剪变换、齐次坐标变换和视口变换空间坐标变换过程.视口变换是3D图形处理中进行坐标变换的最后阶段,是整个渲染管线中必不可少的处理环节,用于实现将经齐次坐标变换后的图元顶点坐标变换为屏幕中视口矩形内的坐标.

传统的视口变换多采用专用结构,文献[4]中采用硬件结构实现了视口变换,其特点是采用一种简单的RISC处理器实现视口变换的可编程.当前,面向不同应用的图形处理器正朝着高性能、多种API兼容的方向迅速发展,众多效率不一的图形渲染算法使图形处理具有高度灵活性,如何根据实际需求动态获取最优性能是图形处理器设计面临的瓶颈问题之一.因此,为了满足移动GPU以较低运算成本及可重构方式来实现视口变换的需求,本文从视口变换算法原理出发,推导了视口变换算法,发现算法对三角形图元X、Y、Z坐标进行变换时无数据相关性,满足阵列结构的并行化映射条件[5].在此基础上,采用轻核处理元阵列,通过基础的算数运算(加、减等)与逻辑运算(与、或、非、跳转等)的动态重构,提出了一种基于可重构阵列结构的视口变换单元的硬件并行化实现方案,并在FPGA开发板上完成了硬件原型测试,结果表明本文实现的可重构视口变换方案,在与专用硬件实现性能相当的同时,提高了电路的灵活性.

本文结构如下:第1部分描述了可重构阵列结构,包括单个轻核处理元的硬件结构和处理元之间的数据交互访问机制;第2部分详细推导了视口变换算法,得出了判定公式,并基于计算过程中各数据之间的数据无关性,提出一种基于可重构阵列处理器的视口变换单元(Viewport Transformation Unit,VTU)结构;第3部分基于Xilinx的FPGA芯片XC6VLX760T完成了原型系统实现及测试;最后是总结与展望.

2 可重构阵列结构

本文采用的可重构阵列结构,是由4×4个轻核处理单元(Thin-Core Processing Element,TCPE)组成的一个阵列处理器簇(Processing Element Group,PEG).其中,单个PE由一个指令RAM、一个数据RAM、一个指令译码寄存器、译码单元、寄存器文件(RegFile)、PC控制器、运算单元和一个邻接互连控制器组成.PE的指令集有算数运算、逻辑运算、分支控制等指令[6].图1给出了单个PE的微体系结构图.

图1 PE的微体系结构框图Fig.1 Microarchitecture block diagram of PE

阵列处理器中PE间的数据交互通过邻接互连和共享存储访问两种机制实现,相邻PE之间的数据交互采用邻接互连机制通过共享寄存器完成[7];不相邻PE之间的数据交互采用共享访问机制通过访问共享两级交换结构的4×4个分布随机访问存储器(Random Access Memory,RAM)的方法实现.图2给出了可重构PE阵列的结构示意图,其中带箭头直线部分表示邻接互连通信时数据通路,通过PE间共享寄存器进行数据交换;带RAM双向箭头及交叉互连长直线部分为阵列处理器簇内的两级交换结构,每个PE均可实现本地RAM的优先访问以及4×4个分布式RAM的共享访问.

可重构阵列结构利用可编程PE通过加载存储在指令RAM中的指令或由全局控制器传递并存储在RAM中的实时指令实现多次重复配置逻辑状态的特性实现实时电路重构.在运行时可根据需要下发指令动态改变系统的电路结构,使PE矩阵可以运行在数据流模式下,从而使电路兼具灵活、硬件资源可复用、并行计算及降低功耗等优良性能.

图2 可重构PE阵列结构图Fig.2 Reconfigurable PE array structure diagram

在算法实现的应用中,与基于CUDA(Compute Unified Device Architecture)实现通用计算和图形渲染算法[8,9]相比,可重构阵列与CUDA在算法的并行计算上都是基于多核结构实现,且都可通过快速的共享内存有效地共享数据.此外,本文采用的可重构阵列结构通过邻接互连机制解决了CUDA架构在执行计算过程中相邻处理块间无法进行数据交互的问题.

3 可重构视口变换单元的实现

3.1 视口变换的原理及算法推导

在计算机图形学中,视口定义了一个绘制图形的矩形窗口区域[10].视口用窗口坐标来测量,窗口坐标反映了屏幕上的像素相对于窗口左下角的位置.视口决定了显示到屏幕上的图形的位置和大小,同一屏幕上可以定义多个视口,用来显示不同的图形信息[11].

OpenGL函数库中的void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)函数指定了屏幕中视口矩形的原点即视口矩形左下角点的坐标(x0,y0),以及宽度w和高度h.其中width和height值主要用于对三角形图元顶点坐标中X,Y坐标进行视口变换.与X和Y窗口坐标不同,在OpenGL中Z坐标总是被认为位于0.0~0.1的范围之间,函数Void glDepthRange(GLclampd near,GLclampd far)为Z坐标定义了一种编码形式.其中,near和far值表示经过调整后可以存储在深度缓冲区中的最小值和最大值,在默认情况下初始值分别是0.0和1.0,且范围被限定在[0,1]之间[11].

因此,归一化图形顶点坐标与视口坐标的变换等式有:

(1)

即视口变换矩阵可以表示为:

(2)

其中视口矩阵的参数由函数glViewport和glDepthRange参数指定.

3.2 核心模块设计

基于上述视口变换算法的分析,本文提出一种基于可重构阵列处理器的视口变换单元(Viewport Transformation Unit,VTU)结构.图3给出了视口变换单元硬件结构框图.其中Din是上一流水级送来的图形命令及数据信息;Vin是上一级向本级传送数据的数据有效信号;Rin是本级可以接收上一级输出的握手响应信号;Dout是向下一级输出的图形命令及数据信息;Vout是本级向下一级传送数据的数据有效信号;Rout是下一级可以接收本级输出的握手响应信号.

图3 视口变换单元硬件结构框图Fig.3 Hardware structure diagram of VTU

VTU主要包含图形命令译码模块、存储参数寄存器模块、齐次坐标变换模块和视口变换计算模块.其中视口变换计算模块是VTU单元的核心,其主要功能就是将经过齐次坐标变换的图元顶点坐标与视口矩阵相乘.

VTU具体处理流程如下:接收来自上一级流水线的Din输入,并分别存入图形命令寄存器和数据寄存器中,然后对图形命令进行译码,根据译码结果对数据进行相关的存储和处理.当接收到glViewport命令,存储参数x、y、w和h,用于对图元顶点坐标X和坐标Y的变换;当接收到glDepthRange命令,存储参数n和f,用于对坐标Z的变换;当接收到glPushAttrib命令,将指定的属性信息组(即参数x、y、w、h、n和f)压入堆栈,由于下级流水也需要通过该命令来进行压栈操作,所以本级需要将该命令传给下级然后返回接收数据;当接收到glPopAttrib命令,将属性组参数弹出堆栈,恢复glPushAttrib保存的属性组信息,由于下级流水也需要通过该命令来进行出栈操作,所以本级需要将该命令传给下级然后返回并接收数据;当接收到glRasterPos和glVertex命令时,将光栅位置坐标和顶点坐标属性分别进行齐次坐标变换和视口变换,之后将处理完的屏幕坐标发送给下一级,发送完成返回并接收新命令.

3.3 算法的并行化硬件实现

根据可重构阵列结构的指令集、处理器数据位宽、寄存器与存储结构等特点,为满足GPU数据处理的精度要求,将并行化实现分为以下三个步骤:数据准备与拆分、进行矩阵计算以及计算结果的转储与输出.

3.3.1 数据准备与拆分

为了将VTU中的规范后的三角形图元顶点坐标数据并行的传输到阵列处理模块中,本文充分利用了可重构阵列处理器的邻接互联数据交互机制,通过阵列处理器外围PE的共享寄存器将坐标数据通过直接赋值共享寄存器的方式将数据并行送入阵列处理单元.具体实现方式为:图元顶点的X坐标及视口矩形的宽W连续赋值给PE10的R5共享寄存器,图元顶点的Y坐标及视口矩形的高H连续赋值给PE01的R6共享寄存器,图元顶点的Z坐标及视口变换的深度信息f,n连续赋值给PE02的R6共享寄存器,视口矩形的左下角坐标x0,y0连续赋值给PE23的R3共享寄存器.图4给出了数据传输的示意图.

图4 PEG接收数据示意图Fig.4 Receive data schematic diagram of PEG

由于可重构阵列处理器的数据位宽为32位,所要处理的顶点数据也为32位,为了避免乘法计算时出现溢出错误.同时,为了简化乘法运算,提高计算效率,根据阵列处理器的特点,对数据采用图5和图6两种方式进行拆分,然后对每部分进行乘法处理,最终将每部分的计算结果通过移位加的方式拼接成正确结果.

3.3.2 矩阵计算

图5 第一种数据拆分形式Fig.5 First form of data split

图6 第二种数据拆分形式Fig.6 Second form of data split

视口矩阵中存在大量0元素,为了优化计算,节约计算成本,在计算映射时只执行有效元素的计算.图7给出了视口变换矩阵与三角形图元顶点坐标相乘时的整体映射过程,其中,根据轻核处理元精简指令集的特点,每个设计乘法计算的PE通过循环移位加的方式实现乘法功能.最终阵列处理器中14个PE用于矩阵乘法映射,PE33用于部分结果的转储和输出,PE32空闲不做任何处理.

图7 视口矩阵算法整体映射图Fig.7 Overall mapping diagram of viewport matrix algorithm

3.3.3 结果的转储与输出

4 实验结果和分析

4.1 VTU实现效果

为了测试本文所提出方法的正确性和可行性,将本文中所实现的方法接入文献[4]所提的结构中,选用Xilinx的FPGA芯片XC6VLX760对本文所提出的方法进行原型验证实现.实现流程为首先下载硬件配置文件到FPGA中运行,然后通过上位机编译软件OpenGL程序,最终观察通过VGA输出到显示器上的图像来判断所提方案的正确性.

图8 FPGA平台输出结果 图9 VS2013平台运行结果

最终输出结果与在软件VS2013平台运行结果一致,正确完成了渲染流水线中视口变换功能.图8给出了FPGA平台输出结果,图9给出了VS2013平台的运行结果.

4.2 可重构VTU结果分析

用XILINX ISE14.7对VTU进行综合,器件选用XC6VLX760-1ff1760.综合后,可重构VTU实现方案最大工作频率可以达到160.65MHz.具体器件资源占用情况由表1给出.

表1 XC6VLX760T逻辑资源占用统计表Table 1 Logic resource utilization of XC6VLX760T

表2 VTU性能对比Table 2 Performance comparison of VTU

在相同的FPGA开发板上进行原型验证,与文献[4]中采用传统采用专用硬件电路实现视口变换单元相比,表2给两种不同视口变换单元实现的性能对比数据,本文实现的可重构视口变换单元,在与专用硬件实现性能相当的同时,提高了电路的灵活性,为移动图形处理器的灵活性设计提供了思路.

5 结 论

为了充分提高移动图形处理器的灵活性特点,本文根据可重构阵列结构,提出了一种可重构视口变换单元的设计,用可重构的方式灵活的实现了3D图形渲染流水线中视口变换的功能.在Xilinx的Virtex6系列FPGA开发板上进行原型实现,并对glViewport函数的不同参数情况进行了测试.实验结果表明,本文所提出的可重构视口变换单元并行化映射实现方法,能够正确将规范化的齐次坐标映射到显示在屏幕视区上的坐标,在对不同参数情况进行正确变换的同时,与专用硬件实现性能相当,但灵活性大大提高,且更加实用.

[1] Jiao Ji-ye,Li Tao,Du Hui-min,et al.State of the art and development of mobile graphics processing unit[J].Journal of Computer-Aided Design & Computer Graphics,2015,27(6):1005-1016.

[2] Tunjic B.Computer graphics on mobile devices[J].Vienna University of Technology,2012.

[3] Patney A,Tzeng S,Seitz K A,et al.Piko:a framework for authoring programmable graphics pipelines[J].Acm Transactions on Graphics,2015,34(4):1-13.

[4] Deng Jun-yong,Li Tao,Jiang Lin,et al.Design and implementation of the graphics accelerator oriented to OpenGL[J].Journal of Xidian University,2015,42(6):124-130.

[5] Shen Xu-bang,Sun Lu.The unification research for computing paradigm[J].Chinese Journal of Computers,2014,37(7):1435-1444.

[6] Lv Qing,Jiang Lin,Deng Jun-yong,et al.A reconfigurable array structure for logarithmic and exponential functions[J].Microelectronics & Computer,2016,33(10):28-31+35.

[7] Jiang Lin,Wang Xing-jun,Liu Zhen-tao,et al.Reconfigurable array processor modeling based on systemC[J].Journal of Xi′an University of Posts and Telecommunications,2016,21(3):73-78.

[8] Zhao Jie-yi,Tang Min,Tong Ruo-feng.CUDA based shadow volume algorithm for subdivision surfaces[J].Journal of Zhejiang University(Engineering Science),2012,46(7):1301-1306.

[9] Cai W,Zhou X,Cui X.Optimization of a GPU implementation of multi-dimensional RF pulse design algorithm[C].Bioinformatics and Biomedical Engineering,(iCBBE)2011 5th International Conference on.IEEE,2011:1-4.

[10] Gao Teng-fei,Zeng Chao-yang,Hao Gang-tao,et al.Simulation of space target iamge sequence based on OpenGL[J].Computer Engineering and Design,2014,35(11):3946-3950.

[11] Shreiner D,Bill The Khronos OpenGL ARB Working Group.OpenGL programming guide:the official guide to learning OpenGL,versions 3.0 and 3.1[M].Pearson Education,2009.

附中文参考文献:

[1] 焦继业,李 涛,杜慧敏,等.移动图形处理器的现状、技术及其发展[J].计算机辅助设计与图形学学报,2015,27(6):1005-1016.

[4] 邓军勇,李 涛,蒋 林,等.面向OpenGL的图形加速器设计与实现[J].西安电子科技大学学报(自然科学版),2015,42(6):124-130.

[5] 沈绪榜,孙 璐.计算模式的统一研究[J].计算机学报,2014,37(7):1435-1444.

[6] 吕 青,蒋 林,邓军勇,等.面向对数与指数函数的可重构阵列结构[J].微电子学与计算机,2016,33(10):28-31+35.

[7] 蒋 林,王杏军,刘镇弢,等.基于SystemC的可重构阵列处理器模型[J].西安邮电大学学报,2016,21(3):73-78.

[8] 赵杰伊,唐 敏,童若锋.基于CUDA的细分曲面阴影体算法[J].浙江大学学报(工学版),2012,46(7):1301-1306.

[10] 高腾飞,曾朝阳,郝刚涛,等.基于OpenGL的空间目标图像序列仿真[J].计算机工程与设计,2014,35(11):3946-3950.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!