Appendix W. SLI FrameRendering

This driver contains support for the NVIDIA SLI FrameRendering. SLI FrameRendering allows an OpenGL application to take advantage of two graphics cards at the same time to improve performance.

In Linux, SLI can operate in one of three modes: Alternate Frame Rendering (AFR), Split Frame Rendering (SFR), and SLI Antialiasing (SLIAA). When AFR mode is active, one GPU draws the next frame while the other one works on the frame after that. In SFR mode, each frame is split horizontally into two pieces, with one GPU rendering each piece. The split line is adjusted to balance the load between the two GPUs. SLIAA mode splits antialiasing work between the two GPUs. Both GPUs work on the same scene and the result is blended together to produce the final frame. This mode is useful for applications that spend most of their time processing with the CPU and cannot benefit from AFR.

SLI is enabled by setting the "SLI" option in the X configuration file; see Appendix D, X Config Options for more details about the SLI option.

The nvidia-xconfig utility can be used to set the SLI option, rather than modifying the X configuration file by hand. For example:

    % nvidia-xconfig --sli=on

See Appendix D, X Config Options for more details about the SLI option.

SLI requires two identical PCI-Express graphics cards, a supported motherboard chipset, and in most cases a "video bridge" connecting the two graphics cards. Please note that no mobile GPUs are supported, and SLI on Quadro always requires a video bridge.

For the latest in supported SLI configurations, including SLI-capable GPUs and SLI-capable motherboards, please see http://www.slizone.com.

Only one display can be used when SLI is enabled. If X is configured to use multiple screens and screen 0 has SLI enabled, the other screens will be disabled. TwinView is also not supported with SLI.

W.1. Frequently Asked SLI Questions

Why is glxgears slower when SLI is enabled?

When SLI is enabled, the NVIDIA driver must coordinate the operations of both GPUs when each new frame is swapped (made visible). For most applications, this GPU synchronization overhead is negligible. However, because glxgears renders so many frames per second, the GPU synchronization overhead consumes a significant portion of the total time, and the framerate is reduced.

Why is Doom 3 slower when SLI is enabled?

The NVIDIA Accelerated Linux Driver Set does not automatically detect the optimal SLI settings for games such as Doom 3 and Quake 4. To work around this issue, the environment variable __GL_DOOM3 can be set to tell OpenGL that Doom 3's optimal settings should be used. In Bash, this can be done in the same command that launches Doom 3 so the environment variable does not remain set for other OpenGL applications started in the same session:

    % __GL_DOOM3=1 doom3

Doom 3's startup script can also be modified to set this environment variable:

    #!/bin/sh
    # Needed to make symlinks/shortcuts work.
    # the binaries must run with correct working directory
    cd "/usr/local/games/doom3/"
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
    export __GL_DOOM3=1
    exec ./doom.x86 "$@"

This environment variable is temporary and will be removed in the future.

Why does SLI fail to initialize?

There are several reasons why SLI may fail to initialize. Most of these should be clear from the warning message in the X log file; e.g.:

  • SLI is only supported on PCI-E

  • GPUs do not match

  • GPU video BIOS does not support SLI

The message Failed to initialize SLI! Reason: Operating system error is likely due to problems with your Linux kernel. The NVIDIA driver must have access to the PCI Bridge (often called the Root Bridge) that each NVIDIA GPU is connected to in order to configure SLI correctly. There are many kernels that do not properly recognize this bridge and, as a result, do not allow the NVIDIA driver to access this bridge. Please see the below "How can I determine if my kernel correctly detects my PCI Bridge?" FAQ for details.

Below are some specific troubleshooting steps to help deal with SLI initialization failures.

  • Make sure that ACPI is enabled in your kernel. NVIDIA's experience has been that ACPI is needed for the kernel to correctly recognize the Root Bridge. Note that in some cases, the kernel's version of ACPI may still have problems and require an update to a newer kernel.

  • Run lspci to check that multiple NVIDIA GPUs can be identified by the operating system; e.g:

        % /sbin/lspci | grep -i nvidia
    

    If lspci does not report all the GPUs that are in your system, then this is a problem with your Linux kernel, and it is recommended that you use a different kernel.

  • Make sure you have the most recent SBIOS available for your motherboard.

How can I determine if my kernel correctly detects my PCI Bridge?

As discussed above, the NVIDIA driver must have access to the PCI Bridge that each NVIDIA GPU is connected to in order to configure SLI correctly. The following steps will identify whether the kernel correctly recognizes the PCI Bridge:

  • Identify both NVIDIA GPUs:

        % /sbin/lspci | grep -i vga
    
        0a:00.0 VGA compatible controller: nVidia Corporation [...]
        81:00.0 VGA compatible controller: nVidia Corporation [...]
    

  • Verify that each GPU is connected to a bus connected to the Root Bridge (note that the GPUs in the above example are on buses 0a and 81):

        % /sbin/lspci -t
    

    good:

        -+-[0000:80]-+-00.0
         |           +-01.0
         |           \-0e.0-[0000:81]----00.0
        ...
         \-[0000:00]-+-00.0
                     +-01.0
                     +-01.1
                     +-0e.0-[0000:0a]----00.0
    

    bad:

        -+-[0000:81]---00.0
        ...
         \-[0000:00]-+-00.0
                     +-01.0
                     +-01.1
                     +-0e.0-[0000:0a]----00.0
    

    Note that in the first example, bus 81 is connected to Root Bridge 80, but that in the second example there is no Root Bridge 80 and bus 81 is incorrectly connected at the base of the device tree. In the bad case, the only solution is to upgrade your kernel to one that properly detects your PCI bus layout.