2015-10-01 39 views
1

我想了解optix中存储在堆栈中的内容。什么在堆栈中?

据我所知,我们设置每个上下文的堆栈大小,和一个堆叠被附接到在射线生成程序的每个线程。 当光线启动时,线程携带堆栈,存储光线的有效载荷。

我认为,当我们做递归光线跟踪器,例如,会发生堆栈溢出,因为会有太多的有效载荷,以保持在内存中。但现在,我有一个带有浮动+ 3单位有效载荷的辐射射线的程序,以及只有浮动的阴影射线,并且只有一个反弹。但是,我的堆栈需要更大,以避免堆栈溢出。当然,这仅仅是我的两个有效载荷。

所以我想,在栈中还有什么? (我的意思是在一般情况下,不会在我的具体情况。什么是存储在堆栈中除射线(S)的有效载荷(S)(如果是)?例如,我们还存储有关点击信息?有关现场树吗?我们跟踪哪些程序调用当前射线?)

感谢您的帮助!

回答

1

回答了NVIDIA的主板here

德特勒夫Roettger写道

“堆栈也被用来保存和恢复各地 函数调用(如rtTrace或可调用程序)生存变量。这就是 背景为OptiX编程中的一个性能建议 指南开始于尽量减少通话期间的实时状态 程序中的rtTrace

更多信息请参见§3.1.3 - Global State的OptiX Programming guide

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