OptiX中的多个GPU(异步启动可能吗?)

时间:2013-04-16 14:22:13

标签: cuda multi-gpu optix

我对硕士论文有一些挑战,希望你能帮助我,或者指点我正确的方向。

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

我所做的(使用单个GPU)使用OptiX跟踪多个光子,然后将它们存储在缓冲区中。然后,使用CUDA和推力将光子分类到空间散列图中,从不离开GPU。我想在GPU上进行空间哈希映射创建,因为它是我的渲染器的瓶颈。最后,在间接辐射估计期间使用该缓冲器。所以这是一个多遍算法,包括光线跟踪,光子跟踪,光子图生成和最终创建图像。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

OptiX已将工作负载相应地分配给您的GPU电源,因此您的方法可能不会比OptiX处理所有GPU更快。

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

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