堆栈中有什么?
What is in the stack?
我正在尝试了解存储在 optix 堆栈中的内容。
据我了解,我们设置每个上下文的堆栈大小,并且一个堆栈附加到光线生成程序中的每个线程。
发射光线时,线程会携带存储光线有效载荷的堆栈。
我认为,例如,当我们执行递归光线追踪器时,会发生堆栈溢出,因为内存中保存的有效负载太多。但是现在,我有一个程序,其中辐射光线的有效载荷为 float + 3 uint,而阴影光线只有一个浮点数,并且只有一次反弹。但是,我的堆栈需要大于 1024 以避免堆栈溢出。当然,这不仅仅是我的两个有效负载。
所以我想知道,堆栈中还有什么?
(我的意思是一般情况下,不是在我的特殊情况下。除了射线有效负载(如果是的话),堆栈中存储了什么?例如,我们是否还存储有关命中的信息?关于场景树? 我们是否跟踪调用当前射线的程序?)
感谢您的帮助!
在 NVIDIA 板上回答here
Detlef Roettger wrote
"The stack is also used to save and restore live variables around
function calls (e.g. rtTrace or callable programs). That's the
background for one of the performance advice in the OptiX Programming
Guide which starts with Try to minimize live state across calls to
rtTrace in programs."
有关此内容的更多信息,请参见第 3.1.3 节 - OptiX Programming guide 中的全局状态。
请记住,OptiX 程序是完全成熟的 CUDA 内核组合在一起的。因此,堆栈内存也用于普通执行需求(即使在 CUDA 版本之间,数量也可能有所不同)。
我正在尝试了解存储在 optix 堆栈中的内容。
据我了解,我们设置每个上下文的堆栈大小,并且一个堆栈附加到光线生成程序中的每个线程。 发射光线时,线程会携带存储光线有效载荷的堆栈。
我认为,例如,当我们执行递归光线追踪器时,会发生堆栈溢出,因为内存中保存的有效负载太多。但是现在,我有一个程序,其中辐射光线的有效载荷为 float + 3 uint,而阴影光线只有一个浮点数,并且只有一次反弹。但是,我的堆栈需要大于 1024 以避免堆栈溢出。当然,这不仅仅是我的两个有效负载。
所以我想知道,堆栈中还有什么? (我的意思是一般情况下,不是在我的特殊情况下。除了射线有效负载(如果是的话),堆栈中存储了什么?例如,我们是否还存储有关命中的信息?关于场景树? 我们是否跟踪调用当前射线的程序?)
感谢您的帮助!
在 NVIDIA 板上回答here
Detlef Roettger wrote
"The stack is also used to save and restore live variables around function calls (e.g. rtTrace or callable programs). That's the background for one of the performance advice in the OptiX Programming Guide which starts with Try to minimize live state across calls to rtTrace in programs."
有关此内容的更多信息,请参见第 3.1.3 节 - OptiX Programming guide 中的全局状态。
请记住,OptiX 程序是完全成熟的 CUDA 内核组合在一起的。因此,堆栈内存也用于普通执行需求(即使在 CUDA 版本之间,数量也可能有所不同)。