前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CUDA&OptiX小结

CUDA&OptiX小结

作者头像
Peter Lu
发布2020-12-03 10:35:47
1.9K0
发布2020-12-03 10:35:47
举报
文章被收录于专栏:LET

基本流程:

  • 在CPU中构建数据
  • 将数据从CPU传入到GPU中
  • GPU执行任务
  • 返回结果到CPU

CUDA基本概念

Figure 1 CUDA Thread Model

当一个kernel被执行时,可以在逻辑上指定具体的Grid,Block来管理thread,Grid和Block可以是1~3维。而在执行中,warp是基本单元,一个warp包含32个thread,同一个warp下的thread以不同的资源执行相同的指令。所以,block中的thread数目最好是32的整数倍。

Figure 2 divergence

因为warp下所有thread都执行同一指令,因此应该尽量避免divergence,保证线程效率。还有latency的处理上,GPU和CPU策略上的不同,CPU类似短跑,提高单个运动员的起跑时间来降低latency,而GPU可以把thread看成拓宽的跑道,每个运动员的起跑时间要比CPU的低,但一次起跑的人数多,进而降低了单位运动员需要的latency。

内存

Figure 3 GPU Memory Model

  • SM(shading multiprocessors)->CPU Cores
  • Warps->hyperthreading
  • 每个warp包含32个threads,相当于SIMD
  • 每个warp内的线程执行相同的指令
  • 每个SM中有多个register,可以在warps间共享
  • Shared mem->L1 Cache
  • Global memory->内存
  • GPU通过bus来和PC的内存交互

GPU的内存是可编程的,而CPU的缓存是不可编程的;GPU的线程管理是不可编程的,而CPU的多线程管理(SIMD)是可编程的。

CUDA中有device和host两个概念,前者对应GPU的资源,后者对应CPU的资源。基于CUDA,我们可以封装一个CoreBuffer来负责内存的调度,方便在GPU创建内存,以及GPU和CPU之间资源的互相传递。同时,可以调用cudaMemcpyToSymbol方法保存到__constant__,全局可见,该变量可以是自定义的结构体。

GPU和CPU的传递往往是性能的瓶颈,因此应当尽量减少,为了尽可能的减少传递:

  • GPU内部创建
  • 只传递变化的数据
  • 异步拷贝
  • 如果数据仅用于渲染,可以以纹理的形式传出

函数

CUDA函数分为三类:

  • __host__:host调用,host执行
  • __global__:host调用,device执行
  • __device__:device执行,device执行

OptiX

我对OptiX用的不多,主要集中在创建BVH和Query这两部分,仅根据自己的使用经验总结。

在使用中,Optix中用于Query的数据和CUDA中用于渲染的数据在内存上是独立的,这样,当我们用OptiX找到hit对应的三角形,通过索引对应到用于渲染的数据。所有材质,纹理等都只是CUDA需要,OptiX不需要。

BVH construction:

  • 单个模型的创建,对应RTPmodel,主要涉及到顶点数据和索引
  • Instance,将所有的RTPmodel保存在一个Vector,以rtpModelSetInstances的方式构建topLevel BVH,也是以RTPmodel类型保存

Query:

  • rtpBufferDescCreate构建Ray和Intersection,根据不同的参数指定Ray的结构和Intersection的返回信息(仅仅判断是否有遮挡,还是返回最近的几何对象的相关属性)
  • rtpQueryCreate构建Query,RTP_QUERY_TYPE_CLOSEST为最近的对象,RTP_QUERY_TYPE_ANY可见性判断
  • rtpQuerySetRays & rtpQuerySetHits,绑定query和数据(ray&intersection)
  • rtpQueryExecute,执行,结果保存在Intersection对应的buffer中

GPU中对光线追踪的优化

如下内容只涉及GPU光线追踪的开发经验总结,不涉及其他方面,谨慎考虑,小心被骗

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档