【发布时间】:2013-04-09 00:15:36
【问题描述】:
我的硕士论文遇到了一些挑战,希望您能帮助我,或者为我指明正确的方向。
我正在使用 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 文件等方面进行重复工作。
谢谢!
【问题讨论】: