|
Article ID: 705
Last updated: 13 Oct, 2026
CUDA stands for Compute Unified Device Architecture. It is a parallel computing platform and programming model created by NVIDIA in 2006 for accelerating computing on General-Purpose Graphics Processing Units (GPGPUs). This article provides a high-level view of two of the components in CUDA—the CUDA Toolkit and the CUDA driver—and the compatability between them. CUDA ToolkitEverything needed to develop, optimize and deploy applications written in CUDA is included in the CUDA Toolkit. It is released multiple times per year by NVIDIA to provide new features, performance improvement, and critical bug fixes. The Toolkit includes: A C/C++ CompilerThe NVIDIA CUDA compiler (nvcc) is for compiling applications written in standard C/C++ with CUDA extensions. The CUDA applications, which typically use the suffix .cu, are turned into machine codes by the compiler for running on the GPUs. Notes:
GPU-accelerated CUDA LibrariesBesides explicitly incorporating CUDA extensions to the standard C/C++ languages, an application may also utilize some of these pre-built GPU-accelerated Math Libraries included in the CUDA Toolkit:
These libraries provide the highest level of abstraction in GPU programming. The NVIDIA HPC compilers (nvc, nvc++, and nvfortran) provide a flag -cudalib[=cublas|cufft|..] for linking to these CUDA libraries. Check out examples available under the 4_CUDA_Libraries section of the CUDA samples or the directory /nasa/arm/software/nvhpc/24.11/Linux_aarch64/24.11/examples/CUDA-Libraries on a NAS GH200 front end system chghfe[01,02]. Besides the Math Libraries, the CUDA Toolkit also includes:
NVIDIA also provides GPU-accelerated Data Processing Libraries, Deep Learning Core Libraries, and more. However, they are not included in the CUDA Toolkit. Read NVIDIA CUDA-X Libraries for more information. A CUDA Runtime LibraryThe CUDA runtime (libcudart.so, cuda_runtime.h, cuda_runtime_api.h) is one of the software layers that can be implicitly or explicitly used in GPU programming. It sits below the user application and GPU-accelerated libraries and above the CUDA driver. The CUDA runtime API provides developers with a high-level C++ interface for simplified device management, error handling, memory management, stream management, and more. For example, the functions cudaMalloc, cudaMemset, cudaMemcpy, cudaFree are included in the CUDA runtime memory management. Debugging and Optimization Tools
CUDA Toolkit on NAS SystemsFor systems running with the Linux operating system, the CUDA Toolkit is available for either the x86_64 architecture (for example, the NAS mil_a100 nodes) or the ARM architecture (Apple-developed arm64 and LLVM-developed aarch64, such as the NAS gh200). The CUDA Toolkit is included in the NVIDIA HPC SDK. At NAS, multiple versions of the HPC SDK are available as modules (for example, nvhpc/24.11). In an HPC SDK release, there may be one or more CUDA Toolkit versions included. For example, on the GH200 front-end or compute nodes, the available CUDA Toolkit versions and default are:
Notes:
TIPS:
CUDA DriverComplementary to the CUDA Toolkit whose components are mainly used for building applications, the CUDA driver components are mainly used for running applications. In order to run a CUDA application, the system should have a CUDA enabled GPU and a NVIDIA driver that is compatible with the CUDA Toolkit that was used to build the application itself. There are two components in the CUDA driver:
CUDA Driver on NAS SystemsUnlike the CUDA Toolkit, which can have multiple versions installed, only one version of the CUDA driver can be installed on a GPU node by a system administrator. You can find the kernel module version installed using either the nvidia-smi or the modinfo command. For example:
Note: No CUDA driver is installed on the CPU-only nodes such as CFE and pbspl4. WARNING: The CUDA driver version installed on GPU systems is changed from time to time. The driver version may be different on different NAS GPU nodes (mil_a100 and gh200).
CUDA CompatibilityRunning a CUDA application requires the system with at least one CUDA-capable GPU and a driver that is compatible with the CUDA Toolkit.
TIP: If you bring an application built on a non-NAS system, check which version of CUDA Toolkit was used to build it and whether the CUDA driver on the NAS GPU nodes you intend to use is compatible with it.
References |