AMD Zen Software Studio with Spack
- AMD Optimizing C/C++ Compiler (AOCC)
- AMD Optimizing CPU Libraries (AOCL)
- AMD uProf
- Setting Preference for AMD Zen Software Studio
Open MPI with AMD Zen Software Studio
Micro Benchmarks/Synthetic Benchmarks
Spack HPC Applications
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 |