多核并行访问纹理单元的预处理方法

工程论文 2020-05-07 09:33169未知xhm
  摘要:在基于tile渲染的多核GPU中,各个处理器并行处理tile内场景。当场景中出现大量重复纹理数据时,不同tile内会采样相同的纹理坐标,导致纹理单元对相同纹理进行重复处理。针对此类情况,论文提出了两种处理方法,即固定处理模式与预处理模式。方法二对方法一进行优化,具有合并相同访问请求的功能。方法二通过对纹理数据采样请求的两次比较,解决了同一时刻与某段时间内多核出现相同纹理数据采样请求的情况,减少了纹理单元重复冗余的操作和功耗,提升了纹理映射的速度。
  关键词:GPU; 多核; TBR; 纹理单元; 预处理;

  1 引言

  随着计算机图形学技术的快速发展,用户对动画、游戏开发、虚拟现实等图形场景的真实感[1~3]的要求越来越高。纹理映射是GPU(Graphics Processing Unit,图形处理器)实现逼真效果的重要方法[4~5]。
  纹理单元是GPU中实现纹理映射的模块,可分为纹理前处理和纹理后处理,前处理部分读取纹理数据,包含纹理地址计算和纹理cache模块,后处理部分过滤纹理数据后将数据输出,包含纹理过滤和纹理数据输出模块。纹理单元接收SP(SIMT Processor,单指令多线程处理器)发来的纹理数据采样请求,地址计算模块根据纹理坐标计算出纹理数据的地址,再由地址访问纹理cache,读出纹理数据,最后根据纹理采样方式对纹理数据滤波处理,将过滤后的纹理数据返回给SP,纹理单元流水线如图1所示。
  基于tile渲染模式(Tile-based Rendering,TBR)将一帧图像划分为多个tile[6~7],为提升图像的渲染速度,通常采用多核并行渲染不同tile。当渲染的场景中存在大量重复纹理图片时,如教室内的课桌、草地、鸟群或军队等,不同tile可能用相同的纹理进行贴图。如图2所示,图中每个tile对应的纹理图像都是兔子。
  图1 纹理单元流水线
  
  图2 重复贴图的兔子
  
  在基于tile的GPU设计中,对于只有一个纹理单元的架构,多个SP同时访问纹理单元。本文提出了固定处理模式与预处理模式两种方法实现SP对纹理单元的访问。其中,预处理模式可实现多个SP用相同的纹理数据采样请求,纹理单元只执行一次操作,减少了纹理单元的功耗,提升了纹理映射的速度。本文用System Verilog语言在VCS环境下验证了两种方法,测试了4类数据集。测试结果表明当存在大量重复纹理贴图的情况下,本文提出的预处理方法能够较好提升纹理映射性能。

  2 相关研究工作

  纹理映射作为提升图像真实感的重要处理方式,国内外进行了深入的研究。
  在纹理映射综述方面,张英杰[8]等较早地介绍了纹理映射技术的发展历史和纹理映射中的图形反混淆算法,卢张平[9]等对纹理映射的算法进行分类,从二维纹理映射和三维纹理映射两个大类分别进行阐述。曾成强[10]系统地总结纹理映射技术的发展历史和纹理映射的几种经典算法,并比较了其中几种算法的优劣。
  在纹理映射算法方面,谢丰等人采用mipmap滤波对凹凸映射进行优化[11],在保证纹理凹凸感的前提下,减少了凹凸映射的计算量。Wanghai Qing等针对纹理数据大传输粒度导致CPU无法访问内存和空转的情况,提出了一种数据预取的方法[12],有效提升了渲染速度。杜慧敏和徐启超等提出了采用线性逼近的方法实现各向同性逼近各项异性滤波器[13],该算法易于硬件实现,且误差较小。
  在纹理映射架构方面董梁等提出一种实用型流水线设计结构[14],分析纹理单元的功能,并提出了一种纹理映射的设计方法,通过软件进行了功能验证。赵国宇等提出了一种高效纹理单元的硬件架构[15],采用查找表和二次多项式逼近算法优化浮点除法运算,并且动态配置纹理cache的映射方式,优化了纹理单元运算和存储带宽的性能。沈春江完成了纹理单元各模块的设计,纹理载入速率达到了每秒30帧[16]。韩立敏等提出了一种多模式并行处理硬件专用纹理引擎[17],并行实施多模式的纹理操作,显著提升了纹理贴图的执行效率。
  高分辨率的图片意味着更真实的效果,但是会增加存储容量,研究人员以减少数据大小和带宽,同时以最小化视觉影响为目的提出各种纹理压缩方案[18~19]。现在常用的纹理压缩格式有S3公司发布的S3TC(S3 Texture Compression),Imagination Technologies公司发布的PVRTC/PVRTC2(PowerVR Texture Compression),Khronos Group组织发布的ETC/ETC2,ARM公司发布的ASTC(Adaptive Scalable Texture Compression)等。不同存储格式对纹理映射性能也会产生影响,可利用纹理数据的局部性提升纹理数据访问效率[20]。Baokang Wang等提出一种Z型布局的存储格式[21],缩小了地址跨度,减少了cache冲突缺失,纹理数据可根据纹理像素坐标将Z型区域内的地址设置为连续地址。
  纹理单元实现了纹理映射复杂算法,在多核并行访问纹理单元的情况下,若存在一种检测机制,将多核发送的相同纹理数据采样请求合并为一个请求,可减少纹理单元的执行次数,降低纹理单元功耗,并提升纹理映射的速度。业界对于纹理单元并行访问机制的处理方法并没有详细的公开资料,而多核并行访问纹理单元的预处理方法对纹理映射性能有很大提升,因此该方向的研究具有重要意义。

  3 纹理映射的两种方法

  3.1 固定处理模式
  多个处理器核对应同一纹理单元的固定处理模式结构如图3所示。设定8个SP对应1个纹理单元,当多个SP同时访问纹理单元时,纹理单元首先对多个请求进行仲裁,采用自适应轮询调度算法选出当前优先级最高的SP请求。轮询调度算法[22]设定每个SP的优先级相同,防止固定优先级导致的低优先级饿死情况。
  图3 固定处理模式结构
  
  GPU在处理图像时,所有的SP不是每拍都会同时发出请求,针对此类情况采用自适应轮询调度算法。当全部SP同时发出请求时,第一拍执行SP0请求,第二拍执行SP1请求,依次轮询。但是由于SP执行的tile场景可能不同,因此不一定全部SP同时发起纹理请求,如果当前拍只有SP1、SP2和SP6访问纹理单元,那么当前的优先级为SP1→SP2→SP6,如果下一拍的请求为SP1、SP2、SP4和SP6,那么当前优先级为SP2→SP4→SP6→SP1。优先级按照0-7的顺序依次轮询,刚被执行的SP在下一拍的优先级最低,当前拍的优先级排序只在有纹理请求的SP中进行。
  纹理单元对仲裁出的请求进行处理,当多个SP访问相同纹理坐标的情况,该模式仍然对每一个访问请求进行处理,在单帧重复贴图基数大的模型场景中,纹理单元会存在大量的重复性操作,导致功耗大并且处理内容冗余。
  3.2 预处理方法
  3.2.1 预处理方法的基本思想
  根据自适应轮询调度算法确定当前SP访问请求的优先级,当出现多个SP的纹理采样点相同时,合并相同纹理采样请求,使纹理单元只执行一次纹理数据采样操作。预处理结构图如图4所示。
  预处理方法是在纹理单元的前处理部分(Tex_pre_process模块)增加外围电路,包括Arbiter模块、Req_buf模块和Data_buf模块。预处理方法通过两次比较解决了同一时刻和某段时间内出现相同纹理数据采样请求的情况,减少了纹理单元重复冗余的操作。
  图4 预处理结构图
  
  3.2.2 各模块功能及处理流程
  )发出采样请求
  图中各个SP用于渲染不同tile内场景,SP下发纹理映射请求给Arbiter模块,请求数据包含纹理映射的状态信息(如纹理坐标、SP的ID、每个SP的请求ID、纹理图片大小、纹理数组使能和阴影贴图使能等)。
  2)仲裁并处理采样请求
  Arbiter模块接收各个SP发来的纹理映射请求,根据自适应轮询调度算法得到当前拍优先级最高的SP请求,并送给Req_buf模块。
  Arbiter模块将优先级最高的SP请求与其他SP请求进行比较,如果纹理坐标相等,说明同一拍中不同SP有相同的纹理数据采样请求,这里规定其他的纹理数据采样请求为副本请求。当前节拍仲裁出的纹理请求经Req_buf送给Tex_pre_process模块,然后通过Data_buf,再由Tex_post_process模块把采样点处的纹理数据送给Arbiter模块。优先级最高的纹理请求和所有副本请求对应的SP都接收该次采样的纹理数据,上述处理过程如图5所示。
  图5 合并相同SP请求示意图
  
  Arbiter模块解决了同一拍中多个SP的纹理数据采样请求相同的问题,并行地将纹理数据返回给所有发出相同纹理坐标请求的SP。
  3)缓存不同纹理数据采样请求
  Req_buf模块接收Arbiter模块发送的纹理数据采样请求,并缓存最近n次无副本请求的纹理坐标。Req_buf深度为n,缓存的数据为纹理坐标。
  Req_buf每接收到一个新请求都会与其内部缓存的旧请求进行坐标比较,如果新请求的坐标和Req_buf某行存储的纹理坐标不相同,则缓存本次新请求,并且将新请求发送给Tex_pre_process模块读取纹理数据。如果新请求和Req_buf某行存储的纹理坐标相同,说明在n次访问内已经读取了该纹理坐标对应的数据,那么本次的请求无需发送给Tex_pre_process模块,将纹理坐标直接发送到Data_buf,读取该坐标对应行的数据,比较方式如图6所示。
  图6 新请求与Req_buf行比较图
  
  当buffer内数据存满并且新的纹理请求与buffer中任意一行不匹配,则采用先入先出的替换策略,替换n行中最先存入buffer的数据,如图7所示。
  图7 替换策略
  
  4)读取纹理数据
  Tex_pre_process模块实现纹理数据读取功能。该模块接收纹理采样请求,在经过纹理地址计算和读取纹理cache数据后得到对应坐标的纹理数据,将纹理数据和纹理坐标送给Data_buf。
  5)缓存纹理坐标与纹理数据
  Data_buf每一行存放的数据为纹理坐标和纹理数据。Data_buf深度为n,当buffer数据存满时采用先入先出的替换策略。
  Data_buf将Tex_pre_process模块输出的纹理坐标和数据缓存到buffer内,然后将接收到的纹理数据送给Tex_post_process模块。并且Data_buf会与Req_buf发送的坐标进行匹配,为未经过Tex_pre_process模块处理的请求读取数据,如果坐标命中,将相应buffer行的数据送给Tex_post_process模块,如果坐标未命中,则将该坐标存入Data_buf中的失靶buffer中,Data_buf每接收一组纹理坐标与数据都会与失靶buffer中的坐标进行匹配,直到读出纹理数据。
  6)纹理后处理
  Tex_post_process模块根据纹理映射模式对纹理数据进行过滤和格式转换等操作,由该模块得到采样点处纹理数据,然后输出给Arbiter模块。

  4 性能评价

  本文对纹理映射的两种方法进行抽象,将方法一与方法二的性能进行比较。在存在大量重复纹理图像的场景中,量化地统计方法二相较于方法一的性能提升比率。
  采用System verilog进行建模,在VCS平台仿真,时钟频率为100MHz,测试数据2048个,每个SP对应16*16的像素块,处理256个数据,不同测试集下预处理方法的速率提升结果如表1所示。
  表1 预处理模式的性能提升比率
  
  A类测试集:16*16的像素块内贴4个8*8的纹理图像,每个SP随机发送纹理坐标。
  B类测试集:16*16的像素块内贴16个4*4的纹理图像,每个SP随机发送纹理坐标。
  C类测试集:16*16的像素块内贴64个2*2的纹理图像,每个SP随机发送纹理坐标。
  D类测试集:8个SP向Arbiter模块发送纹理请求,每个发送256个,每个SP发送的纹理坐标相同。
  5 结语
  纹理映射是图形渲染管线中极其重要的一部分,它是图像真实性的有效保证,性能优越的纹理单元不仅能够保障图像的真实性,也能提升纹理映射的处理速度。对于多核并行访问纹理单元的架构,应该根据渲染图像的特点,合并相同的纹理数据采样请求,减少纹理单元的冗余操作,本文据此提出了一种多核并行访问纹理单元的预处理方法,对预处理模式的各个模块进行介绍,核心思路为采用两次比较的方式减少了冗余操作,提升了纹理单元的性能。实验结果表明,在存在大量重复纹理贴图的情况下,能够较好提升纹理映射性能。
  参考文献
  [1]杨国东.嵌入式图像处理器的研究与实现[D].济南:山东大学,2010:8-66.YANG Guodong. Research and Implementation of Embedded Image Processor[D]. Jinan:Shandong University,2010:8-66.
  [2]焦继业,李涛,杜慧敏,等.移动图形处理器的现状、技术及其发展[J].计算机辅助设计与图形学学报,2015,27(06):1005-1016.JIAO Jiye,LI Tao,DU Huimin,et al.The Current Status,Technology and Development of Mobile Graphics Processors[J]. Journal of Computer-Aided Design and Computer Graphics,2015,27(06):1005-1016.
  [3]赵沁平.虚拟现实综述[J].中国科学,2009,39(1):2.ZHAO Qinping. Virtual Reality Review[J]. Science China,2009,39(1):2.
  [4]亢祝真,陆丽娜.生成真实感图形的四大技术[J].计算机应用研究,1994(4):57-59.KANG Zhuzhen,LU Lina. Four Technologies for Generating Realistic Graphics[J]. Application Research of Computers,1994(4):57-59.
  [5]简洪登,范湘涛.基于GLSL的多重视频纹理映射与融合[J].计算机工程与设计,2014,35(11):3873-3878.JIAN Hongdeng,FAN Xiangtao. Multiple Video Texture Mapping and Fusion Based on GLSL[J]. Computer Engineering and Design,2014,35(11):3873-3878.
  [6]王佳. Tlie--based嵌入式图形处理器的研究与设计[D].济南:山东大学,2014.WANG Jia. Research and Design of Tlie-based Embedded Graphics Processor[D]. Jinan:Shandong University,2014.
  [7]朱玥. Tile-Based图形处理方法及高质量图形算法设计[D].合肥:中国科学技术大学,2012.ZHU Yue.Tile-Based Graphics Processing Method and High Quality Graphics Algorithm Design[D]. Hefei:University of Science and Technology of China,2012.
  [8]张英杰,张铁昌.纹理映射技术的发展综述[J].计算机工程与应用,1994,11(03):1-4.ZHANG Yingjie,ZHANG Tiechang. A Review of The Development of Texture Mapping Technology.Computer Engineering and Applications,1994,11(03):1-4.
  [9]卢章平,丁立军,戴立玲.基于分类的纹理映射方法综述[J].江苏大学学报(自然科学版),2006,27(S1):13-16.LU Zhangping,DING Lijun,DAI Liling. A Survey of Classification-Based Texture Mapping Methods[J]. Journal of Jiangsu University(Natural Science Edition),2006,27(S1):13-16.
  [10]曾成强.纹理映射技术算法综述[J].甘肃科技纵横,2014,43(11):40-44.ZHENG Chengqiang. A Survey of Texture Mapping Technology Algorithms[J]. Scientific&Technical Information of Gansu,2014,43(11):40-44.
  [11]谢丰,姜弢. Mipmap应用于纹理绘制的新算法及实现[J].应用科技,2008,35(4):57-60.XIE Feng,JIANG Tao. New Algorithm and Implementation of Mipmap Applied to TextureDrawing[J]. Applied Science and Technology,2008,35(4):57-60.
  [12]Wanghai Qing. Texture Transmission Optimization and Prefetching in GPU Hard Accelerated Rendering[C]//Proceedings of 2013 IEEE 4th International Conference on Software Engineering and Service Science.Beijing:IEEE Beijing Section,2013:435-438.
  [13]徐起超,杜慧敏,曾泽沧,王鹏超.各向异性滤波器的硬件实现[J].计算机辅助设计与图形学学报,2019,31(01):176-183.XU Qichang,DU Huimin,ZHENG Zecang,et al. H-ardware Implementation of Anisotropic Filter[J]. Journal of Computer-Aided Design&Computer Graphics,2019,31(01):176-183.
  [14]董梁,刘海,韩俊刚.图形处理器中光照和纹理映射的设计与仿真实现[J].计算机科学,2011,38(2):284-301.DONG Liang,LIU Hai,HAN Jungang. Design and Simulation Implementation of Lighting and Texture Mapping in Graphics Processor[J]. Computer Science,2011,38(2):284-301.
  [15]赵国宇,郭炜,常轶松.一种高效纹理映射单元的硬件体系结构设计[J].计算机工程,2013,39(5):92-105.ZHAO Guoyu,GUO Wei,CHANG Tiesong. Hardware Architecture Design ofan Efficient Texture Mapping Unit[J]. Computer Engineering,2013,39(5):92-105.
  [16]沈春江.面向OpenGL图形流水线的纹理载入单元设计与验证[D].西安:西安电子科技大学,2018.SHEN Chunjiang. Texture Loading Unit Design and Verification for OpenGL Graphics Pipeline[D]. Xi'an:Xidian University,2018.
  [17]韩立敏,田泽,郑新建,等.多模式并行处理纹理引擎硬件体系结构设计[J].无线电工程,2018,48(06):457-462.HAN Limin, TIAN Ze, ZHENG Xinjian, et al.Multi-mode Parallel Processing Texture Engine Hardware Architecture Design[J]. Radio Engineering,2018,48(06):457-462.
  [18]NAWANDHAR A A. 3D Graphics Texture Compression and Its Recent Trends[J]. International Journal of Engi Jneering Research and Applications(IJERA),2013,3(2):1381-1385.
  [19]叶继珍.纹理图像压缩的研究[D].济南:山东大学,2016.YE Jizhen. Research on Texture Image Compression[D].Jinan:Shandong University,2016.
  [20]郝武,杜慧敏,张丽果,等.嵌入式GPU中U型存储布局tile缓存的设计与实现[J].微电子学与计算机,2019,36(3):91-95.HAO Wu,DU Huimin,ZHANG Liguo,et al. Design and Implementation of U-Storage Layout Tile Cache in Embedded GPU[J]. Microelectronics&Computer,2019,36(3):91-95.
  [21]Wang B K,Fukazawa Y,Kondo T,et al. A Cache Memory With Unit Tile and Line Accessibility[C]//ACIS 15th International Conference on Computer and Information Science(ICIS). Austria:IEEE,2016:866-874.
  [22]杜建辉. DiffServ网络中一种改进的round robin公平加权调度算法[J].现代有线传输,2005(06):48-50,72.DU Jianhui. An Improved Round Robin Fair Weighted Scheduling Algorithm in DiffServ Network[J]. ModernWired Transmission,2005(06):48-50,72.

53学术论文网 Copyright @ 53论文网 All Rights Reserved. 版权所有


友情链接: 北京财经网