基于CPUGPU异构并行计算优化的3D实时渲染

1. 引言
随着半导体工艺、功耗、大规模集成电路技术的不断进步,单个芯片上集成了越来越多的晶体管(可达10亿),但受到CMOS制造工艺特征的限制,单个芯片的主频已无过大的提升空间(仅有少数芯片可达5GHz以上的时钟速率)。换句话说,除非芯片制造工艺有所突破,否则单个芯片的主频不会再有提高。随着晶体管集成工艺进入瓶颈,多核、众核并行计算逐渐成为计算性能提升的主要途径;在绿高性能计算时代,CPU/GPU异构并行计算系统可兼顾性能、效能和通用性,是一种极具发展潜力的并行计算类型。
G P U逻辑电路简单(相对于通用CPU),不包含乱序执行、分支预测等耗费资源的复杂控制逻辑和多媒体处理指令,GPU通过增加晶体管资源来增强自身的并行计算能力。随着GPU编程界面及指令级功能的不断改进,其已广泛应用于非图形领域的计算,出现了一个全新领域GPGPU(General Purpose Computation on GPUs)。就目前来看,GPU的处理器数量远远高于CPU的处理器数量,如英伟达(NVIDIA)公司较早的GPU产品G80拥有128个流处理器,而最新的基于Maxwell架构的GTX TITAN X 包含了80亿个晶体管,拥有3072个
流处理器。GPU拥有的流处理器数
量较大程度上决定了其计算能力,
随着相关产业各项技术的发展,
单GPU的流处理器数量必将不断增
加,其计算能力也必将不断增强。
CPU/GPU异构并行系统充分利
用CPU和GPU各自资源做自己擅长
的事情,不仅能节省资源和成本,
也可显著提高计算能力,已成为高
性能计算领域的重要发展趋势。因
为GPU具有优异的图像处理能力,
其浮点并行计算能力尤为突出,相
对于CPU,GPU对浮点数据的计算
可达百倍加速效果,此外,GPU的
理论带宽也要明显高于CPU。但不
容忽略的是,CPU具有大容量缓存
和复杂控制逻辑,能应对各种不同
情况,尤其擅长复杂的逻辑运算,
因此使用CPU进行事务处理和复杂
中国博士后逻辑运算,GPU作为加速阵列负责
逻辑分支简单、计算密度高的大规
模数据并行任务,可最大程度利用
计算机的处理能力,实现桌面上的
超级计算。2015年世界上最快的超
级计算机为中国国防科技大学研制
的“天河二号”(每秒33.86千万
亿次浮点运算速度),其运算速度
是美国能源部下属橡树岭国家实验
室的“泰坦”超级计算机的两倍,
“天河二号”[即采用了CPU和GPU
异构并行计算方式,实现了中国高
性能计算的历史性突破。
2. CPU/GPU异构系统
半导体工艺的快速发展给GPU
和通用CPU带来了长足发展,但相
对于CPU,GPU在性能上的发展更
加迅速,这与GPU体系结构的设计
理念有关,GPU早期主要用于加速
图形处理,重点关注细粒度数据计
算,且采用的计算模型较为固定,
因此其控制逻辑简单,没有通用
CPU上耗费资源的分支预测等复杂
逻辑,能够通过集成更多的晶体资
源提升峰值计算能力。而CPU更为
关注标量和通用计算能力,其指令
基于CPU/GPU异构并行计算优化的3D实时渲染
文 | 张大勇  陈绍瑜
图 1 CPU、GPU结构对比示意图
集更加复杂,且通过使用大量硬件逻辑单元来提升计算性能,因此GPU和通用CPU分别被称为“容量型”和“能力型”处理器。
如图1所示,CPU与GPU主要区别在于结构上,CPU中的晶体管主要用作逻辑控制单元(Control)和高速缓存(cache),仅有少量晶体管用于计算(ALU)。而GPU 的晶体管主要用作计算单元,少量晶体管用于逻辑控制单元和高速缓存,这使得GPU更适合用于密集计算任务。
为更好说明G P U 并行计算结构,在此引入C U D A (C o m p u t e Unified Device Architecture,统一计算设备架构)概念,CUDA是由NVIDIA推出的一种将GPU作为并行计算设备的软硬件体系。CUDA 体系中有两个单位概念:线程(thread)和线程块(block),CUDA程序会根据实际情况调用具体的block和thread,实现数据的并行处理。此外,CPU调用线程需耗费较多的时钟周期,而CUDA 程序调用线程几乎不消耗时间。
如图2所示,C U D A  的强大计算能力来自于SPA(Scalable
Streaming Processor Array)中的大量计算单元 T P C (T h r e a d  Processing  Cluster)。SPA包含多个TPC,每个TPC又包含多个SM (Streaming Multiprocessor),这些SM共享存储器流水线,每个SM 内部资源相当于8个SIMD处理器,执行线程的最小单位为warp,其指令宽度为32。SM具有完整独立的前端,包括译码、发射、取址和执行单元等,SM通过向量机技术增强了计算性能,减少了控制开销。
GPU和CPU通过外部PCI-E总线互连(如图3所示),各自拥有自己的片外存储器,应用程序的GPU 加速流程主要包括以下三步:
范围内完成既定的计算任务。由于GPU和CPU架构不同,二者的性能衡量方法和并行优化方法也不相同,GPU的并行优化侧重于计算的密度和吞吐量,而不是单个数据的延迟。
1) 最大并行执行原则
在CUDA架构下,如何将算法进行划分才能使算法合理分配到GPU和CPU上,以获得最佳的并行执行效果,是异构并行计算优化首要考虑的问题。
首先需考虑算法的选择,算法选择应比较不同算法间的计算复杂度和效率。值得注意的是,并行实现的算法不一定就会比串行算法快,当目标问题规模较小时,计算复杂度低的算法不一定比计算复杂度高的算法耗时更短,因此,需根据问题规模的大小,选择合适的算法实现,将任务中耗时多的大规模数据并行、高计算密度的计算放到GPU上。
2) 最大内存带宽原则
内存带宽一直是计算机性能的瓶颈之一,目前内存访问速度要低于处理器的计算能力,因此,想要获得高性能的计算结果,需要对内存访问进行优化,CUDA架构提供了多种类型的内存,下面讨论如何利用各种内存特性,实现最大的可用带宽。
☆ 全局内存访问优化
由于流处理器并没有对全局存储器做缓存,因此全局存储器具有较大的延时(约400~600个时钟周期),经常成为并行运算的性能瓶颈。若想获得最佳的内存访问,
图 2 TPC架构图
图 3 CPU/GPU异构体系结构示意图
☆ 将待处理数据从CPU端存储器拷贝到GPU端存储器;
☆ 调用kernel函数执行;☆ 将数据处理结果拷贝回CPU端存储器;
由于GPU依靠并行执行大量运算单元来获取高计算性能和高吞吐率,因此,GPU计算程序常常将可并行执行、耗时较长的循环结构映射到GPU上执行。
3. CPU/GPU异构并行计算优化方法
并行计算性能优化的最终目
的是以最短的时间,在允许的误差
PCI-E 总线
CPU存储器
GPU存储器
应尽量遵循连续合并访问的原则,即被访问的内存地址需连续,而且开始必须是每个线程所存取大小的16倍。如每个线程读取32bits的数据,那么第一个线程读取的地址必须是 的倍数。
☆ 共享内存访问优化
共享内存位于GPU内部,其速度与寄存器相当,比全局内存和本地内存要快的多(其延迟仅为全局内存和本地内存的百分之几),假设每个流处理器有16KB的共享内存,每个共享内存分为16个内存模块,如果同时每个线程存取不同的内存模块,就不会产生任何问题。如果同时有多个线程同时存取同一内存模块的数据,就会发生内存模块冲突,这些线程就必须按顺序去存取,而无法同时存取共享内存,此时有效内存带宽会降低几倍,因此,共享内存访问优化的目的就是通过优化调度访问请求减少内存模块冲突。
☆ 其他类型内存访问优化
在CUDA架构里,还有常数内存、寄存器、纹理内存、主机内存等几种常用内存,下面分别介绍这几种内存的访问优化。
纹理内存能通过缓存利用数据的局部性,提高效率,其主要用途是用于查表和存放图像,以下两种情况可以获得很好的访问性能:(1)数据不能进行合并访问,采用纹理内仍能获得较高带宽;(2)随机访问数据时,若数据量较少,采用纹理内存效率也很高,当同一线程束的各个线程读取地址相近的数据,纹理内存可达到最高效率。
常数内存用于存放程序中待使用的常数,其访问速度比共享内存
要慢,比纹理内存要快。
寄存器内存是GPU上的高速缓
存,其基本单位是寄存器,执行单元
可以以非常高的速度访问寄存器。
3) 最大指令吞吐量原则
在CUDA架构下,每个线程束
的大小为32,一条指令有32个操作
组成,指令吞吐量如下式:
I t=32/T×P n
其中,P n为处理器个数,I t为
指令吞吐量,T为一个周期下执行
的操作数目。
满足最大指令吞吐量的前提是
要有足够大的计算量,如果计算量
小,则使用GPU进行并行计算并不
划算,GPU延迟要大于CPU,只有
足够的计算量才能忽略GPU延迟。
衡量计算量有两种方式:相对方式
和绝对方式。
☆ 绝对方式
若待优化的程序使用频率较
低,且每次调用需要的时间也可以接
受,那么即使进行优化也不会提升程
序性能。对于一些计算量非常小的
程序而言,使用CUDA构架进行计算
时无法隐藏访问内存和数据传输的
延迟,会造成程序执行时间反而比
CPU的长。虽然GPU对浮点数处理
能力以及带宽都远远超过CPU,由于
目前GPU大多数是通过PCI-E总线与
CPU连接,因此其输入和输出的吞吐
量受到了输入输出带宽的限制。当
要程序的计算密度很低时,执行的时
间大多数花费在输入输出上,远远大
于计算本身的时间上,则整个程序的
瓶颈就会出现在PCI-E带宽上。
☆ 相对方式
CUDA程序是由串行部分和并
行部分组成的。如果要优化的程序
中并行部分所占的比例较小,则针对
GPU进行优化获得性能的提升也比
较有限,同时也应考虑是否需要采用
GPU进行并行计算。整个性能提升
计算公式如下:
T=T s+T p
其中,T为程序执行总时间,
T p为并行部分执行时间,T s为串行
部分执行时间;假设程序执行总
时间T为1,其中串行部分执行时间
T s为0.9,并行部分执行时间T p为
0.1,若将并行执行部分进行优化
后得到10倍性能的提升,使得T p变
为0.01,则程序执行总时间变T为
0.91,其加速比仍然很小。
4. 3D 渲染优化方法
由于GPU架构的特殊性,在编
写GPU并行程序时,需要对内存的
选择、线程快大小的划分、计算量
等方面进行考虑,否则无法获得高
加速比。
1) 顶点处理
在顶点处理阶段(V e r t e x
Process),GPU在处理光照和顶点
变化上,可利用顶点缓存来提高效
率,如果目标顶点已处理过,则再
次处理时可直接从缓存中读取。
在渲染网格时,程序常常将
多个顶点缓存绑定在一起,在对顶
点进行操作前,需要为顶点进行初
始化,即分配一块内存。在初始化
期间,每个顶点数据都是从显存对
应的顶点流中被提取出来的,这些
值称为顶点属性。随着顶点数量的
增加,需要提取的属性信息也随之
增多,也就是说,当在渲染时,一
次性要处理的顶点过多,那么顶点
初始化阶段则会成为整个渲染管线的瓶颈,检测顶点处理初始化阶段是否存在瓶颈,主要有以下两个方法:
☆ 增加顶点数据大小:保持算法不变,增加顶点数据,进行性能对比,如果顶点数量增加导致新能急剧下降,则应考虑如何减少顶点数据,获得性能提升。
☆ 减少顶点数据大小:与之前的方法相反,保持算法不变,通过减少顶点数据来提高算法性能。减少顶点数据的方法是替换顶点所对应的属性信息。
2) 纹理贴图
纹理贴图(Texture)是三维渲染中非常重要的一环,就是将材质图片或纹理经过坐标变换等计算后,映射到对应三角形的像素上,并通过纹理来表示物体表面丰富的光照细节和几何细节,还可通过纹理形变来描述物体的几何形状,这样做可以显著增强三维渲染的真实感和细节度。常见的纹理贴图有很多种方法,其中多分辨率纹理贴图技术的性能最好。
在三维渲染时,过大或尺寸不符的贴图会占用过多的纹理带宽,导致GPU显存不足而频繁交换,此时,应该尽量减小或使用多分辨率纹理贴图技术。多分辨率贴图技术的核心就是纹理LOD,其根据不同精度要求,使用不同材质进行贴图,如当观察视角靠近物体时,程序会在物体表面贴上清晰度较高的材质图案,反之,程序会贴上清晰度较低的材质图案,进而提升图形处理的整体效率。现在的硬件普遍支持多分辨率纹理贴图,硬件会为纹理自动生成各分辨率下的纹理图形,然后根据实际情况进行贴图,
使用多分辨率纹理贴图可以实现
30%~40%的性能提升和节省33%的
阿伊努人内存使用率。
3) 光栅化
光栅化是一种将基本图元转化
为二维图像的过程,转化后的二维
图像像素点均包含深度和颜等信
息。由此可见,光栅化主要包括两
方面工作,一是决定窗口坐标中哪些
栅格区域被基本图元占用,二是分
配一个深度值和一个颜值到各个
区域。处理结果会被传递到下一个
片元操作,在那里利用消息更新帧
缓存中的适当区域。
在进行光栅化的过程中(如图
次同步谐振4所示),GeForce系列显卡能在
仅渲染模板值或深度值得情况下,
以双倍的速度进行渲染,要实现这
种渲染模式,必须遵循下列规则:
禁用颜写入操作、多重采样、裁
剪切面、彩替换、阿尔法测试技
术。由于实际操作过程中,模板渲
染和倍速Z-Only省去了纹理取样和
光照等操作,因此速度非常快,同
时该模式清除深度缓存非常快。
另一种光栅化性能优化技术称
为Z轴精简,其通过避免渲染被遮挡
的表面来提高性能,如果被遮挡面
上应用了非常复杂的着算法,那
传染病信息报告管理规范
么Z轴精简可以节省大量处理时间。
利用上述两个特性提升渲染
速度,最好的办法是利用“深度优
冯熙璇先”进行绘制,首先用倍速深度渲
染来绘制场景(不着),这样建
立的表面距离视点最近;然后使用商业理论
完全着渲染场景,Z轴精简则会
自动剔除无法看到的表面。
4) 反锯齿
反锯齿也称为抗锯齿,是通过
某种技术将图像边缘的“锯齿”缓
和,使图形边缘更加平滑,虽然三
维渲染技术不断提高,画面中的环
境和人物也越来越真实,但由于画
面是由上千万个像素构成,即意味
着物体轮廓处最终还是锯齿状。目
前,多数GPU硬件上都集成了反锯
齿功能,我们只需进行相应简单设
置即可实现抗锯齿的功能。
5. 结束语
本文介绍了CPU/GPU异构并行
优化方法和3D渲染优化方法,其中
并行优化主要遵循最大并行、最大
带宽和最大吞吐量三个原则;3D渲
染优化包括顶点处理、纹理贴图、
光栅化和反锯齿等几个方面,经过
优化后的CPU/GPU异构并行系统可
以实时处理3D和4K视频。
(作者单位:新奥特(北京)视
频技术有限公司)
图 4 光栅化处理过程图元组合
点光栅化
点光栅化点光栅化
三角光栅化特效

本文发布于:2024-09-24 18:27:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/71459.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:计算   内存   性能   顶点   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议