SLI Connection in CUDA


I understand from the programming manual that CUDA doesn’t recognize two SLI connected cards as a single bigger card.

Can anyone explain why this is so, and what can we do to make use of 2 SLI connected cards??

What SLI does in graphics is that one card renders half of the on-screen lines, and the other card renders the rest of the lines.

In CUDA, you have no option but to use the two cards as separate devices, similar to the MultiGPU examples in the SDK.

The data transfer rate that SLI provides is very small, so you would effectively be forced to transfer from device1 to host to device2. SLI works for graphics because there is very little information (relative to a CUDA app) that needs to be passed between the cards, as like Kartik said, one card is rendering one half and the other is rendering the other half. The cards just need to communicate enough to ensure that all pixels are being rendered.

What you have to do is to break up the code manually and send certain processes to one device and other processes to the other device.

That’s true of 3dfx’s SLI. It’s not true of NVIDIA’s SLI in most cases. What it actually does is render one frame on one card and render the next frame on the other card. I think it can split rendering of a single frame for a few applications, but the vast majority use alternate frame rendering.

Weird, I always thought that it was half screen. Two questions then. How much communication is there between cards then compared to half screen? And is this implementation a performance increase or was there some other reason for it?

None except transferring the framebuffer (although that might not be entirely true if you’re doing something like render to texture–I’m not an SLI expert). A big part of it is for performance, but rendering half the screen means you need to store the entirety of memory on both cards, plus it just doesn’t work in some applications as far as I know.

Ok, makes sense. Thanks.