【问题标题】:What is in the stack?堆栈中有什么?
【发布时间】:2015-12-29 18:20:25
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: nvidia raytracing optix


    【解决方案1】:

    在 NVIDIA 板上回答 here

    Detlef Roettger 写道

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 2016-01-19
      • 2020-10-24
      • 2015-01-15
      • 2011-11-20
      • 2011-10-30
      • 2016-08-18
      相关资源
      最近更新 更多