The NVIDIA Performance Libraries (NVPL) are a collection of high-performance mathematical libraries optimized for NVIDIA aarch64 CPUs.
These CPU-only libraries have no dependencies on CUDA or CTK. They are drop-in replacements for standard C and Fortran mathematical APIs, allowing HPC applications to achieve maximum performance on NVIDIA CPU platforms.
The provided samples show how to call and link to NVPL libraries from Fortran, C, and C++ applications. Examples use CMake, but can be adapted for custom build environments.
- NVPL Downloads
- Latest release: NVPL-26.5
Samples are compatible with the latest NVPL release. Compatibility with older releases is not guaranteed.
- NVPL BLAS Samples
- NVPL FFT Samples
- NVPL LAPACK Samples
- NVPL RAND Samples
- NVPL ScaLAPACK Samples
- NVPL Sparse Samples
- NVPL Tensor Samples
-
Architecture: aarch64-linux
-
Platform: Arm SBSA
-
CPUs Supported
- NVIDIA Vera (Armv9.2-A Olympus)
- NVIDIA Grace (Armv9.0-A Neoverse-V2)
- NVIDIA DGX Spark / GB10 (Armv9.2-A Cortex-X925/A725)
- AWS Graviton 5 (Armv9.2-A Neoverse-V3)
- AWS Graviton 4 (Armv9.0-A Neoverse-V2)
- AWS Graviton 3/3e (Armv8.4-A Neoverse-V1)
- AWS Graviton 2 (Armv8.2-A Neoverse-N1)
- Ampere Altra (Armv8.2-A Neoverse-N1)
- Any CPU with Armv8.1-A or later architecture
-
OS (Linux)
- Amazon Linux: 2 (*EOL), 2023
- Debian: 12, 13
- Fedora: 42, 43
- RHEL: RHEL8 (8.10), RHEL9 (9.7), RHEL10 (10.1)
- openSUSE/Leap: 15.6, 16.0
- SLES: SLES15 (15.6), SLES16 (16.0)
- Ubuntu: 20.04, 22.04, 24.04, 26.04
- Generally any Linux OS with support for aarch64
- Minimum glibc supported: 2.26 for NVPL 26.5. The next NVPL release will support systems with glibc 2.28 or newer.
- GCC-8 - GCC-16+
- Clang-14 - Clang-22+
- Clang for NVIDIA Grace: 16.x -- 21.x
- NVIDIA HPC Compilers: 23.9 - 26.3+
- C: All libraries
- C++: All libraries via C interfaces
- Fortran: Selected libraries
- GFortran ABI
- NVPL BLAS, LAPACK, and ScaLAPACK provide
lp64andilp64integer ABIs - NVPL FFT provides FFTW Fortran '77 and '03 compatible interfaces
- See individual library sample documentation for further details
All libraries support the following OpenMP runtime libraries. See individual library documentation for details and API extensions supporting nested parallelism.
- GCC:
libgomp.so - Clang:
libomp.so - NVHPC:
libnvomp.so
NVPL provides standard BLACS interfaces for the following MPI distributions. See the NVPL ScaLAPACK Samples Documentation for details.
- MPICH: Runtime support for
>=mpich-4.0 - OpenMPI-3.x
- OpenMPI-4.x
- OpenMPI-5.x
- NVIDIA HPC-X: Use
openmpi4BLACS interface
NVPL provides CMake Package Config files for each component library.
If NVPL was installed via the OS package manager under the /usr
directory, the NVPL packages will already be on the default
CMAKE_PREFIX_PATH. The nvpl_ROOT environment can be used to override
the default search path and force finding NVPL under a specific prefix.
The find_package() command is used to find NVPL and any component libraries:
find_package(nvpl)Each NVPL component library found will print a brief status message with important locations.
- Variable
nvpl_FOUNDwill be true if NVPL is successfully found - Variable
nvpl_VERSIONwill contain the found version - Pass the
REQUIREDkeyword to raise an error ifnvplpackage is not found. - Regardless of the
COMPONENTSkeyword, all available NVPL component libraries installed in the same prefix will be found. - To raise an error if a particular component is not found, use
REQUIRED COMPONENTS ... - Set
QUIETto suppress status messages fromfind_package(). UseREQUIREDif a missing package should be a fatal error. find_package(nvpl)can safely be called multiple times from different locations in a project.
The NVPL component libraries provide Imported Interface
Targets
under the common nvpl:: namespace. To add all the necessary flags to
compile and link against NVPL libraries, use the
target_link_libraries()
command:
target_link_libraries(my_target PUBLIC nvpl::<lib>_<opts>)Here <lib> is the lowercase shorthand for the library/API, and <opts>
are defined by the library.
NVPL component and target names use an all-lowercase naming scheme. See individual library documentation for details on available options.
| Component | Targets | Options / Notes |
|---|---|---|
| blas | nvpl::blas_<int>_<thr> |
<int>: lp64, ilp64; <thr>: seq, omp |
| fft | nvpl::fftw |
FFTW API interface |
| lapack | nvpl::lapack_<int>_<thr> |
<int>: lp64, ilp64; <thr>: seq, omp |
| rand | nvpl::rand, nvpl::rand_mt |
Single-threaded; multi-threaded (OpenMP) |
| scalapack | nvpl::blacs_<int>_<mpi>, nvpl::scalapack_<int> |
<int>: lp64, ilp64; <mpi>: mpich, openmpi3, openmpi4, openmpi5 |
| sparse | nvpl::sparse |
|
| tensor | nvpl::tensor |
Each NVPL component library also exports variables
nvpl_<comp>_VERSION- Version of component librarynvpl_<comp>_INCLUDE_DIR- Full path to component headers directorynvpl_<comp>_LIBRARY_DIR- Full path to component libraries directory
These samples are provided under the NVIDIA Software License for NVPL SDK.