杨 瑛,刘文文,吴方贵
(合肥工业大学仪器科学与光电工程学院,合肥 230009)
基于GPU的可视化测量仪器软件设计
杨 瑛,刘文文,吴方贵
(合肥工业大学仪器科学与光电工程学院,合肥 230009)
提出利用显卡图形处理单元(graphics processing units,GPU)的并行信息处理能力解决仪器软件在执行海量数据处理、建模、渲染以及交互所面临的开销过大的难题,基于Direct X 11的计算着色器(compute shader,CS)实现海量测量数据的处理和建模以及高速推送渲染,建立在GPU内实现海量数据模型上点的拾取模块,以提高仪器可视化测量中的交互执行;实验比对证实了基于GPU的可视化测量仪器软件的高执行效率;研究为挖掘可视化测量仪器硬件能力、合理配置仪器CPU与GPU开销、在整体上提高仪器运行效率提供了一条有价值的技术路径。
仪器软件;可视化测量;GPU并行运算;Direct X 11
随着数字技术的突飞猛进,越来越多的测量仪器需要高效和高质量的显示以实现仪器测量结果的可视化测量。在常规仪器设计的理念中,仪器数据采集、控制、数据处理、建模渲染和交互等全部信息处理是基于CPU的,因此,在仪器硬件能力有限的条件下,难以实现高效高质量的测量显示。如何挖掘显卡处理单元(GPU)的并行信息处理能力、显著提升测量仪器的数据采集处理、控制、数据处理、建模渲染和交互的效率和容量,已经成为可视化测量仪器领域亟待解决的关键问题,这对降低可视化测量仪器制造成本,增加仪器制造商的市场竞争力具有重要的意义。
依托某委托项目,对某款电子仪器配套三维可视化分析显示功能,以实现在低端硬件设备上实现海量测试信号数据的高效处理渲染和可视化测量关键技术的突破,使其仪器产品在显示效率和效果以及软件开发技术上处于领先,以提升企业和产品的整体技术水平和竞争力。该仪器软件所面临的技术难点是在对CPU占用高约束的条件下,面对海量测试信号数据实现三维显示帧率要求高、要求特殊的推送效果、高效的可视化测量交互,包括三维和二维显示切换流畅、精准操控以及高精度标记测量结果等。鉴此,提出利用显卡GPU强大的并行计算能力,开发基于GPU的仪器可视化测量软件,将海量数据处理、建模、渲染和拾取工作推入GPU内进行,实现仪器信息处理和渲染交互功能的高效,从而把有限的CPU资源用作仪器的测量和控制,以此提升仪器整体性能以及仪器软件设计技术上的先进性。
目前Windows Direct X Graphics和OpenGL是主流显卡支持的三维开发平台,考虑到高效率的现实需求以及市场认知度,软件选择基于Direct3D11 API编程实现软件开发,借助于GPU的并行运算能力提高数据分析和处理以及渲染与交互的速度,研究三维可视化测量中的关键问题。利用Direct3D11定义的CPU与GPU的信息交换机制,建立相应模块,在GPU中实现高效推送建模渲染以及精确高效拾取可视化测量结果。
1.1 Direct3D11渲染管线、着色器及效果
Direct3D通常支持在CPU中组织表征三维模型的顶点数据,随后将这些顶点导入渲染管线(见图1虚线部分)处理成能够在显示器上显示的像素,这一过程通常在显卡中进行。渲染管线是显示芯片内部处理图形信号的相互独立的并行处理单元,具体执行从顶点数据到图像数据的处理过程。一条渲染管线可以划分成一序列可以并行和按照固定顺序进行的阶段(Stage),见图1。在硬件上,阶段可以理解为执行一种特定任务专门的并行处理单元,渲染管线的每个阶段都从它的前一阶段接收输入,然后把输出发给随后的阶段。
图1 图形渲染管道
由于硬件渲染架构的更新,每一个着色阶段都利用通用着色核实现相同的功能,同时,每一个特定的着色阶段都提供各自的额外功能。在通用着色核中,无论是常数、纹理或是缓存都被视为资源直接或者通过采样器传递给着色器代码进行处理,见图1。
随着显卡的技术进步,渲染管线变得越来越强大,渲染管线上的着色器种类越来越多,功能越来越细腻。除了渲染管线相关的着色器之外,D3D11新添加了计算着色器(Computer Shader,CS)。计算着色器是Direct3D中添加的一个新的独立于图形渲染管线的可编程着色器阶段,它与其他着色器很相似,但适用于GPGPU应用,适用于通用计算,不受图形应用的限制[1]。因此,本仪器软件确保高效率执行的策略是利用CS在GPU中进行海量测量信号数据的预处理、建模、推送、拾取等功能满足项目的高效要求,同时使得执行对CPU的占用达到最小。
1.2 海量测量数据的预处理
常规的Direct3D编程架构中需要在应用程序中编写C++代码执行输入装配阶段的操作,见图1。该阶段的任务是将测量数据重组成三维顶点,通过创建的顶点资源将顶点数据导进入GPU,基本操作包括创建输入缓存、创建输入布局对象、绑定对象、指定元图渲染格式、调用绘制方法等。考虑到仪器软件需要对海量测量数据进行预处理,包括从时域到频域数据转换、对数变换和平滑处理等,如果使用常规编程,则预处理要在CPU中执行,面对海量测量数据这一过程的开销是巨大的,并造成对CPU的大量占用。
相对于CPU,GPU最大的特点是晶体管主要被用于执行计算,存储部件很少,GPU内部独特的架构使得大量线程同时运算成为现实。因此,GPU具有强大的浮点运算能力和较高的数据传输能力,主要体现在GPU与显存之间带宽最高可达288 GB/s,系统内存到显存的带宽为15.75 GB/s,这些特点为GPU应用于数学计算提供了丰富的功能和强大的能力。文献[2-4]综合说明GPU通用计算是一种新的高性能运算,利用GPU可以加速海量数据处理,如利用GPU完成快速傅立叶变换[5]。
CS在GPU中执行多线程运算,线程是CS的基本处理单元,具体过程包括:1)为CS创建并初始化资源(常量缓存、结构缓存和可读写结构缓存);2)设置CS状态,即设定线程组数量以及每个线程组中包含的线程数量,在线程组内的线程之间可以共享数据或互相同步;3)调用ID3D11DeviceContext::Dispatch方法开启一定数量的线程组,执行计算着色器中的命令并取回运算结果。因此,仪器软件借助于CS在GPU中实现海量数据预处理,使得预处理更高效,避免了对CPU的过多占用。
见图1和2,首先把预处理所需要的参数以常量缓存的方式从CPU传递到GPU;仪器采集的生测量数据直接保存在结构缓存资源中,通过着色器资源视图绑定到渲染管线,生数据进入CS_FFT(),执行FFT计算、对折和取模计算。由于生测量数据是一维数据,数据容量明显小于常规三维顶点的数据容量,从CPU到GPU所消耗的时间大大减少。
图2 数据预处理流程
一个资源可以通过不同的资源视图被绑定到多个渲染管线阶段,故将可读写结构缓存Buffer Out1通过无序访问视图绑定到CS_FFT()输出,用来存储傅立叶变换的计算结果,也可以通过着色器资源视图将BufferOut1绑定为计算着色器CS_Q()的输入缓存,完成取对数运算。CS_Q()的输出缓存BufferOut2作为计算着色器CS_P()的输入资源,进行平滑处理;根据用户的需要(常量缓存中的数据)判断是否要进行平滑处理,计算着色器CS_P()的输出缓存Bffer-Out3即预处理的结果。预处理的结果保存在GPU的输出缓存中,可使用ID3D11DeviceContext::CopyResource()方法直接拷贝到顶点缓存进入渲染管线的顶点着色阶段。由于该方法直接在GPU内读写,速度飞快。
[10] Toshi Yoshihara & James R. Holmes, “Can China Defend a ‘Core Interest’ in the South China Sea?”, The Washington Quarterly, Spring 2011, pp. 45-59.
1.3 海量测量数据的三维推送渲染
本仪器软件在海量数据快速建模的基础上还要求支持建模数据动态更新的三维推送渲染。在三维推送渲染场景中,每一帧要求组织新数据,与前一帧的部分旧数据合并重新构建三维模型并进行渲染,形成测量结果流动的视觉效果。实现推送渲染效果归结为对GPU资源的访问操作。常规采用ID3D11DeviceContext::Map()方法获取顶点缓存的资源指针并锁住顶点缓存,通过资源指针操控顶点缓存中的数据,移动资源中的顶点数据、拷贝新的顶点数据进入顶点缓存。在此需要采用D3D11_MAP_WRITE_NO_OVERWRITE标识控制系统以覆盖的方式部分地更新顶点缓存中的数据,但需要自行处理CPU与GPU对顶点资源访问时的冲突问题,这不仅给开发增添了难度,而且研究发现由于移动和拷贝的是三维顶点数据,推送渲染帧率不能满足要求。因此,常规的方法难以实现高效的推送渲染。
顶点着色器执行的常规工作是对顶点缓存资源中的顶点数据进行坐标变换、光照处理等处理。本仪器软件将全部测量数据输入计算着色器进行预处理后送入顶点着色器,在顶点着色器在执行常规工作之前执行将顶点缓存中的一维数据装配成为三维顶点的任务,并根据一维数据的数值实现着色,在推送渲染时通过重新装配顶点数据实现三维模型的更新。由于采用在顶点着色器中将一维数据装配成为三维顶点并建立更新三维模型的策略,避免了海量数据的移动和拷贝对推送渲染帧率的制约。
图3 效果文件中顶点着色器的代码
见图3,D3D11定义的输入装配阶段生成了系统顶点ID值,其语义符为SV_VertexID,本仪器软件利用顶点ID构建三维顶点坐标x/y/z(时间/幅值/频率)值。在CPU创建色彩纹理资源,将纹理资源通过定义在效果文件中的外部变量传递到GPU中,在顶点着色阶段,根据顶点的Y值确定顶点纹理坐标,通过像素着色器的纹理采样来实现着色,随后执行顶点着色器的常规工作。当推送渲染时,依据对顶点ID的特定变换,重新构建三维顶点坐标x/y/z值,产生数据流动的视觉效果,效果图见图4。
本仪器软件中,从CPU拷贝到GPU的数据量远远小于常规算法中传递的数据量,数据预处理和动态的三维建模均利用了GPU的高速并行处理能力,大大提高了显示帧率,也降低了程序的复杂度,同时执行对CPU的占用达到了最小。
图4 动态3D模型效果
1.4 快速拾取
拾取就是通过鼠标点击三维模型,输出三维模型上鼠标拾取点的坐标。在仪器可视化测量领域,在海量数据模型上的拾取的关键问题是速度和精度。近些年来,逐渐出现了利用GPU加速的拾取算法。如张嘉华等提出利用几何着色器进行射线-几何图元求交运算的GPU拾取算法[6];文献[7-8]利用CS实现基于屏幕空间的点云拾取算法等。本仪器软件中,拾取分成三个阶段,第一阶段是构建视点与鼠标拾取屏幕上的点形成的射线在世界坐标系中的位置矢量和方向矢量,涉及屏幕上拾取点从屏幕坐标系向世界坐标系的变换,见图5。这一操作在鼠标拾取时只执行一次,计算速度的压力不大,在CPU中执行计算即可。
图5 拾取射线坐标转换过程
第二阶段是在世界坐标系内计算射线与模型的交点。由于模型是三维的、由三角面片构成,在模型上搜索射线与模型的交点需要遍历所有三角面片,找出所有与该射线相交的三角面片。因此,首先需要设计一个计算模块计算射线与特定三角面片交点,最终获得两种结果:无交点或有交点、输出该三角面片的顶点,利用该模块在世界空间中计算比较所有相交的三角面片的顶点与视点的距离,距离最小的即为拾取点。实际这一阶段需要遍历模型全部的三角面片,计算速度的压力均比较大。常规算法是在CPU中遍历所有三角面片,不仅效率低,而且对CPU占用大。
本仪器软件将这一阶段的工作全部移植到GPU内执行,见图1和图6。首先把世界坐标系下射线的位置和方向向量以常量缓存的方式传递到GPU,然后将顶点缓存复制到结构缓存BufferIn中,通过着色器资源视图绑定BufferIn到计算着色器CS_T()的输入阶段。在CS_T()中,与顶点着色器中的装配阶段一样将一维数据装配为世界空间中的三维坐标,保存在可读写结构缓存Buffer T中。最后将Buffer T绑定到计算着色器CS_Pick()输入阶段,利用CS_Pick()完成三角面片的遍历,并将与拾取射线相交的三角面片所对应的输出缓存设为1,保存在可读写结构缓存Buffer P中。由于对三角面片的遍历过程在GPU进行,确保了拾取过程的快速执行。
第三阶段从GPU中拷贝出可读写结构缓存,在CPU中计算相交三角形对应的顶点在世界空间中与视点的距离,最小距离对应的顶点,即拾取点。
整个拾取过程是在GPU内利用Direct X11的CS进行运算,得益于GPU强大的并行计算能力,与在CPU上运行的算法相比,提高了拾取速度,并且数据量越大,速度优势越明显。
图6 拾取流程图
实验使用的设备配置为CPU:酷睿i3 2130及GPU:AMD 7450的PC,通过对不同数据量建模测试,图7从左到右分别呈现的是数据量为1024*600、1024*300、512*300的测量信号数据效果图,分别得到静态显示和推送显示状态下的显示帧率(fps),见表1和表2,显然基于GPU的显示帧率明显高于基于CPU的显示帧率;与静态显示相比推送显示帧率下降不明显。
图7 不同数据量的静态模型效果图
表1 静态显示帧率
表2 推送显示帧率
拾取试验中,建模数据个数最为1 024*600。点击后显示选择的点坐标与在CPU中进行的拾取结果一致,说明基于GPU的拾取结果是正确的,如图8所示。表3呈现了拾取不同数据容量模型上点的耗时。拾取速度满足了项目要求。
图8 拾取示例
表3 拾取时间统计表
面对海量数据的分析处理和高效显示的要求,论文提出了采用Direct3D11的计算着色器在GPU内实现测量数据的预处理、3D模型和渲染以及交互的可视化测量软件的设计策略,不仅实现了高效,还减小了软件执行对CPU的占用。开发的仪器软件实现了海量数据的高效分析处理、建模推送渲染以及交互,获得了高速的数据流动视觉效果,实现了高效准确的可视化测量结果。论文提出的方法充分挖掘了仪器硬件资源的能力,为面向海量测量信息的可视化测量仪器软件设计探索了一条可行的技术路径,对于降低可视化测量仪器成本具有重要现实意义。
[1]姚 莉,高 瞻,肖 健,等.3D图形编程基础—基于Direct X 11[M].北京:清华大学出版社,2012.
[2]姚 旺,胡 欣,刘 飞,等.基于GPU的高性能并行计算技术[J].计算机测量与控制,2014,12:4160-4162.
[3]赵炳财.基于GPU技术的并行运算应用研究[D].长沙:国防科学技术大学,2012.
[4]丁 科,谭 营.GPU通用计算及其在计算智能领域的应用[J].智能系统学报,2015,01:1-11.
[5]何 涛,朱岱寅.大点数一维FFT的GPU设计实现[J].计算机工程与科学,2013,11:34-41.
[6]张嘉华,梁 成,李桂清.GPU三维图元拾取[J].工程图学学报,2009,01:46-52.
[7]付昕乐,王晏民,黄 明.基于GPU的点云拾取[J].测绘通报,2013,S1:54-57.
[8]付昕乐.精细三维空间数据交互可视化研究[D].北京:北京建筑大学,2014.
[9]Frank D.Introduction to 3D game programming with direct X 11 [M].USA:Mercury Learning&Information,2012.
[10]Akenine-Moller T,Haines E.Real-time rendering[M].2nded.Wellesley:A K Peters,2008.
Design of Visual Measurement Instrument Software Based on GPU
Yang Ying,Liu Wenwen,Wu Fanggui
(School of Instrument Science and Opto-electronics Engineering,Hefei University of Technology,Hefei 230009,China)
A strategy of designing the visual measurement instrument software,making use of the graphics card’s parallel processing abilities to decrease the overhead of processing massive data,modeling and rendering 3D graph as well as implementing interaction,is proposed in this paper.Based on Direct3D11’s Compute Shader,the instrument software is designed to rapidly achieve preprocessing mass measurement data,modeling 3D graph,pushing render implementing in GPU.And a software model is built to pick up a point on 3D model with mass vertexes implementing in GPU also,with which the interactive speed is increased sharply.The high implementing efficiency of the visual measurement instrument software is verified through experiments.The designing strategy provides a valuable technical path for making the best of hardware capabilities of the measurement instruments’hardware,reasonably balancing the overhead of CPU and GPU,and then improving the overall implementation efficiency of the instrument.
instrument software;visualization measurement;parallel computation;Direct X 11
1671-4598(2016)08-0150-04
10.16526/j.cnki.11-4762/tp.2016.08.040
:TP391.41
:A
2016-01-21;
:2016-02-25。
中央高校基本科研业务费专项资金(2012HGBZ0629)。
杨 瑛(1991-),女,安徽铜陵人,硕士研究生,主要从事仪器软件设计方向的研究。