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

Cuda OptiX中的多个GPU(可能异步启动?),cuda,multi-gpu,optix,Cuda,Multi Gpu,Optix,我的硕士论文有一些挑战,我希望你能帮助我,或者给我指出正确的方向 我正在使用Knaus和Zwicker()使用OptiX的新方法实现渐进光子映射。这种方法使PPM的每个迭代/帧独立,更适合于多GPU 我所做的(使用一个GPU)是使用OptiX跟踪大量光子,然后将它们存储在缓冲区中。然后,使用CUDA和推力将光子排序到空间散列图中,永远不会离开GPU。我想在GPU上创建空间哈希映射,因为它是我的渲染器的瓶颈。最后,在间接辐射估计期间使用该缓冲区。这是一个多通道算法,包括光线跟踪、光子跟踪、光子贴图

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

我正在使用Knaus和Zwicker()使用OptiX的新方法实现渐进光子映射。这种方法使PPM的每个迭代/帧独立,更适合于多GPU

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

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

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

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


谢谢

OptiX已经根据您的GPU功率来分配工作负载,因此您的方法可能不会比让OptiX处理所有GPU更快

如果要强制数据保留在设备上(请注意,在这种情况下,从不同设备写入的数据将不连贯),可以使用编程指南中指示的RT\U BUFFER\U GPU\LOCAL标志


OptiX已经根据您的GPU功率来分配工作负载,因此您的方法可能不会比让OptiX处理所有GPU更快

如果要强制数据保留在设备上(请注意,在这种情况下,从不同设备写入的数据将不连贯),可以使用编程指南中指示的RT\U BUFFER\U GPU\LOCAL标志