1

我的硕士论文遇到了一些挑战,希望您能帮助我,或者为我指明正确的方向。

我正在使用 Knaus 和 Zwicker ( http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Knaus11.pdf ) 使用 OptiX 的新方法实现渐进式光子映射。这种方法使得 PPM 的每个迭代/帧独立,更适合多 GPU。

我所做的(使用单个 GPU)是使用 OptiX 跟踪许多光子,然后将它们存储在缓冲区中。然后,使用 CUDA 和推力将光子分类为空间哈希图,永远不会离开 GPU。我想在 GPU 上创建空间哈希图,因为它是我的渲染器的瓶颈。最后,在间接辐射估计期间使用此缓冲区。所以这是一个多通道算法,包括光线追踪、光子追踪、光子图生成和最后创建图像。

我了解 OptiX 可以支持多个 GPU。每个上下文启动都在 GPU 上进行划分。对缓冲区的任何写入似乎都被序列化并广播到每个设备,以便它们的缓冲区内容相同。

我想做的是让一个 GPU 做一帧,而第二个 GPU 做下一帧。然后我可以组合结果,例如在 CPU 或 GPU 中的一个组合通道上。如果我可以在每个设备上并行执行每个通道(在每个通道之间同步),这也是可以接受的。这有可能吗?

例如,我是否可以在两个不同的主机线程上创建两个 OptiX 上下文映射到每个设备。这将允许我像以前一样生成 CUDA/推力空间散列图,假设光子在一个设备上,并在管道末端合并两个生成的图像。但是,编程指南声明它不支持多线程上下文处理。我可以使用多个进程,但是进程间通信有很多混乱。这种方法还需要在创建场景几何体、编译 PTX 文件等方面进行重复工作。

谢谢!

4

1 回答 1

1

OptiX 已经根据您的 GPU 功率相应地拆分工作负载,因此您的方法可能不会比 OptiX 处理所有 GPU 更快。

如果您想强制您的数据保留在设备上(请注意,在这种情况下,来自不同设备的写入将不一致)您可以使用编程指南中指示的RT_BUFFER_GPU_LOCAL标志

https://developer.nvidia.com/optix-documentation

于 2014-02-10T19:47:37.743 回答