CUDA Compatibility
CUDA Compatibility
CUDA Compatibility
TABLE OF CONTENTS
www.nvidia.com
CUDA Compatibility vR450 | ii
LIST OF FIGURES
www.nvidia.com
CUDA Compatibility vR450 | iii
LIST OF TABLES
www.nvidia.com
CUDA Compatibility vR450 | iv
Chapter 1.
OVERVIEW
The CUDA toolkit is transitioning to a faster release cadence to deliver new features,
performance improvements, and critical bug fixes. However, the tight coupling of the
CUDA runtime with the display driver (specifically libcuda.so—the CUDA driver on
Linux systems), means that the customer is required to update the entire driver stack to
use the latest CUDA software (including the compiler, libraries, and tools).
The new CUDA Compatibility Platform enables the use of new CUDA toolkit
components on systems with older base installations.
www.nvidia.com
CUDA Compatibility vR450 | 1
Chapter 2.
COMPATIBILITY
www.nvidia.com
CUDA Compatibility vR450 | 2
Compatibility
www.nvidia.com
CUDA Compatibility vR450 | 3
Compatibility
2.1. Source Compatibility
We define source compatibility as a set of guarantees provided by the library, where a
well-formed application built against a specific version of the library (using the SDK)
will continue to build and run without errors when a newer version of the SDK is
installed.
Both the CUDA driver and the CUDA runtime are not source compatible across the
different SDK releases. APIs can be deprecated and removed, requiring changes to
the application. Developers are notified through deprecation and documentation
mechanisms of any current or upcoming changes. Although the driver APIs can
change, they are versioned, and their symbols persist across releases to maintain binary
compatibility.
2.2. Binary Compatibility
We define binary compatibility as a set of guarantees provided by the library, where an
application targeting the said library will continue to work when dynamically linked
against a different version of the library.
The CUDA driver (libcuda.so) provides binary backward compatibility. For example,
an application built against the CUDA 3.2 SDK will continue to function even on today’s
driver stack. On the other hand, the CUDA runtime does not provide these guarantees.
If your application dynamically links against the CUDA 9.2 runtime, it will only work in
the presence of the dynamic 9.2 CUDA runtime on the target system. If the runtime was
statically linked into the application, it will function on a minimum supported driver,
and any driver beyond.
The Table 1 below summarizes the minimum driver required for a specific version of the
CUDA runtime/toolkit. For convenience, today the NVIDIA driver can be installed as
part of the CUDA Toolkit installation.
www.nvidia.com
CUDA Compatibility vR450 | 4
Compatibility
www.nvidia.com
CUDA Compatibility vR450 | 5
Chapter 3.
SUPPORT
3.1. Hardware Support
The current hardware support is shown in Table 2.
www.nvidia.com
CUDA Compatibility vR450 | 6
Support
3.4. Feature Support
There are specific features in the CUDA driver that require kernel-mode support and
will only work with a newer kernel mode driver. A few features depend on other user-
mode components and are therefore also unsupported. See Table 4.
www.nvidia.com
CUDA Compatibility vR450 | 7
Support
410 (>=.48) No No No
384 (>=.111) N/A N/A No
www.nvidia.com
CUDA Compatibility vR450 | 8
Chapter 4.
CUDA COMPATIBILITY PLATFORM
The CUDA Compatibility Platform files are meant as additions to the existing system
installation and not replacements for those files. The platform consists of:
‣ libcuda.so.* - the CUDA Driver
‣ libnvidia-ptxjitcompiler.so.* - the JIT (just-in-time) compiler for PTX files
For ease of deployment, a new package is available in the local installers or the CUDA
network repositories provided by NVIDIA:
‣ cuda-compat-11.0
This package provides the CUDA Compatibility Platform files necessary to run 11.0
CUDA APIs. The package can be installed using Linux package managers such as apt or
yum. For example, on an Ubuntu 16.04 system, run the following command when using
the apt package manager:
$ sudo apt-get install cuda-compat-11-0
The package is installed to the versioned toolkit location typically found in the /usr/
local/cuda-11.0/ directory (or replace 11.0 with the appropriate version).
This package only provides the files, and does not configure the system. These files
should be kept together as the CUDA driver depends on the fatbinary loader that is of
the same version.
These files can also be extracted from the appropriate Tesla Recommended Driver
installer (.run) available in NVIDIA driver downloads. To do this:
1. Download the latest Tesla Recommended Driver, and extract the .run file using
option -x.
2. Copy the three CUDA Compatibility Platform files, listed at the start of this section,
into a user- or root-created directory.
3. Then follow your system’s guidelines for making sure that the system linker picks
up the new libraries.
www.nvidia.com
CUDA Compatibility vR450 | 9
Chapter 5.
DEPLOYMENT CONSIDERATIONS
5.1. Disk Image
In this case the compatibility files are located somewhere on the boot image alongside
the existing system files. The exact path is not important, but the files should remain
together, and be resolvable by the dynamic loader. This could be accomplished by
having the system’s loader automatically pick them up (e.g. ld.so.conf), through the
use of RPATH, or through a more manual process of documentation (users of the new
toolkit must manually set LD_LIBRARY_PATH).
5.2. Modules System
It is common for the users to request any of the several CUDA Toolkit versions in the
same way they might request any of several versions of numerous other system libraries
or compiler toolchains.
A common mechanism to enable this is the Modules System, wherein the admin, or the
user, sets up ‘module’ scripts for each version of each package, and then the user can
execute a command like ‘module load cuda/10.0’.
www.nvidia.com
CUDA Compatibility vR450 | 10
Deployment Considerations
Often the loading of various module versions will be scripted with the application such
that each application picks up exactly the versions of its dependencies that it needs, even
if other versions would have been available for other applications to choose from.
If the components from the CUDA Compatibility Platform are placed such that they are
chosen by the module load system, it is important to note the limitations of this new
path – namely, only certain major versions of the system driver stack, only NVIDIA
Tesla GPUs are supported, and only in a forward compatible manner (i.e. an older
libcuda.so will not work on newer base systems).
It is therefore recommended that the module load script be aware of these limitations,
and proactively query the system for whether the compatibility platform can be used.
In the cases where it cannot use the compatibility platform, a fallback path to the
default system’s installed CUDA driver can provide a more consistent experience. See
Miscellaneous for performing this task with RPATH.
5.3. Miscellaneous
After the system is fully upgraded (the display driver and the CUDA driver) to a newer
base installation, the compatibility platform files should be removed as they are no
longer necessary and will not function.
A common way of ensuring that the new CUDA Compatibility Platform files are
picked up, is by using RPATH. This ensures that during the compilation process of the
application, the runtime search path is hard-coded into the executable.
For example, the RPATH can be set to /usr/compat and this setting is used throughout
the cluster. Each individual system then configures /usr/compat to the appropriate
directory – if forward compatibility is desired/allowed, this can contain the (latest)
CUDA Compatibility Platform files.
In order to workaround the lack of automatic fallback when the system driver leapfrogs
the CUDA Compatibility Platform files, or in case of a non-supported HW configuration,
the /usr/compat can point to the Tesla Recommended Driver for those systems instead.
This way a single, consistent, path is used throughout the entire cluster.
www.nvidia.com
CUDA Compatibility vR450 | 11
ALL NVIDIA DESIGN SPECIFICATIONS, REFERENCE BOARDS, FILES, DRAWINGS,
DIAGNOSTICS, LISTS, AND OTHER DOCUMENTS (TOGETHER AND SEPARATELY,
"MATERIALS") ARE BEING PROVIDED "AS IS." NVIDIA MAKES NO WARRANTIES,
EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO THE
MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF
NONINFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR
PURPOSE.
Information furnished is believed to be accurate and reliable. However, NVIDIA
Corporation assumes no responsibility for the consequences of use of such
information or for any infringement of patents or other rights of third parties
that may result from its use. No license is granted by implication of otherwise
under any patent rights of NVIDIA Corporation. Specifications mentioned in this
publication are subject to change without notice. This publication supersedes and
replaces all other information previously supplied. NVIDIA Corporation products
are not authorized as critical components in life support devices or systems
without express written approval of NVIDIA Corporation.
NVIDIA and the NVIDIA logo are trademarks or registered trademarks of NVIDIA
Corporation in the U.S. and other countries. Other company and product names
may be trademarks of the respective companies with which they are associated.
© 2007-2020 NVIDIA Corporation. All rights reserved.
www.nvidia.com