Optix在有效负载中动态调整大小的数组

ice*_*eze 5 cuda raytracing nvidia optix

有没有办法在optix中声明动态大小的数组有效负载?我用Google搜索并阅读了Optix文档,但却发现Optix不允许使用malloc.我有什么方法可以做以下的事情吗?

struct PerRayData_radiance
{
 float3 result;
 float  importance;
 int depth;
 float stuff[N];
};
Run Code Online (Sandbox Code Playgroud)

我根据一些用户参数将数组大小调整为N大小.

我尝试在NVIDIA论坛上搜索过去的问题,但由于某些安全问题,它似乎已被关闭.

Ste*_*son 4

你不能。我在 NVIDIA OptiX 论坛上问了这个问题,因为我想为我的应用程序执行此操作(希望我能给您一个 http 指针)。不幸的是,OptiX 使用的 ptx 生成文件的一个限制是您不能在您传递的辐射光线中进行这种动态分配。

对于我们的应用程序,我们必须使用具有最大大小的数组和指定当前运行长度的 uint。我知道这是浪费内存,但我没有看到任何解决办法。

您需要尝试使用应用程序和硬件的最大大小,因为在这种情况下堆栈大小可能会增加。

  • 顺便说一句,我们现在正在通过使用 3.0 中的 CUDA 上下文共享功能来解决这个问题。基本上,我们找到了一种方法,让 OptiX 进行光线追踪,让 CUDA 进行需要动态分配的计算,具有更大的灵活性,而不是这样受限的堆栈。YMMV,当然。 (2认同)