1

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

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

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

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

谢谢你的帮助!

4

1 回答 1

1

在此处的 NVIDIA 板上回答

Detlef Roettger 写道

“堆栈还用于保存和恢复函数调用(例如 rtTrace 或可调用程序)周围的实时变量。这是 OptiX 编程指南中性能建议之一的背景,该指南以尝试最小化调用 rtTrace 中的实时状态开始程序。

有关此的更多信息,请参阅OptiX 编程指南中的第 3.1.3 节 - 全局状态。

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

于 2015-12-05T08:02:31.743 回答