SLI在OpenGL中如何决定哪个VBO属于哪个GPU?

5

我想使用SLI的AFR模式来提高FPS。 我认为NVIDIA SLI驱动程序会自动且智能地将VBO分配给各个GPU。这是正确的吗?

我有一个代码,其中包含通过VAO表示的大量顶点/面,并带有三个不同的VBO(顶点、颜色、索引)。 使用双GPU和SLI没有fps增加。

我复制了具有相同顶点/面的VAO和VBO,并在两个VAO之间交替使用glDrawElements调用,希望NVIDIA SLI驱动程序足够聪明,知道一个VAO是一个GPU,但遗憾的是仍然没有fps增加。 有人可以告诉我我做错了什么吗?

我还尝试注释掉一个VAO的glDrawElements调用,它确实显示出双倍的FPS,并且与实际场景和黑屏闪烁。


你得到了什么帧率数据?如果你正在绘制非常简单的几何图形,那么你可能会受到 CPU 的限制而不是 GPU 的限制。此外,只有在渲染单个帧比一个监视器刷新周期需要更长时间的较复杂场景中,SLI 才能发挥其作用。 - datenwolf
@datenwolf 我得到的fps大约是25~30,场景来自一个ply文件,我按照它的样子绘制。有很多顶点/面,但没有光照/阴影等,所以我不确定这是否“复杂”。有一件事我确定,如果我只加载一半的顶点/面,fps会增加一倍。SLI不应该在这种情况下起作用吗? - user3667089
1个回答

1

此处所述,

值得注意的是,尽管帧到达的频率可能加倍,但生成帧的时间并未缩短。

此外,我从未听说过专门为一个GPU分配VAOs或VBOs。据我所知,两个适配器都有相同的克隆缓冲区。即使你不知道,也会发生复制,并且每个GPU使用自己的副本来生成其部分帧。我可能错了,但我怀疑这一点。

这就是为什么如果您拥有2x2 GB VRAM适配器,您不会获得4GB VRAM的原因。您仍然使用2GB。另外,如果您的SLI适配器容量不同,则较大的显卡内存会降低以与较小的对齐。您获得的所有性能提升都来自于两个GPU的并行处理能力,以及您的内存带宽增加了一倍。据我所知,内存写入是硬件多播的,因此没有太大的开销。

编辑: 阅读关于SFR和AFR的有趣观点。结果发现,对于大量顶点负载,建议使用AFR,而对于像素着色器负载,SFR更好。即使对我来说,这也是一个有趣的发现。使用AFR时,还应确保您是双缓冲的,以获得最佳效果。缺少多个缓冲区实际上会破坏AFR。关闭垂直同步-它也会破坏它!


1
你是否仍在“使用相同的顶点/面复制VAO和VBO,并在两个VAO之间交替glDrawElements调用,希望NVIDIA SLI驱动程序足够聪明,知道一个VAO是为一个GPU而设”的方法? - Dimo Markov
1
你有没有考虑过检查你的FPS计算代码、进程优先级设置、睡眠限制等?如果不是这个问题,我猜你最大的瓶颈不是渲染,而是内存吞吐量。你应该考虑压缩你的顶点。你正在渲染什么样的几何体?它是否被限制在某个常数范围内?你需要颜色吗?有多少索引? - Dimo Markov
1
“indices with colors” 是什么意思?此外,5千万个指数占用多达190 MB的VRAM,这并不致命。你有多少个顶点?这些顶点是否与颜色、纹理坐标、法线等相关联?我怀疑除了更好的硬件之外,任何其他东西都无法处理大数据。然而,你甚至没有提到你实际使用的数据量是多少。 - Dimo Markov
1
在处理图形优化时,有三件事情需要做:1. 预计算,2. 压缩,3. 利用所有可以挤出来的硬件能力。我不知道SLI是否可行,因为有太多的条件。你是在笔记本电脑上吗?你是否从nVidia控制面板中打开了SLI?你是否配备了两个相同的适配器?你是否处于高性能电源模式?你是否分配了比你拥有的更多的VRAM? - Dimo Markov
1
谢谢提供的信息。看来你对内存没问题。阅读这些关于SFR和AFR的有趣观点,发现在处理大量顶点负载时建议使用AFR,而在像素着色器负载较重时则更适合使用SFR。即使对我来说,这也是一个有趣的发现。当使用AFR时,您还应确保您是双(甚至多)缓冲区以充分利用它。缺乏多个缓冲区会严重影响AFR。关闭垂直同步-它也会破坏它! - Dimo Markov
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接