Introduction

AOCL is a set of numerical libraries optimized for AMD processors based on the AMD “Zen” core architecture and generations.  Supported processor families are AMD EPYC™, AMD Ryzen™, and AMD Ryzen™ Threadripper™ processors. The tuned implementations of industry-standard math libraries enable rapid development of scientific and high performance computing applications.

Official Website: https://www.amd.com/en/developer/aocl.html

The following AOCL libraries are supported with Spack:

  • amdblis
  • amdlibflame
  • amdfftw
  • amdscalapack
  • amdlibm
  • aocl-sparse

Note: Users can install the above libraries individually, or as a bundle using the amd-aocl package.

 

AMD BLIS

AOCL-BLIS is a high-performant implementation of the Basic Linear Algebra Subprograms (BLAS). The BLAS was designed to provide the essential kernels of matrix and vector computation and are the most commonly used and computationally intensive operations in dense numerical linear algebra. Select kernels have been optimized for the AMD “Zen”-based processors, for example, AMD EPYC, AMD Ryzen™, AMD Ryzen™ Threadripper™ processors by AMD and others.

AMD offers the optimized version of BLIS (AOCL-BLIS) that supports C, FORTRAN, and C++ template interfaces for the BLAS functionalities.

Official Website: https://www.amd.com/en/developer/aocl/blis.html

 

Building AMD BLIS

    $ spack install amdblis %aocc

The following is the list of variants available with AMD BLIS:

Variant (Default) Allowed Values Description
blas on, off BLAS Compatibility
cblas on, off CBLAS Compatibility
ilp64 on, off ILP64 Support 
libs shared, static Build shared libs, static libs, or both
threads pthreads, openmp, none Multithreading support

AMD LibFLAME

AOCL-libFLAME is a high performant implementation of Linear Algebra PACKage (LAPACK). LAPACK provides routines for solving systems of linear equations, least-squares problems, eigenvalue problems, singular value problems, and the associated matrix factorizations. It is extensible, easy to use, and available under an open-source license. libFLAME is a C-only implementation. Applications relying on standard Netlib LAPACK interfaces can utilize libFLAME with virtually no changes to their source code.

Official Website: https://www.amd.com/en/developer/aocl/blis.html#libflame

 

Building AMD libFLAME

    $ spack install amdlibflame %aocc

The following is the list of variants available with AMD libFLAME:

Variant (Default) Allowed Values Description
ilp64 on, off Build with ILP64 support
lapack2flame on, off Map legacy LAPACK routine invocations to their corresponding native C implementations in libflame
shared on, off Build shared library
static on, off Build static library
threads pthreads, openmp, none Multithreading support

AMD FFTW

FFTW is a comprehensive collection of fast C routines for computing the Discrete Fourier Transform (DFT) and various special cases thereof, copyrighted by MIT and distributed under the GNU General Public License. For more information, refer to FFTW website (fftw.org). An AMD-optimized FFTW that includes selective kernels and routines optimized for the AMD EPYC™, Ryzen™, and Ryzen™ Threadripper™ processor families is available.

Official Website: https://www.amd.com/en/developer/aocl/fftw.html

 

Building AMD FFTW

    $ spack install amdfftw %aocc

The following is the list of variants available with AMD FFTW:

Variant (Default) Allowed Values Description
amd-top-n-planner on, off Build with amd-top-n-planner support
amd-mpi-vader-limit on, off Build with amd-mpi-vader-limit support
static on, off Build with static support
amd-trans on, off Build with amd-trans support
amd-app-opt on, off Build with amd-opt support
amd-fast-planner on, off Option to reduce the planning time without much tradeoff in the performance. It is supported for float and double precision
amd-dynamic-dispatcher on, off Single portable optimized library to execute on different x86 CPU architectures
mpi on, off Activate MPI support
openmp on, off Enable OpenMP Support
precision long_double, quad, float, double Build the selected floating-point precision libraries
shared on, off Builds a shared version of the library
threads on, off Enable SMP threads support

AMD ScaLAPACK

AOCL-ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines. It can be used to solve linear systems, least squares problems, eigenvalue problems, and singular value problems. AOCL-ScaLAPACK is optimized for AMD “Zen”-based processors. It depends on the external libraries BLAS and LAPACK; thus, the use of AOCL-BLIS and AOCL-libFLAME is recommended.

Official Website: https://www.amd.com/en/developer/aocl/scalapack.html

 

Building AMD ScaLAPACK

    $ spack install amdscalapack %aocc

The following is the list of variants available with AMD ScaLAPACK:

Variant (Default) Allowed Values Description
ilp64 on, off Build with ILP64 support
pic on, off Build position independent code
shared on, off Build the shared library version

AMD LibM (Math Library)

AOCL-LibM is a software library containing a collection of basic math functions optimized for x86-64 processor-based machines. It provides many routines from the list of standard C99 math functions.

AOCL-LibM is a C library, which users can link in to their applications to replace compiler-provided math functions. 

Official Website: https://www.amd.com/en/developer/aocl/libm.html

 

Building AMD LibM

    $ spack install amdlibm %aocc

List of variants for use with AMD LibM:

Variant (Default) Allowed Values Description
verbose on, off Building with verbosity

AOCL-Sparse

AOCL-Sparse contains basic linear algebra subroutines for sparse matrices and vectors optimized for AMD EPYC™, Ryzen™, and Ryzen™ Threadripper™ processor families. It is designed to be used with C and C++. AOCL-Sparse includes sparse solver functions that perform matrix factorization and solution phases.

Official Website: https://www.amd.com/en/developer/aocl/sparse.html

Building AOCL-Sparse

    $ spack install aocl-sparse %aocc

The following is the list of variants available with AOCL-Sparse:

Variant (Default) Allowed Values Description
avx Debug, Release Enable experimental AVX512
ilp64 on, off Build with ILP64 support
benchmarks on, off Build Benchmarks
unit tests on, off Build sparse unit tests
examples on, off Build sparse examples
shared on, off Build shared library

AOCL-AOCL

AMD-AOCL is a package that provides amdblis, amdlibflame, amdfftw, amdscalapack, amdlibm, and aocl-sparse as a bundle for easy installation. 

 

Building AMD-AOCL

    $ spack install amd-aocl %aocc

The following is the list of variants available with AMD-AOCL:

Variant (Default) Allowed Values Description
openmp Debug, Release Enable OpenMP support