我的硕士论文遇到了一些挑战,希望您能帮助我,或者为我指明正确的方向。
我正在使用 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 文件等方面进行重复工作。
谢谢!