第一范文网 - 专业文章范例文档资料分享平台

CUDA光线跟踪渲染器的实现和优化(2)

来源:用户分享 时间:2021-06-02 本文由北栀凉心 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

中国科技论文在线

面向对象的实现方案。

45 了GPGPU的应用。本文对光线跟踪渲染器在CUDA上的实现进行了探索,并给出了一种1 整体设计

在使用GPU进行加速的软件设计中,主要有两种方式。一种方式是将程序的控制逻辑主要由CPU来完成,而只在需要进行数据运算的时候,将需要的数据传入GPU进行计算[5]。而另一种方式则是完全在GPU上进行程序的运行[6] 。这两种方法各有优劣:前一种方式在进行计算前后需要来回传输必要的数据,当数据量较大时,GPU与内存间的传输带宽将成50 为软件性能的主要瓶颈;而在后一种方式中,由于GPU并不适合做逻辑控制,过于复杂的

程序逻辑将使得GPU的并行计算难以发挥。考虑到在光线跟踪渲染器中,场景数据往往较大,并且个人电脑上的光线跟踪应用会更多地关注实时性能,短时间内需要进行多次渲染,若采用第一种方式数据传输量会非常大,因此本文采用了第二种方式来进行设计。

利用面向对象的设计思想,可以很容易设计出光线跟踪渲染器的结构。本文所设计的光55 线跟踪渲染器的主要类图如图1所示。

图1 整体设计类图

在整体设计时,本文考虑了整个渲染器的可扩展性。通过对抽象类Renderer的不同实60 现,外部使用者可以不进行任何修改,仍然通过Renderer类来调用新的渲染方式。而通过

继承Primitive类,并实现其求交点的方法,可以很方便地为该渲染器增加新的图元类型。 2 GPU上的对象数据存放

一般来说,渲染器中的场景数据往往是从外部文件读入到内存中的。为了在GPU上进行光线的跟踪,这些数据需要从内存复制到CUDA的全局内存(Global Memory)中。CUDA65 提供了实现内存复制功能的函数,其函数形式类似于C语言中的malloc和memcpy。然而

在数据复制过程当中,并不能仅仅申请一块与内存中场景数据对象同样大小的全局内存空间,然后执行简单的内存块复制操作。这是因为在面向对象的程序设计中,对象指针的使用是难以避免的。Renderer对象包含指向Scene对象的指针变量。在这种情况下,只将Renderer对象复制到GPU内存中将无法通过该指针变量访问到Scene对象。仅仅将Scene对象也复70 制到GPU内存并不能解决问题,因为Scene对象在GPU内存中的地址将不同于其在内存中

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科CUDA光线跟踪渲染器的实现和优化(2)全文阅读和word下载服务。

CUDA光线跟踪渲染器的实现和优化(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1198258.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top