如果我正在使用 glsl 编写可视化工具,我如何保证它会利用更多的 gpu?开箱即用,它只能在一张卡上运行,什么样的软件步骤/设计可以让像素着色器在多张卡上并行运行?
最佳答案
从 Jarrod 的回答中的评论来看,您遇到的“问题”似乎是 AFR 模式(交替帧渲染)与 SFR 模式(拆分帧渲染),这是驱动程序模式设置问题。
在 AFR 模式下,驱动程序将每个完整帧发送到单个 GPU,并将交替帧发送到另一个 GPU。这对于您最感兴趣的是最大化帧速率并且不太关心帧延迟的游戏和动画非常有用。以这种方式使用 GPU,您几乎可以毫不费力地将 SLI 的 fps 速度提高 2 倍。但是,如果您只绘制一帧(从您的评论看来就是这种情况),它只会使用一个 GPU。
在 SFR 模式下,驱动程序将拆分每个帧并在每个 GPU 上渲染每个帧的一部分。这种模式的问题是两个 GPU 都需要为每一帧进行所有设置,所以你不会获得 2 倍的加速。事实上,几乎唯一可以加速的是片段着色器(因为每个 GPU 将运行一半的片段),所以如果你的(单个 GPU)渲染时间只有 50% 是片段着色器,你只会得到(在最佳)33% 的加速。您可能会得到更少,因为分割可能不平衡(因此一个 GPU 最终得到大部分片段)。
由于 SFR 通常较慢,因此 AFR 往往是默认值。您可以通过控制面板控制 AFR 与 SFR。
关于c++ - 我应该如何设计 GLSL 着色器以在 crossfire/SLI 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071882/