基于CUDA火焰模拟.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于CUDA火焰模拟

基于CUDA火焰模拟   摘 要 针对欧拉方法进行火焰模拟中涉及到的速度场和温度场等复杂的计算与渲染问题,设计了基于CUDA的实现方案.对其中的大规模稀疏线性方程组,实现了基于CUDA的求解器;针对火焰的颜色绘制、漩涡等问题,通过黑体辐射和增加漩涡限制因子解决,并针对其中的烟雾和焰心绘制提出了一种简便的绘制策略;针对可视化绘制问题,使用CUDA实现了基于光线投射的体绘制方法.全文火焰模拟计算和绘制的全过程实现均基于CUDA完成,模拟结果达到了可观的加速比和可视化效果.   关键词 CUDA;稳定流;火焰模拟;可视化   中图分类号 TP391.9 文献标识码 A 文章编号2012   CUDA(General Unified Device Architecture)是NVIDIA公司在2007年正式发布的GPU通用计算开发环境和软件体系,它不但为用户提供了一系列操作GPU数据读写和命令流控制的API,让用户应用GPU进行通用计算(GPGPU),还提供了OpenGL和Direct 3D进行互操作的接口,使计算之后的结果可以快速地绘制出来.随着廉价图形卡的处理能力日渐强大,许多行业已经开始使用CUDA进行加速计算,如音视频处理、石油勘探、医学成像、科学计算、物理模拟等.   在计算机的计算能力有限时,研究者们只能通过参数建模的方法来进行流体模拟,如将波浪函数的线性波组合来模拟浪花[1]、使用拉格朗日粒子模拟波浪[2]等,但这些方法不能模拟比较复杂的、细节更为丰富的流体效果,于是研究者们开始把注意力转向基于物理的流体模型.流体模拟使用的基于物理的方法主要有:晶格波尔兹曼方法(LBM)[3]、拉格朗日方法[4]以及基于NS方程的欧拉方法[5].其中欧拉方法是最常使用的一种计算方法,能够非常容易地重构光滑的流体表面,借助文献[6]提出的半拉格朗日法进行求解,可以选取非常大的时间步长并能保持计算的稳定,但缺点在于计算量比较大,需要非常高效的方程组求解器才能实现实时模拟.   本文以欧拉方法进行火焰模拟为线索,对模型的计算复杂度进行分析,实现了基于CUDA的线性方程组的求解器;针对火焰模拟中的颜色、漩涡、运动形态等内容,引入漩涡约束因子和随机风力来制造火焰的摇曳效果,并提出一种简便的烟雾和焰心效果绘制策略来增加模拟的真实性,最终计算结果通过基于CUDA的光线投射方法实现可视化.   1 CUDA编程模型与图形API   相较于CPU而言,CUDA主要结构为计算逻辑单元而不是控制逻辑单元,因此其浮点运算能力可达到CPU的几十倍甚至上百倍.CUDA将对GPU硬件的操作予以屏蔽,让用户可以使用简单的C语言接口实现通用计算.   湖南师范大学自然科学学报 第35卷第6期   满家巨等:基于CUDA的火焰模拟1.1 CUDA编程模式   一个CUDA程序由主机端程序和设备端程序组成.主机端程序是在CPU上执行的串行代码,而设备端程序是在GPU上执行的并行代码,即kernel程序.使用CUDA进行编程时,首先准备好主机端数据,然后将其从主机的内存复制到设备内存中,调用kernel程序进行高密度的并行计算.待计算完成再将计算结果从设备端复制回主机内存.如图1,在CUDA架构中,线程被分成许多彼此独立线程块(Block),同一个线程块内的所有线程使用共享内存协调计算任务,一个GPU上的所有线程块组织成网格(Grid).   图1 线程块与线程的组织形式[7] 图2 CUDA存储模型[7]1.2 CUDA存储模式   CUDA为满足数据的不同需求提供了6种存储器(图2):寄存器(Registers)、本地存储器(Local Memory)、共享存储器(Shared Memory)、全局存储器(Global Memory)、常数存储器(Constant Memory)和纹理存储器(Texture Memory).其各自特点如下:   (1)寄存器的访问效率最高,每个线程都拥有专属的寄存器,但它的数量比较少;   (2)本地存储器访问速度较慢,也是线程特有的存储单元,主要在寄存器空间不足时使用;   (3)共享存储器访问速度快,是线程块所有线程公有的存储单元,其大小也比较有限.常见的硬件每个线程块可使用的共享存储器大小只有16 KB.   (4)全局存储器的大小与显卡的显存大小相当,它可通过主机端程序和设备端程序访问,充当主机端和设备端的数据交互媒介.   (5)常数存储器是显存中的只读存储单元,它拥有缓存加速的功能,可以节约带宽而加快访问速度,因此适合存储程序中需要频繁访问的只读参数.   (6)纹理存储器也是只读存储器,它由GPU用于纹理渲染的图形专用单元发展而来,具有地址映射、数

文档评论(0)

fangsheke66 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档