如果我正在用 glsl 编写可视化工具,我如何保证它会利用更多的 gpu?开箱即用,它只适用于一个,软件的什么样的步骤/设计将允许像素着色器在多张卡上并行运行?
2 回答
GLSL 中所需的零步骤。SLI/crossfire 驱动程序负责为您在 GPU 之间分配工作负载。nVidia 环绕和 AMD Eyefinity 也是如此:就着色器而言,它只是一个更大的渲染目标。
请参阅 nVidia 的这些幻灯片:OpenGL 中的 SLI,尤其是幻灯片“Things Interfering with SLI”。
您要确保正确设置了渲染循环(即调用了 SwapBuffers),并且您至少为 AFR 模式 SLI 进行了双缓冲。
从 Jarrod 的回答中的评论看来,您遇到的“问题”是 AFR 模式(交替帧渲染)与 SFR 模式(拆分帧渲染),这是一个驱动程序模式设置问题。
在 AFR 模式下,驱动程序将每个完整帧发送到单个 GPU,并将交替帧发送到另一个 GPU。这对于您对最大化帧速率最感兴趣并且不太关心帧延迟的游戏和动画来说非常有用。以这种方式使用 GPU,您可以毫不费力地为 SLI 提供 2 倍的 fps 加速。但是,如果您只绘制一个帧(从您的评论看来就是这种情况),它将只使用一个 GPU。
在 SFR 模式下,驱动程序将分割每一帧并在每个 GPU 上渲染每一帧的一部分。这种模式的问题是两个 GPU 都需要为每一帧进行所有设置,因此您不会获得 2 倍的加速。事实上,几乎唯一会加速的是片段着色器(因为每个 GPU 将运行一半的片段),所以如果只有 50% 的(单 GPU)渲染时间是片段着色器,你只会得到(在最好)33% 的加速。由于拆分可能不平衡,您可能会得到更少(因此一个 GPU 最终会包含大部分片段)。
由于 SFR 通常较慢,因此 AFR 往往是默认设置。您可以通过控制面板控制 AFR 与 SFR。