Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does SLI decide which VBO belongs to which GPU in OpenGL?

I am aiming to use SLI in AFR mode to increase FPS. I am under the impression that NVIDIA SLI driver will allocate the VBOs automatically and intelligently to individual GPUs. Is this correct?

I have a code that has a large amount of vertices/faces represented by VAO with three different VBOs (vertices, color, indices). There is no fps increase with using double GPU with SLI.

I duplicate the VAO and VBOs with the same vertices/faces and alternate the glDrawElements call between the two VAOs hoping the NVIDIA SLI driver will be clever enough to know one VAO is for one GPU, but unfortunately still no fps increase. Can someone let me know what I did wrong?

I also tried commenting out one of the glDrawElements call for one of the VAO, and it does show double FPS and flickering scene with the actual scene and black screen as expected.

like image 982
user3667089 Avatar asked Nov 10 '22 16:11

user3667089


1 Answers

As mentioned here,

It's noteworthy that while the frequency at which frames arrive may be doubled, the time to produce the frame is not reduced

Additionally, I have never heard about VAOs or VBOs that has been dedicated to one GPU. As far as I know, both adapters have the same cloned buffers. Duplication happens without you even knowing it, and each GPU uses its own copy to produce its part of the frame. I may be wrong, but I doubt it.

That is the reason why if you have 2x2 GB VRAM adapters, you don't get 4GB VRAM. You are still working with 2 GB. Also, if your SLI adapters are of different capacity, the bigger card's memory is lowered to align with the smaller. All the performance boost that you get is from the parallel processing power of the two GPUs, and the fact that your memory bandwidth is twice as big. Memory writes are hardware multicasted, as far as I know, so no big overhead there.

EDIT: Read these interesting points about SFR and AFR. Turns out that AFR is recommended for heavy vertex load, while SFR is better for pixel shader load. That was an interesting find even for me. When using AFR, you should also make sure that you're double buffered to get most out of it. Lack of multiple buffers literally kills AFR. Turn your vsync OFF - it kills it too!

like image 132
Dimo Markov Avatar answered Dec 17 '22 23:12

Dimo Markov