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.
Doublescan and interlaced video modes are not currently
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.:
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.
|