Appendix W. SLI and MultiGPU
FrameRendering
This driver contains support for NVIDIA SLI FrameRendering and
NVIDIA MultiGPU FrameRendering. Both of these technologies allow an
OpenGL application to take advantage of multiple GPUs to improve
visual performance.
The distinction between SLI and MultiGPU is straightforward. SLI
is used to leverage the processing power of GPUs across two or more
graphics cards, while MultiGPU is used to leverage the processing
power of two GPUs colocated on the same graphics card. If you want
to link together separate graphics cards, you should use the "SLI"
X config option. Likewise, if you want to link together GPUs on the
same graphics card, you should use the "MultiGPU" X config option.
If you have two cards, each with two GPUs, and you wish to link
them all together, you should use the "SLI" option.
In Linux, with two GPUs SLI and MultiGPU can both operate in one
of three modes: Alternate Frame Rendering (AFR), Split Frame
Rendering (SFR), and Antialiasing (AA). 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. AA 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.
With four GPUs, the same options are applicable. AFR mode cycles
through all four GPUs, each GPU rendering a frame in turn. SFR mode
splits the frame horizontally into four pieces. AA mode splits the
work between the four GPUs, allowing antialiasing up to 64x. With
four GPUs SLI can also operate in an additional mode, Alternate
Frame Rendering of Antialiasing. (AFR of AA). With AFR of AA, pairs
of GPUs render alternate frames, each GPU in a pair doing half of
the antialiasing work. Note that these scenarios apply whether you
have four separate cards or you have two cards, each with two
GPUs.
MultiGPU is enabled by setting the "MultiGPU" option in the X
configuration file; see Appendix D, X
Config Options for more details about the MultiGPU
option.
The nvidia-xconfig utility can be used to set the MultiGPU
option, rather than modifying the X configuration file by hand. For
example:
% nvidia-xconfig --multigpu=on
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
SLI requires identical PCI-Express graphics cards, a supported
motherboard chipset, and in most cases a "video bridge" connecting
the graphics cards. Note that no mobile GPUs are supported, and SLI
on Quadro always requires a video bridge.
For the latest in supported SLI and MultiGPU configurations,
including SLI- and Multi-GPU capable GPUs and SLI-capable
motherboards, please see http://www.slizone.com.
Only one display can be used when SLI or MultiGPU is enabled. If
X is configured to use multiple screens and screen 0 has SLI or
MultiGPU enabled, the other screens will be disabled. TwinView is
also not supported with SLI or MultiGPU. Please note that if SLI or
MultiGPU is enabled, the GPUs used by that configuration are
unavailable for single GPU rendering.
W.1.
Frequently Asked SLI and MultiGPU Questions
|
|
Why is glxgears slower when SLI or MultiGPU is
enabled?
|
|
When SLI or MultiGPU is enabled, the NVIDIA driver must
coordinate the operations of all 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 or MultiGPU is enabled?
|
|
The NVIDIA Accelerated Linux Driver Set does not automatically
detect the optimal SLI or MultiGPU 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 or MultiGPU fail to initialize?
|
|
There are several reasons why SLI or MultiGPU may fail to
initialize. Most of these should be clear from the warning message
in the X log file; e.g.:
-
SLI/MultiGPU is only supported on
PCI-E
-
GPUs do not match
-
GPU video BIOS does not support
SLI/MultiGPU
-
Insufficient PCI-E link
width
The message Failed to initialize
SLI/MultiGPU! 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 or MultiGPU
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 and MultiGPU 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.
-
The PCI-Express slots on the motherboard must provide a minimum
link width. Please make sure that the PCI Express slot(s) on your
motherboard meet the following requirements and that you have
connected the graphics board to the correct PCI Express
slot(s):
|
|
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 or MultiGPU 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.
|