如果我正在用glsl写一个可视化工具,我怎么保证它会利用更多的gpu呢?开箱即用,它只能在一个上工作,软件的哪种步骤/设计将允许像素着色器在多个卡上并行运行?
发布于 2012-10-26 02:17:32
从Jarrod的回答中的评论来看,你遇到的“问题”是AFR模式(交替帧渲染)与SFR模式(拆分帧渲染),这是一个驱动模式设置问题。
在AFR模式下,驱动程序将每个完整帧发送到单个GPU,并将交替帧发送到另一个GPU。这对于游戏和动画来说是很棒的,在这些游戏和动画中,你最感兴趣的是最大化帧速率,而不是太关心帧延迟。以这种方式使用GPU可以为SLI提供几乎2倍的fps加速,只需很少的工作。但是如果你只绘制一个帧(就像你的评论中的情况一样),它将只使用一个GPU。
在SFR模式下,驱动程序将拆分每个帧,并在每个GPU上渲染每个帧的一部分。这种模式的问题是,两个GPU都需要为每一帧做所有的设置,所以你不会得到2倍的加速。事实上,唯一可以加速的就是碎片着色器(因为每个GPU都会运行一半的碎片),所以如果你的(单个GPU)渲染时间中只有50%是碎片着色器,那么你(最多)只能得到33%的加速。你可能会得到更少,因为分割可能是不平衡的(因此一个GPU最终得到了大部分碎片)。
由于SFR通常较慢,因此AFR往往是默认设置。您可以通过控制面板控制AFR和SFR。
发布于 2012-10-25 23:50:42
GLSL中所需的步骤为零。SLI/crossfire驱动程序负责跨GPU分配工作负载。同样适用于nVidia环绕和AMD Eyefinity:就着色器而言,它只是一个更大的渲染目标。
请参阅nVidia:SLI in OpenGL的这些幻灯片,特别是“干扰SLI的事情”的幻灯片。
你想要确保你的渲染循环被正确设置(例如,调用了SwapBuffers ),并且你至少为AFR模式SLI设置了双缓冲。
https://stackoverflow.com/questions/13071882
复制相似问题