c++ - 我应该如何设计 GLSL 着色器以在 crossfire/SLI 上运行

标签 c++ glsl shader gpgpu sli

如果我正在使用 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/

相关文章:

c++ - 指针访问冲突

glsl - HLSL为什么具有语义?

c++ - 我的 GLSL Shader 对象/包装器是否应该封装加载/设置 VertexArrayObject?

java - 着色高度图的面而不是顶点

javascript - 相机旋转后的 WebGL 平移(作为 FPS)

c++ - 如何在不丢失现有数据的情况下调整 std::vector 的大小?

c++ - 几个模板问题(已经解决了...只是想知道为什么)

three.js - 是否可以让雾与 Material 的不透明度相互作用?

c++ - 从函数返回 auto_ptr 是否错误/容易出错?

opengl - 是否可以将索引缓冲区对象 (IBO) 与功能 'glMultiDrawElements' 一起使用?