




已阅读5页,还剩78页未读, 继续免费阅读
(计算机应用技术专业论文)基于gpu的光线跟踪及虚拟眼视光学仿真.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要虚拟器官的建模与仿真是当前生物医学工程学研究的重要课题。眼睛作为人体中一个极为精密且十分重要的器官,其建模与仿真的实现具有十分重要的意义。本文是“中国人虚拟眼结构和功能模拟与建模研究”课题的组成部分之一,为建立“中国人虚拟眼”做先期的探索和研究。作为虚拟眼功能模型研究的组成部分,本文围绕视光学仿真系统的建立展开了一系列基础研究工作。文章较为充分地研究了当今热门的g p g p u ( 基于图形处理器的通用计算) 技术概念原理以及实现方法,提出一套g p g p u 通用计算框架,在g p u 上实现了虚拟眼的光线跟踪算法,并对其进行了分析和一定的改进优化。在视光学仿真方面,文章集合了众多前期模型研究的成果,以基于g p g p u 的光线跟踪技术为核心,提出虚拟眼视光学仿真系统的模型,并实现了初步的系统。本文的主要研究内容及创新之处:1 在对g p g p u 技术的理论、实施要点以及其局限性进行了较为深入的研究之后,针对科学计算领域g p g p u 普及困难以及标准混乱的现状,独创地提出了一套通用的g p g p u 计算框架。2 将光线跟踪算法引入对角膜晶状体等的光线折射等的研究,从微观角度和仿真计算的手段来研究眼的光学成像机制。研究并实现了基于g p u 的虚拟眼光线跟踪算法,相比于c p u 算法取得了非常显著的性能提升。3 突破了传统g u l l s t r a n d - e m s l e y 模型眼,结合角膜地形图以及晶状体参数化模型构造了虚拟眼视光学仿真系统,进行了初步的仿真分析研究。在获得比较理想的实验效果的同时最大限度提高了提供了系统的灵活性,也为后续的综合仿真研究打下了良好的基础。关键词:g p u 通用计算,光线跟踪,视光学仿真a b s t r a c tm o d e l i n ga n ds i m u l a t i o no fv i r t u a lo r g a n si sav e r yp o p u l a rr e s e a r c hd o -m a i no fm o d e r nb i o m e d i c a le n g i n e e r i n g a so n eo ft h em o s ti m p o r t a n to r g a n so fh u m a nb o d y ,t h ev i r t u a lm o d e la n ds i m u l a t i o ns y s t e mo fh u m a ne y e sh a sv e r yi m p o r t a n tt h e o r ym e a n i n ga n da p p l i c a t i o nv a l u ef o rt h eo p h t h a l m o l o g i c a lp h y s i o l o g y , p a t h o l o g y , a n dc l i n i c a sap a r to fr e s e a r c ho nc h i n e s ev i r t u a l - e y ef u n c t i o n a lm o d e la n ds i m u l a -t i o ns y 8 t e m ,t h i sp a p e rw o u l df o c u so nf u n d a m e n t a lt e c h n i q u ea n dc o n s t r u c t i o no fv i r t u a l - e y eo p t i cs i m u l a t i o ns y s t e m ag p ub a s e da p p r o a c ht or a y - t r a c i n ga l g o r i t h mi se s t a b l i s h e di nt h i sp a p e ra f t e ra n a l y s i sa n dd i s c u s s i o no fm o d e r ng p g p uc o n c e p t i o na n dt e c h n i c a ld e t a i l s t h e n ,t h ei m p l e m e n t a t i o no fo p t i cs i m u l a t i o ns y s t e mo fv i r t u a l - e y e ,i sc o n s t r u c t e d ,w h i c hp r o v i d e st h ef u n d a m e n tf o rf u r t h e rf i m c :t i o n ms t u d i e so fv i r t u a le y er e s e a r c h t h em a i nc o n t e n t sa n dc o n t r i b u t i o n so ft h i sd i s s e r t a t i o na r ea sf o l l o w s :1 a f t e rr e v i e wa n da n a l y s i so f t h eg p g p u sc o n c e p t i o n i m p l e m e n t a t i o na n dl i m i t ,ao r i g i n a lg e n e r a lc o m p u t i n gf r a m e w o r kf o rg p g p ui sc o n s t r u c t e d ,i no r d e rt op r o v i d ea ns i m p l es t a n d a r dm i de a s et h ed i f f i c u l t yo fw r i t i n gg p uc o d ef o rs c i e n t i s t s 2 i n t r o d u c er a y - t r a c i n ga l g o r i t h ma san e wa p p r o a c hi n t or e s e a r c ho f v i r t u a l -e y eo p t i cs i m u l a t i o n p r o v i d ea l lg p ub a s e di m p l e m e n t a t i o no fr a y -t r a c i n g ,w h i c hs h o w sq u i t eg o o dp e r f o r m a n c e 3 i n t e g r a t et h et r a d i t i o n a lg u l l s t r a n d - e m s l e ye y ew i t hc o r n e a lt o p o g r a p h i ca n dp a r a m e t r i cm o d e l i n go fc r y s t a l l i n el e n s ,a n dc o n s t r u c tav i r t u a l - e y eo p t i cs i m u l a t i o ns y s t e mb a s e do ng p ur a y - t r a c i n g k e y w o r d s :g p g p u ,r a y - t r a c i n g ,o p t i cs i m u l a t i o n1 u插图索弓2 13 d 渲染基本原理图2 2d i r e c t x 渲染流程图2 3 顶点引擎架构,2 4 像素引擎架构2 5e z g p g p u 系统结构图,2 6u n i f o r m f a c t o r 接口示意图2 7g p g p u 内部原理图2 8g p g p u 尺寸一致原则层叠示意图2 9 顺序结构2 1 0f o r 循环结构2 1 1 单核心w h i l e 循环结构2 1 2 多核心w h i l e 循环结构传统的光线跟踪算法视光学仿真中的光线跟踪平面参数坐标系光线折射示意图光线一物体碰撞检测的算法光线一物体碰撞检测算法性能测试光线折射算法性能测试人眼水平切片图视光学仿真模型图角膜地形仪的原理图由o r b s c a n i i 系统得到的角膜地形图角膜前表面的角膜地形图0 ,00坞埒协如加组殂笳弱弱驵弘勰必蟠驵船1234567123453333333444444 6 裂隙灯显微图像以及对角膜的曲线拟合4 7 拟合得到的角膜前表面网格模型4 8 晶状体参数化模型4 92 组典型晶状体模型图4 1 0 视光学仿真系统结构图4 1 l 视光学仿真系统原理图4 1 2 球面扭曲校正4 1 3 对曝光过度的成像进行处理4 1 4 多点光源仿真效果图4 1 5 简单图像数据仿真一原始图像4 1 6 简单图像数据仿真一仿真结果图像的卯骝n缸眈鸥融表格索引纹理目标模式对比e z g p g p u 测试平台环境e z g p g p u 性能测试结果传统光线跟踪与视光学仿真中的光线跟踪比较光线一物体碰撞检测算法性能测试1 光线一物体碰撞检测算法性能测试2 光线一物体碰撞检测算法性能测试3 光线折射算法性能测试2 组典型晶状体参数多点光源仿真,简单图像数据仿真h 拢船盯盯盯;w 船以123l234512322233333444厦门大学学位论文原创性声明兹呈交的学位论文,是本人在导师指导下独立完成的研究成果。本人在论文写作中参考的其他个人或集体的研究成果,均在文中以明确方式标明。本人依法享有和承担由此论文产生的权利和责任。声明人( 签名) :7 i 矿6 年黾1 日厦门大学学位论文著作权使用声明本人完全了解厦门大学有关保留、使用学位论文的规定。厦门大学有权保留并向国家主管部门或其指定机构送交论文的纸质版和电子版,有权将学位论文用于非赢利目的的少量复制并允许论文进入学校图书馆被查阅,有权将学位论文的内容编入有关数据库进行检索,有权将学位论文的标题和摘要汇编出版。保密的学位论文在解密后适用本规定。本学位论文属于1 、保密f) ,在年解密后适用本授权书。2 、不保密( ) 。f 请在以上相应括号内打“”)作者签名:导师签名:日期:”彳年日期“年月日舌月日栅舷* 缆第一章绪论1 1引言1 2 课题的研究背景以及国内外研究现状数字化虚拟人相关技术是当前生物医学工程研究的热点领域之一。自从8 6年美国国家医学图书馆【l j 首次提出了“可视人计划”f 2 j 之后,世界范围从事相关研究的科学家越来越多。数字化虚拟人改变了医学可视化的模式,为虚拟世界进入现实医学敞开了大门。数字化虚拟人对于增进对人类自身的认识、促进医学的发展有重要的科学意义,它将人体结构和功能信息数字化与可视化,建立能够为计算机处理的数学模型,使得借助于计算机的定量分析计算和精确模拟成为可能。随着信息获取和处理技术的进步、数据采集精度的提高,将在越来越精确和广泛的程度上模拟人体的功能和行为。数字化虚拟人体模型具有广泛的应用前景:可为医学研究、教学与临床提供形象而真实的模型;为疾病诊断、新药和新的医疗技术的开发提供参考;促进形成新一代医疗高新技术产业,大大加速我国医学教育和临床的现代化。在这个“虚拟人”研究的热潮中,虚拟器官的建模与仿真是当前国际上研究的前沿课题,也是目前世界范围内生物医学工程研究的热点。对于结构、物理和功能的建模研究涉及到各种器官和组织。国际上从事虚拟器官研究的科学家很多,各种虚拟器官如虚拟心脏、虚拟脑等的研究工作都有报道。虽然虚拟器官的研究由来已久,但是关于虚拟眼方面的研究一直没有能够很好地展开。究其原因,是眼睛体积虽小但结构却异常精细复杂,研究难度非常大。和其他虚拟器官以及虚拟人模型研究类似,虚拟眼的研究也主要包括如下3 个方面的研究:形态模型、物理模型、功能模型。形态模型是利用计算机技术重建的眼的三维几何形态的模型以及在此基础上的相关绘制、分割等研究,属于虚拟眼研究的初级阶段。物理模型引入了眼内各组织结构的材料特性,是以我们关心的结构的弹性模量、黏性系数等参数共同构造的模型。物理模型可以能够很好地模拟在生理、病理和手术等原因引起的外界条件变化时眼内各结构可能发生的相应改变。在虚拟器官的各项相关研究中,最为重要也是难度最大2基于g p u 的光线跟踪及虚拟眼视光学仿真的是对器官的功能模拟。所谓的功能模拟就是要模拟器官内各项主要的生理或病理机制的运行过程,推断出可预见的未来状态。目前虚拟器官的研究仍主要侧重于形态模型和物理模型仿真阶段,功能模型的研究尚未全面开展,特别是在虚拟眼方面,国内对虚拟眼的视光学模型的研究和仿真试验尚未有相关方面的报道。更为重要的是,基于虚拟眼的视光学模型研究以及仿真试验对于虚拟眼的研究以及在临床医学上的应用将具有重大的意义。1 2 1问题的提出:视光学研究面临的挑战作为人体感觉功能的重要组成部分,视觉被公认为是影响生活质量的最主要因素之一。眼球是人体视觉系统中的一个重要组成部分,是一个精密的光学成像及感光系统。眼睛作为一个光学系统,与照相机有很多相似点,具有很高的精密性,其分辨能力接近于理论极限。眼屈光系统从总体上说是凸透镜成像,经过一系列的折射、反射作用,最终成像于视网膜上。为了建立一个适用于进行眼球光学系统理论研究的模拟人跟的光学结构,人们设计了模型眼,在模型眼的设计中会忽略很多非重点的复杂部分。现在被最广泛接受的一种模型眼,即g u l l s t r a n d - e m s l e y 模型眼,大多数对于眼的光学系统的研究都是在这个模型基础之上进行的。然而,尽管有了模型眼,视光学研究面临如下不可忽视的挑战:传统模型眼一般是基于统计数据的,存在很大的共性,不能体现个体的特征,不能用于特例病例分析的固有缺陷。传统视光学研究一般都是采用宏观角度来进行分析,即只泛泛分析屈光力等等参数,无法形成细致的微观分析结果。如果考虑仿真成像技术,但是多层的折射计算以及碰撞检测,会造成整体运算量几何级数增长,采用c p u 编写的算法运行非常缓慢。本课题研究的目标是眼的光学成像功能以及相关的运行机理,突破传统g u l l s t r a n d - e m s l e y 模型眼的限制,努力建立起一套能够在一定程度上模拟人眼的光学系统功能的虚拟眼视光学模型和仿真系统。此外,由于传统光线仿真计算量巨大,在实际使用过程中因为运算速度缓慢难以发挥更大的作用。本课题将研究基于g p u 的光线跟踪算法,借助于g p u 的并行运算架构对于向量、矩阵运算的强大支持,实现高速的虚拟眼光线跟踪仿真。第一章绪论31 2 2课题研究的技术背景:g p u 技术发展现状伴随着p c 级微机的崛起和普及,多年来计算机图形的大部分应用发生了从工作站向微机的大转移,而这种转移甚至发生在像虚拟现实、计算机仿真这样的实时( 中、小规模) 应用中。实时应用的计算机游戏的普及亦是这一发展的标志。这一切的发生从很大程度上源自于图形硬件的发展和革新。随着计算技术和集成电路技术的发展,图形硬件即图形处理器g p u ( g r a p h i c sp r o c e s s i n gu n i t ) 的更新速度迅猛。随着g p u 的巨大变革,今年来图形处理器g p u 已经从传统的固定功能的图形处理单元演变为具有大规模数据并行处理能力的多管道流式架构处理器,甚至已经可以提供1 0 倍以上传统c p u 的运算能力。这些新特征无疑加快了g p u 在非渲染方面的应用。目前,基于g p u 的通用计算( g p g p u :g e n e r a lp u r p o s ec o m p u t a t i o no i lg r a p h i c sp r o c e s s o r s ) 【3 】已经成为了一个国内外广泛研究的热点。2 0 0 3 年被认为是图形硬件被用来做通用计算的一个里程碑,g p u计算在2 0 0 3 年已经进入计算的主流。基于g p u 的通用计算技术目前主要应用于代数计算、偏微分方程数值求解、通用图像处理、频谱变换和滤波、几何计算、碰撞检测、运动规划、优化计算等方面。在本文中,g p u 通用计算技术将成为视光学仿真研究的重要的技术手段和实现基础。1 3 课题主要研究对象以及创新之处本课题的研究主要关注如下几个焦点问题,并以之为基础尝试提出一些独创的方案来解决问题。首先是对于g p g p u 技术的兴起,我们如何认识和了解g p g p u 技术的实施要点以及其局限性。在科学计算领域,如何最大限度利用g p g p u 技术。以及,g p g p u 技术在实际使用过程中的需要遵循的框架。本文将尝试去构造一个通用计算框架来解决悬而未决的标准问题。其次,对传统的光线跟踪算法来说,往往只是应用于各种三维渲染,如果能将光线跟踪算法引入对角膜晶状体等的光线折射、反射等的研究,就可以从微观角度来研究眼的光学成像机制。同时,研究基于g p u 的光线跟踪算法,借助于g p u 芯片对于向量、矩阵运算的强大支持,实现高速的虚拟眼光线跟踪仿真。4基于g p u 的光线跟踪及虚拟眼视光学仿真最后,在虚拟眼视光学仿真研究中,突破传统g u u s t r a n d - e m s l e y 模型眼来进行研究,结合角膜地形图以及晶状体参数化模型等,并在此基础上进行仿真计算,也是研究的一个重要组成部分。1 4 本文组织结构及章节安排本文将主要从以下几个部分进行阐述:在本文第二章中将首先概述g p g p u 概念原理以及相关研究的发展现状,在此基础上提出一套原创的g p g p u 通用计算框架,并阐述框架的设计原理和思路,以及提供性能量化分析。第三章主要讲阐述视光学仿真的核心技术,即光线跟踪技术的概念原理以及各种改进算法,并在g p u 上实现其加速算法。第四章将以之前的光线跟踪技术为主导,提出视光学仿真系统的原始模型、系统构成以及初步的的算法实施。最后是结论和展望,总结本文的工作,并提出进一步深入研究、改进的构想。本文科研课题受到国家自然基金( 项目批准号:6 0 3 7 1 0 1 2 ) ,福建省科技重点项目 目号:2 0 0 2 y 0 2 1 ) ,厦门市科技计划重点项目( 编号:3 5 0 2 2 2 0 0 4 1 0 4 4 ) 的经费资助。第二章g p g p u :g p u 通用计算技术研究2 1g p u 背景及其发展现状伴随着p c 级微机的崛起和普及,多年来计算机图形的大部分应用发生了从工作站向微机的大转移,而这种转移甚至发生在像虚拟现实、计算机仿真这样的实时( 中、小规模) 应用中。实时应用的计算机游戏的普及亦是这一发展的标志。这一切的发生从很大程度上源自于图形硬件的发展和革新。随着计算技术和集成电路技术的发展,图形硬件的更新速度迅猛。g p u ( g r a p h i c sp r o c e s s i n gu n i t ) 自1 9 9 9 年首先由n v i d i a 公司提出来以后,就其发展的速度而言,是c p u 更迭速度的三倍多。新的图形硬件带来一些新的特征【4 5 】,这些特征概括起来有如下几方面f 6 】:1 在顶点级和像素级提供了灵活的可编程特性;2 在顶点级和像素级运算上都支持i e e e 3 2 位浮点运算;3 支持多遍绘制的操作,这样避免了多次的c p u 与g p u 之间的数据交换;4 支持绘制到纹理的功能( r e n d e r - t o - t e x t u r e f r a m e b u f f e r o b j e c t ) ,从而避免将计算结果拷贝到纹理这一比较费时的过程;5 支持依赖纹理功能,以方便数据的索引访问,可以将纹理作为内存来使用。相对于以前采用固定渲染管道的图形硬件,上述提到的这些新特征无疑加快了g p u 在通用计算方面的应用。2 0 0 3 年被认为是图形硬件被用来做通用计算的一个里程碑f 7 ,而文章【8 】提出g p u 在2 0 0 3 年已经进入计算的主流1 3 】。而采用图形硬件来做通用计算的主要目的则是为了加速,加速的动力来自这些新硬件所具有的以下主要优势:一定的并行性这一功能主要是通过多个渲染管道和r g b a 四个颜色通道同时计算来体现的,另外在一个时钟周期内可以同时获取2 个甚至更多幅纹理。顶点程序的多个渲染管道意味着一个时钟周期可以并行处理多个顶点,而对于像素程序同样如此。相对于并行机而言,图形卡提供的并行性虽然很弱,但它在十分廉价的基础上为很多应用提供了一个很好的并行方案,尤其是对于图形本身的应用来说。6基于g p u 的光线跟踪及虚拟眼视光学仿真高密集的运算由于图形卡内部的内存接口位宽( 一般有1 2 8 _ 2 5 6 b i t ) 明显大于c p u 上的位宽,这样整个计算的带宽大大提高。g p u 相对于c p u 来说,更适应传输大块的数据,虽然c p u 上有c a c h e 以加速整个计算过程,但c p u 上的c a c h e 相对于图形卡显存来说太小,一般只有6 4 k b ,而现在的显存大多都在6 4 m 以上,由此可见一斑。减少了g p u 与c p u 的数据通信不再需要在c p u 与g p u 之间进行多次数据交换,从而可以让c p u 解放出来做其他的事情。这些优势使得g p u 比c p u 更适用于流处理计算,因此g p u 也被认为是一个s i m d 的并行机或者流处理器【9 】,可以用于处理大规模数据集,使得应用得到加速。2 2现代g p u 渲染原理及其工作流程2 2 1计算机3 d 渲染基本原理和流程在计算机三维图形领域,人们普遍使用一组或者多组覆盖物体表面的多边形来近似地表示真实世界的物体。在实际使用中,又以三角形网格( t r i a n g l em e s h ) 使用的最多,这些网格构成了物体的线框模型。物体运动的运动就等价于三角形顶点的运动。凼匮盛图2 1 :3 d 渲染基本原理图3 d 渲染的本质就是将3 d 物体投影到2 d 的屏幕上。一般来说,可以大致分成两个部分:一是几何部分,二是光栅部分。几何部分主要负责将物体线框模型的三角形顶点由3 d 坐标系转换到2 d 屏幕坐标系。光栅部分则具体绘制这些三角形内部的各个像素。实际3 d 渲染还需要包含其他许多步骤。例如,在几何部分,不仅对顶点坐标进行了变换,还同时根据一定的光照模型和材质,计算了顶点颜色,这对于产生具有真实感的3 d 场景非常重要。3 d 应用程序的渲染绘制过程如图2 2 所示( d i r e c t x 标准【l o 】) 。第二章g p g p u :g p u 通用计算技术研究7图2 2 :d i r e c t x 渲染流程图2 2 2可编程g p u 渲染管道传统g p u 的一个共同特征就是都只实现了固定功能的渲染流水线,而不具备可编程能力。与这些图形硬件相匹配,主要的3 da p i 例如d i r e c t 3 d 和o p e n g l 是作为一个状态机实现的,用户通过3 da p i 提供的函数设置好相应的状态,例如变换矩阵、材质参数、光源参数、纹理混合模式等,然后传入顶点流。图形硬件则利用内置的固定渲染流水线和渲染算法对这些顶点进行几何变换、光照计算、光栅化、纹理混合、雾化操作、最终将处理结果写入帧缓冲区。这种渲染体系限制用户只能使用图形硬件中固化的各种渲染算法。这虽然可以很好的满足对渲染质量要求不高的应用,但难以满足那些需要更高的灵活性和客户定义的实时图形应用。用户己经不再满足于基于顶点的近似和简单的多纹理混合,它们需要硬件加速的角色动画支持,需要使用定制的光照模型,需要非真实渲染( 卡通渲染、素描渲染) 。对于这些灵活需求,如果在g p u 中一一为之设计专门的电路,其成本显然是无法接受的i n 。因此,满足这些需求的唯一途径就是硬件可编程性。在现代g p u 的3 d 渲染流程中,一般具有两条可编程流水线:p r o g r a m m a b l ev e r t e xp i p e l i n e ,也被称为顶点引擎( v e r t e xe n g i n e ,v e ) ,它由算术逻辑单元和相应的寄存器组成。p r o g r a m m a b l ep i x e lp i p e h n e ,也叫像素引擎( p i x e le n g i n e ,p e ) ,和顶点处理器的组成类似,但多了纹理寻址的功能。这两个可编程引擎的推出,分别可以取代相应的固定流水线,在3 d 引擎发展史上具有十分重要的意义。而可编程引擎,除了为g p u 提供了更加强大和灵8基于g p u 的光线跟踪及虚拟眼视光学仿真活的3 d 渲染能力之外,也给g p g p u 的诞生提供了条件。v e r t e xd a t wr t 嘀t e r s田围伽pora曼ryre萄sten囤y圈圈o u t p u tr e g i s t e r s团图2 3 :顶点引擎架构t e x 柚r er e g b s l e r s茹i 甲臼囡黧c 。 o rr e g i s t e r s冈冈凸c o n s t a n tr t - o l s t o n t回团图妇圆回国圈回凸o u l p u 矿怕m p o 瞳r yr e g i 咖m图2 4 :像素引擎架构顶点着色器( v e r t e xs h a d e r ,v s ) 就是运行于v e 之上的程序,它的工作是进行几何变换和光照计算等操作。而运行于p e 之上的像素着色器( p i x e l第二章g p g p u :g p u 通用计算技术研究9s h a d e r ,p s ) 则主要进行纹理混合等操作。v s 的输入是顶点流,每一个顶点通常含有多个属性,例如顶点坐标、法向量、颜色和纹理坐标等。v s 输出的是处理后的顶点流。后者经固定的光栅化模块进行三角形组装和光栅化处理后,生成像素流送入p e ,对于每一个像素,通常也会有多个属性,这些属性由三角形顶点的属性插值而来。像素着色器通过访问纹理,进行纹理混合并最终计算出像素的颜色与深度信息,送入后续流水线以进行透明、深度、模板与雾化等操作。一个图形处理器中一般包含多个顶点处理器和多个像素处理器。同类型的处理器上运行的总是同一个着色程序的拷贝,这些s h a d e r 并行运行,处理输入流中的不同数据元素。输入流中的数据元素类型相同,并且彼此之间相互独立无关。s h a d e r 在一个处理器上的每一次运行只能处理输入流中的一个元素。顶点处理器和像素处理器都没有内存的概念,所有的运算都在寄存器之上进行。每一个寄存器都是4 维向量寄存器,指令集中的指令可以同时对4 个分量进行运算,因此可以把它们看作是一个基于寄存器的向量处理器。输入寄存器用于存放当前被处理的顶点的属性,例如顶点位置、法向量、颜色和纹理坐标。常量寄存器用于为顶点程序提供只读常量参数。只写的地址寄存器用于间接访问常量寄存器。临时寄存器用于保存中间运算结果。只写的输出寄存器则用于输出处理后的顶点属性。颜色输入寄存器用于存放像素的输入颜色。只读的纹理坐标寄存器存放纹理坐标,用于纹理采样。只写的输出寄存器用于输出处理后的像素颜色和深度值。由于顶点处理器和像素处理器具有了可编程能力,因此g p u 厂家在设计它们的体系结构,特别是输入输出寄存器时,必须遵循一定的规范。只有这样,设计出的g p u 才能在底层具有统一的编程界面,才能被广大程序员所接受。例如微软推出的s h a d e rm o d d 正是这样的顶点像素处理器设计规范。迄今为止,s m 己经推出了s h a d e rm o d a l3 0 。符合s m 规范的v s 和p s ,可以运行在所有支持s m 的g p u 之上。也正因为如此,通用的3 d 程序才可能存在。s h a d e rm o d e l 的主要内容包括:顶点像素处理器的指令集寄存器的名称、用途和数量处理器的计算精度下限处理器支持的语法特性一是否支持动态转移、子函数调用等指令槽大小的下限1 0基于g p u 的光线跟踪及虚拟眼视光学仿真2 2 3g p u 高级着色语言如前所述,v s 和p s 是运行在g p u 上的程序。这种程序很自然能地可以使用s m 定义的汇编指令集来编写。事实上,早期可编程g p u 的v s 和p s 通常都是用汇编语言写的,因为当时v s 和p s 所支持的指令数量都很有限。但是随着v s 和p s 的规模不断扩大,再继续使用汇编语言显然效率太低。因此,着色器高级开发语言开始出现。2 0 0 2 年,n v i d i a 推出了c g ( cf o rg r a p h i c s ) 语言【1 2 l ,而随着d x 9 0 的发布,微软则推出了高级着色器语言h l s l ( h i g hl e v e ls h a d e rl a n g u a g e ) 1 3 。h l s l 与c 语言类似,有一个主函数( 在h l s l 中,被称为入口函数) ,支持顺序、条件和循环三种结构,支持子函数调用,有局部变量和全局变量等概念。当然在编译器层面,这些语法概念都和c 语言不同。在编写h l s l 程序时,与c 语言唯一比较大的区别是:h l s l 主函数的输入参数和返回值不能自由定义,必须在程序中显式的指明它们和顶点像素处理器的输入输出寄存器的对应关系。相对应的,作为跨平台的工业标准a p i 的o p e n g l 1 4 在推出o p e n g l2 0 标准之时,把之前各厂商扩展的以及由监督机构o p e n g la r b ( o p e n g la r c h i t e c t u r er e v i e wb o a r d ) 描述的a p i 统一为g l s l ( o p e n g ls h a d i n gl a u -g u a g e ) 【l5 】,并列入标准的核心说明之中。与h l s l 类似,简洁明了的g l s l 也非常接近c 语言的风格,用户不必再学习一种新的语言。而且,g l s l 作为跨平台的工业标准可以在众多平台上运行这一点也是其优势所在。h l s l 、g l s l 等高级着色器编程语言的提出,极大的提高了编写s h a d e r 程序的效率。同时也使得g p g p u 的研究和应用更加方便。因为研究者不必再过分关心v e 和p e 的具体细节,可以把更多的精力集中在算法的开发上。2 3g p u 通用计算技术概述基于g p u 的通用计算( g p g p u :g e n e r a lp u r p o s ec o m p u t a t i o no ng p u )指的是利用图形卡来实现一般意义上的计算【3 ,而不单纯是绘制。本章关注的就是如何利用g p u 来实现矢量、矩阵的基本代数运算以及基本图像处理操作。基于g p u 的通用计算技术目前主要应用范围也越来越广泛,从图形输出流水线以外的非绘制处理,到几何计算、碰撞检测、运动规划、代数运算、优化第二章g p g p u :g p u 通用计算技术研究计算、偏微分方程p d e s ( p a t t i a ld i f f e r e n t i a le q u a t i o n s ) 数值求解等,不一而足f 1 6 】。t h o m p s o n 1 7 等人利用3 d 引擎的可编程顶点流水线实现了一个代数运算的框架系统,其中包括矢量运算和矩阵乘法。k r u g e r 7 等人则利用像素流水线来完成基本的代数运算,并在此基础上实现了共扼梯度法和高斯一赛德尔迭代法,从而完成流体p d e s 的求解。b o l z 1 8 等人实现了基于像素编程的稀疏非结构化矩阵的共扼梯度法和正交网格的多重网格法,并用于加速几何处理和流体模拟。h i l l e s l a n d 1 9 等人将最速下降法和共扼梯度法求解带有简单约束和规则化的非线性最小二乘优化问题映射到图形硬件上,并将其应用到图像建模上。g o v i n d a r a j u 等人 2 0 1 利用g p u 来进行快速碰撞检测。s u d 等人【2 1 】采用g p u 来加速三维距离场的计算。t o m o v 等人【2 2 】则用g p u 来进行蒙特卡洛仿真等等。2 3 1g p g p u 概念模型研究g p g p u 技术的权威网站g p g p u o r g 提出了包含以下5 点的g p g p u概念模型( g p g p uc o n c e p t ) 【3 1 。目前一般g p u 通用计算都遵循这个概念模型,借助g p u 像素着色器( p i x e l f r a g m e n ts h a d e r ) 来完成保存于纹理中的数据的并行计算。1 离散化原始数据,并分配纹理空间存储数据。2 编写f r a g m e n tp r o g r a m 或s h a d e r 代码,并以此作为g p g p u 计算核心( c o m p u t a t i o n a lk e r n e l ) 。3 通过设置等纹理尺寸的视区和正交投影变换保证纹理单位和像素的一一映射。4 在与视区尺寸相等的矩形q u a d 几何体上进行贴图运算,作为数据流发生器f d a t a s t r e a mg e n e r a t o r ) 。5 使用f b o 或c o p yt ot e 砒l l r e 取回数据或进行迭代运算。从直观意义上来说,g p g p u 技术是把纹理空间作为数据存储,以运行在像素渲染器上的s h a d e r 代码作为其计算代码存储,构建一次或多次可编程渲染过程,从而实现计算代码对于数据的并行操作。基于g p u 的光线跟踪及虚拟眼视光学仿真2 4g p g p u 通用计算框架的设计由于在从g p g p u 的概念模型到具体的实施过程中难免会涉及到图形代码的编写以及数据格式转换等诸多问题,对于一般的科学计算工作者来说无疑是有相当的难度。为了简化这一繁琐的处理过程,g p g p u 辅助支持库和辅助工具来应运而生。目前g p g p u 库和工具主要是s t a n f o r du n i v e r s i t y 的b r o o k g p u 2 3 和u n i v e r s i t yo fw a t e r l o o 的l i b s h 2 4 】。b r o o k 原先是为诸如斯坦福大学的m e r -r i m a c 超级流处理计算机、m i t 的m i t m 耕处理机等流处理机开发的语言。b r o o k g p u 在g p u 上实现了b r o o k 这种流式编程语言的编译器和实时运行系统 2 5 。这是一种优雅的高抽象层次的实现,然而所带来的问题是需要使用者熟练掌握b r o o k 这种编程语言。而l i b s h 是一种可以嵌入在c c + + 之中的元语言编程语言,同样地它也实现了一套自己的语言机制。显然,这两种工具都是面向高层次的语言系统,需要用户额外去学习一种新的语言,增加了使用的难度。本文将提出的g p u 通用计算框架是为了方便科学计算工作者使用g p u 这一强力工具,以减少g p g p u 编程难度为目标。本文的g p u 通用计算框架是基于o p e n g l2 0 标准中的g l s l ( o p e n g ls h a d i n gl a n g u a g e ) 并在其基础上进行的轻量级封装。框架设计集中的焦点在于在用c c + + 提供一个友好易用的g p u 流式编程接口而不是尝试去发明一种新的流式语言。本文提出的g p u 通用计算框架( 图2 5 ) 已经整理为e z g p g p u 开发库,并放置于著名的开源软件平台s o u r c e f o r g e n e t 之上 2 6 】。e z g p g p u 将面向广大科学计算工作者,提供公开、自由、灵活的解决方案,为g p u 通用计算的普及作出一份贡献。2 4 1 基础类型和封装为了实现g p g p u 概念模型第1 、5 点,我们需要为传统c p u 算法的内存数据流和纹理空间之间建立联系。定义2 1 d a t a s t r e a m 及d a t a s t r e a m e x 为抽象数据流对象。其中封装了纹理的创建、销毁、复制、绑定以及导入导出原始数组。其中d a t a s t r e a m e x 类内部创建了o p e n g l 新标准中的f r a m e b u f f e r o b j e c t ,这样就可以作为o p e n g l 的渲染目标从而实现g p g p u 概念模型第5 点的取回数据和迭代运算。第二章g p g p u :g p u 通用计算技术研究1 3图2 5 :e z g p g p u 系统结构图为了实现在纹理空间中存储数据,纹理目标模式( t e x t u r et a r g e t ) 是首先需要解决的问题。纹理目标模式定义了纹理坐标的表达方式。对于二维纹理来说,有两种选择:传统的g p e n g l 二维纹理目标模式g l _ t e x t u r e 一2 1 ) 模式扩展的g l t e x t u r e r e c t a n g l e a r b 模式然而,并不是所有的显卡和配套驱动程序都支持t e x t u r e r e c t 模式,例如a t i 显卡驱动目前还未能支持在g l s l 之中使用t e x t u r e r e c t 模式。因此,出于兼容性的考虑,目前我们在这里使用的是t e x t u r e 2 d 模式。另一个需要考虑的问题是纹理格式,也就是每一个纹理单元的数据格式。现代g p u 提供了一元、二元、三元乃至四元向量的纹理单元格式。对于普通的标量数据,一般来说采用一元纹理格式即f i l l u m i n a n c e 格式,而对于四元向量数据则采用g l r g b a 格式。当然,为了得到最大的计算并行度,我们也可以考虑采用g l r g b a 格式在一个纹理中一次存放4 个独立的标量数据。实际上,由于目前的a t i 显卡驱动之中存在的b u g ,g l l u m i n a n c e 格式在g l s l 代1 4基于g p u 的光线跟踪及虚拟眼视光学仿真表2 1 :纹理目标模式对比码中仍然是无法使用,这也给我们的工作带来了一些困难。严格来说,目前的p r a m e b u f f e r o b j e c t 标准中并不支持g l l u m i n a n c e 格式,期待在o p e n g l 未来的扩展标准中实现这一特性。综上所述,作为一般科学计算考虑,每一个数据都采用3 2 位浮点数表示,结合之前的纹理单元格式就是采用g l r g b a 3 2 f a r b 纹理格式。最后,在定义了需要使用的纹理目标和纹理格式之后,可以开始把原始数据流保存到纹理之中。以最简单的串行数据流为例,一个需要处理的长度为n的一维数组,最直观的映射关系就是建立一个边长为s q r t ( n ) 的二维矩形纹理,用于保存该数组。在这里我们假定n 恰为2 的幂,如果不是,可以填充若干冗余数据使其达到2 的幂。需要注意的是当采用g l r g b a 格式时,由于1 个纹理单元可以保存4 个标量数据,所以纹理边长应该为8 q r t ( n 4 ) 。例如,当n = 1 0 2 4 2时,产生的纹理尺寸为5 1 2 5 1 2 。最后,我们需要指出的是,选择一种合适的数据纹理存储映射关系,即如何在纹理中保存原始数据流是一个跟具体计算相关的问题。研究表明,一种数据一纹理存储映射关系在一类问题下可能性能优异但是在另一类问题下却性能不佳。面对具体的计算问题以及原始数据流的数据结构,我们需要充分设计合适的数据一纹理存储映射关系,才能得到较好的性能。另外一个需要注意的是,在g p g p u 计算中,由于我们的纹理并不是传统渲染的图像材质,为了保证在计算的精确性,必须关闭g p u 渲染时的纹理滤波,防止对数据的破坏。9 1 t e x p a r a m e t e r i ( t a r g e t ,g l t e x t u r e m i n f i l t e r g l n e a r e s t ) ;g l t e x p a r a m e t e r i ( t a r g e t ,g l t e x t u r e m a g f i l t e r g l n e a r e s t ) ;g l t e x p a r a m e t e r i ( t a r g e t ,g l t e x t u r e w r a p s g l c l a m p ) ;g l t e x p a r a m e t e r i ( t a r g e t g l t e x t u r e w r a p t ,g l c l a m p ) ;第二章g p g p u :g p u 通崩计算技术研究1 5定义2 2 模版类u n i f o r m f a c t o r 为非流式参数对象。其中t 模版参数代表实际传入的数据类型。u n i f o r m f a c t o r 用于把用户代码中的非流式参数向运算核心传递。由于o p e n g l 在处理非流式参数的时候需要根据参数不同的类型用不同的函数,如图2 6 所示,在这里使用了c + + 泛型设计( g e n e r i cp r o g r a m m i n g ) ,内部对不同的类型重载不同的操作,由c + + 编译器在编译时自动根据类型判定调用的是哪个重载函数,从而保证了接口的统一和简洁。t e m p l a t eu n i f o r m f t o r 整数参数u n f f o r m f a c t o r 浮点数参数u n f f o r m f a c t o r 向量参数u n i f o r m f a c t o r 矩阵参数u n i f o r m f a c t o r 重载模版的c h 流操作符c o m p u t a t i o n k c r n c l “u n i f o r m f a c t o r 由c + + 编译器判定重载类型o p e n g l 传递函数整数g i u n i f m - m 1 2 1 3 4 i a r b浮点数g l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品牌与价格关联性-洞察及研究
- 部队交通安全培训内容课件
- 河南省南阳市镇平县2024-2025学年八年级下学期3月月考生物学试题(含答案)
- 20xx建设承诺书4篇
- 【2025年秋七上语文阶段测试】第3单元学业质量评价01(解析版)
- 山东省2025年普通高校招生网上报名信息表
- 车险销售原理课件
- 基于区块链的分离式墨盒供应链溯源系统构建瓶颈
- 城市更新浪潮中商务综合体功能迭代与社区服务融合的设施适配性
- 国际奢侈品赛道中东方纹样溢价权争夺的定价权困局
- 社区街道网格员安全培训
- 反诈知识竞赛题库及答案(共286题)
- 村卫生室医疗废物管理制度
- GB/T 44698-2024电动踝关节
- 生理学基础题库(46道)
- 月度财务分析报告(3篇)
- 华文版六年级上册书法教案
- 物流消防应急预案
- (人教版2024)八年级语文上册全册各课导学案(含答案)
- 2024-2030年中国汽车焊装设备行业竞争格局及未来前景预测报告
- 城镇污泥标准检验方法CJT221-2023 知识培训
评论
0/150
提交评论