GitHub - NVIDIA/NVPLSamples: NVIDIA Performance Libraries: Sample code (original) (raw)

NVPL Samples

The NVIDIA Performance Libraries (NVPL) are a collection of high performance mathematical libraries optimized for the NVIDIA Grace Armv9.0-A Neoverse-V2 architecture.

These CPU-only libraries have no dependencies on CUDA or CTK, and are drop in replacements for standard C and Fortran mathematical APIs allowing HPC applications to achieve maximum performance on the Grace platform.

The provided sample codes show how to call and link to NVPL Libraries in Fortran, C, and C++ applications and libraries. Most examples use CMake, but are easily modified for use in custom build environments.

Installation

Library Samples

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

Support

Systems

Compilers

Languages

OpenMP

All libraries support the following OpenMP runtime libraries. See individual libraries documentation for details and API extensions supporting nested parallelism.

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 Configfiles for the each component library.

Finding NVPL Packages

If NVPL was installed via the OS package manager under the /usrdirectory, the NVPL packages will already be on the defaultCMAKE_PREFIX_PATH. The nvpl_ROOT environment can be used to override the default search path and force finding nvpl under a specific prefix.

Thefind_package()command is used to find nvpl and any component libraries:

Each NVPL component library found will print a brief status message with important locations.

Linking to NVPL Packages

The NVPL component libraries provide Imported Interface Targetsunder the common nvpl:: namespace. To add all the necessary flags to compile and link against NVPL libraries, use thetarget_link_libraries()command:

target_link_libraries(my_target PUBLIC nvpl::_)

Here <lib> is the lowercase shorthand for the library and and <opts>are defined by the library.

NVPL Targets

NVPL component and target names use all-lowercase naming schema. See individual libraries documentation for details on available options.

Component Targets Options / Notes
blas nvpl::blas__ : lp64, ilp64: seq, omp
fft nvpl::fftw FFTW API interface
lapack nvpl::lapack__ : lp64, ilp64: seq, omp
rand nvpl::randnvpl::rand_mt Single-threadedMulti-threaded (OpenMP)
scalapack nvpl::blacs__nvpl::scalapack_ : lp64, ilp64: mpich, openmpi3,openmpi4, openmpi5
sparse nvpl::sparse
tensor nvpl::tensor

NVPL Variables

Each nvpl component library also exports variables

LICENSE

These Sample codes are provided under the NVIDIA Software license for NVPL SDK.