什么在堆栈中?

时间:2015-10-01 15:57:08

标签: nvidia raytracing optix

我试图了解optix中存储在堆栈中的内容。

据我了解,我们设置每个上下文的堆栈大小,并且一个堆栈附加到光线生成程序中的每个线程。 当射线发射时,线程带有堆栈,堆栈存储射线的有效载荷。

我认为,例如,当我们执行递归光线跟踪器时,会发生堆栈溢出,因为存储器中会有太多的有效负载。但是现在,我有一个带有辐射光线的程序,其有效载荷为浮点+3 uint,而阴影光线只有一个浮点数,并且只有一次反弹。但是,我的堆栈需要大于1024,以避免堆栈溢出。当然,这仅仅是我的两个有效载荷。

所以我想知道,堆叠中还有什么? (我的意思是一般情况下,不是在我的特定情况下。除了光线有效载荷之外,堆栈中存储的是什么(如果有的话)?例如,我们是否还存储有关场景树的命中信息? ?我们是否跟踪哪个程序称为当前光线?)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在NVIDIA董事会here

上回答
  

Detlef Roettger写道

     

“堆栈还用于保存和恢复实时变量   函数调用(例如rtTrace或可调用程序)。那就是   OptiX编程中的一个性能建议的背景知识   以开头的指南尝试最小化调用的实时状态   rtTrace in programs。

关于§3.1.3 - OptiX Programming guide中的全局状态的更多信息。

请记住,OptiX程序是完整的CUDA内核组合在一起的。因此,堆栈存储器也用于普通执行需求(即使在CUDA版本之间,数量也可能不同)。