我试图了解optix中存储在堆栈中的内容。
据我了解,我们设置每个上下文的堆栈大小,并且一个堆栈附加到光线生成程序中的每个线程。 当射线发射时,线程带有堆栈,堆栈存储射线的有效载荷。
我认为,例如,当我们执行递归光线跟踪器时,会发生堆栈溢出,因为存储器中会有太多的有效负载。但是现在,我有一个带有辐射光线的程序,其有效载荷为浮点+3 uint,而阴影光线只有一个浮点数,并且只有一次反弹。但是,我的堆栈需要大于1024,以避免堆栈溢出。当然,这仅仅是我的两个有效载荷。
所以我想知道,堆叠中还有什么? (我的意思是一般情况下,不是在我的特定情况下。除了光线有效载荷之外,堆栈中存储的是什么(如果有的话)?例如,我们是否还存储有关场景树的命中信息? ?我们是否跟踪哪个程序称为当前光线?)
感谢您的帮助!
答案 0 :(得分:1)
在NVIDIA董事会here
上回答Detlef Roettger写道
“堆栈还用于保存和恢复实时变量 函数调用(例如rtTrace或可调用程序)。那就是 OptiX编程中的一个性能建议的背景知识 以开头的指南尝试最小化调用的实时状态 rtTrace in programs。“
关于§3.1.3 - OptiX Programming guide中的全局状态的更多信息。
请记住,OptiX程序是完整的CUDA内核组合在一起的。因此,堆栈存储器也用于普通执行需求(即使在CUDA版本之间,数量也可能不同)。