Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NVPL Samples

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.

Installation

Library Samples

Samples are compatible with the latest NVPL release. Compatibility with older releases is not guaranteed.

Support

Systems

  • Architecture: aarch64-linux

  • Platform: Arm SBSA

  • CPUs Supported

  • 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.

Compilers

Languages

  • C: All libraries
  • C++: All libraries via C interfaces
  • Fortran: Selected libraries
    • GFortran ABI
    • NVPL BLAS, LAPACK, and ScaLAPACK provide lp64 and ilp64 integer ABIs
    • NVPL FFT provides FFTW Fortran '77 and '03 compatible interfaces
    • See individual library sample documentation for further details

OpenMP

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

MPI

NVPL provides standard BLACS interfaces for the following MPI distributions. See the NVPL ScaLAPACK Samples Documentation for details.

CMake Usage

NVPL provides CMake Package Config files for each component library.

Finding NVPL Packages

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_FOUND will be true if NVPL is successfully found
  • Variable nvpl_VERSION will contain the found version
  • Pass the REQUIRED keyword to raise an error if nvpl package is not found.
  • Regardless of the COMPONENTS keyword, 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 QUIET to suppress status messages from find_package(). Use REQUIRED if a missing package should be a fatal error.
  • find_package(nvpl) can safely be called multiple times from different locations in a project.

Linking to NVPL Packages

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 Targets

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

NVPL Variables

Each NVPL component library also exports variables

  • nvpl_<comp>_VERSION - Version of component library
  • nvpl_<comp>_INCLUDE_DIR - Full path to component headers directory
  • nvpl_<comp>_LIBRARY_DIR - Full path to component libraries directory

LICENSE

These samples are provided under the NVIDIA Software License for NVPL SDK.

About

NVIDIA Performance Libraries: Sample code

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages