Numerical Libraries¶
BLIS¶
BLIS is an award-winning portable software framework for instantiating high-performance BLAS-like dense linear algebra libraries. The framework was designed to isolate essential kernels of computation that, when optimized, immediately enable optimized implementations of most of its commonly used and computationally intensive operations. BLIS is written in ISO C99 and available under a new/modified/3-clause BSD license. While BLIS exports a new BLAS-like API, it also includes a BLAS compatibility layer which gives application developers access to BLIS implementations via traditional BLAS routine calls. An object-based API unique to BLIS is also available.
List available versions
module avail blis
module load blis
module show blis
FFTW¶
FFTW (Fastest Fourier Transforms in the West) is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST). We believe that FFTW, which is free software, should become the FFT library of choice for most applications.
Licensing Terms and Conditions Free software, released under the GNU General Public License (GPL, see FFTW license).
FFTW version 3¶
List available versions
module avail fftw/3.
module load fftw/3.
Linking¶
Prefix:
- default (double precision)
fftw3 - single
fftw3f
Link flags:
-
-lfftw3 -lm -
threaded
-lfftw3_threads -lfftw3 -lpthread -lm - openmp
-fopenmp -lfftw3_omp -lfftw3 -lm - MPI
-lfftw3_mpi -lfftw3 -lm
Example
gcc -I$FFTWROOT/include fftw3_example.c -L$FFTWROOT/lib -lfftw3 -lm
GSL¶
http://www.gnu.org/software/gsl/
The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.
Licensing Terms and Conditions
Unlike the licenses of proprietary numerical libraries the license of GSL does not restrict scientific cooperation. It allows you to share your programs freely with others. License
Usage
List available versions
module avail gsl
module load gsl
LAPACK¶
Linear Algebra PACKage
LAPACK is written in Fortran 90 and provides routines for solving systems of simultaneous linear equations, least-squares solutions of linear systems of equations, eigenvalue problems, and singular value problems. The associated matrix factorizations (LU, Cholesky, QR, SVD, Schur, generalized Schur) are also provided, as are related computations such as reordering of the Schur factorizations and estimating condition numbers. Dense and banded matrices are handled, but not general sparse matrices. In all areas, similar functionality is provided for real and complex matrices, in both single and double precision.
The LAPACK library is available in several flavors:
MKL¶
https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl.html
- Linear Algebra [BLAS, LAPACK, ScaLAPACK]
- Sparse [CSR,CSC,BSR, DIA,Skyline, NIST, SparseKit]
- Fast Fourier Transform [serial, multi-thread, distributed]
- Vector Math Library (VML)
- Vector Statistical Library (VSL)
Licensing Terms and Conditions
Usage List available versions
module load oneAPI/2025.0.1
module avail mkl
Enviroment Variables¶
module load oneAPI/2025.0.1
module show mkl
$MKLROOT /apps/compilers/oneAPI/2025.0.1/mkl/2025.0
$INCLUDE /apps/compilers/oneAPI/2025.0.1/mkl/2025.0/include
$LD_LIBRARY_PATH /apps/compilers/oneAPI/2025.0.1/mkl/2025.0/lib
Link libraries¶
INTEL Math Kernel Library Link Line Advisor https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html#gs.m8mwyi
C Lapack Example:¶
gnu c/c++ 32 bit integers (standar)
## threaded version
gcc -fopenmp -m64 -I${MKLROOT}/include dgesv_example.c -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_gnu_thread.a -Wl,--end-group -ldl -lpthread -lm
## sequential version
gcc -m64 -I${MKLROOT}/include dgesv_example.c -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_sequential.a -Wl,--end-group -ldl -lpthread -lm
- for 64-bit integers (greater than 2^31) check for “ILP64 mkl interface”
FORTRAN Lapack Example:¶
gnu gfortran 32 bit integers
## threaded version
gfortran -fopenmp -m64 -I${MKLROOT}/include dgesv_example.f -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_gf_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_gnu_thread.a -Wl,--end-group -ldl -lpthread -lm
## sequential version
gfortran -m64 -I${MKLROOT}/include dgesv_example.f -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_gf_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_sequential.a -Wl,--end-group -ldl -lpthread -lm
- for 64-bit integers (greater than 2^31) check for “ILP64 mkl interface”
Threading¶
OMP_NUM_THREADS
MKL_NUM_THREADS
SCALAPACK Example¶
gnu c/c++ OpenMPI
## threaded version
mpicc -m64 -I${MKLROOT}/include scalpack_example.c ${MKLROOT}/lib/intel64/libmkl_scalapack_lp64.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_sequential.a -Wl,--end-group ${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a -lpthread -lm
## sequential version
mpicc -fopenmp -m64 -I${MKLROOT}/include scalapack_example.c ${MKLROOT}/lib/intel64/libmkl_scalapack_lp64.a -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_sequential.a -Wl,--end-group ${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a -lpthread -lm
OPENBLAS¶
https://github.com/OpenMathLib/OpenBLAS
OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.
OpenBLASILP is a version of OpenBLAS that uses 64-bit integers
Please read the documents on OpenBLAS wiki pages http://www.openmathlib.org/OpenBLAS/docs/.
Licensing Terms and Conditions License
Usage
List available versions
module avail openblas
openblas/0.3.28/gnu openblasILP/0.3.28/gnu
module load openblas
Prefix
gnu
libopenblas_zen-r0.3.28.alibopenblas_zenp-r0.3.28.a
Linking¶
CBLAS interface¶
- GNU
module load gnu openblas/0.3.28/gnu
gcc openblas_example.c -I$BLASROOT/include/ -L$BLASROOT/lib -lopenblas_zenp-r0.3.28 -lpthread
PETSC¶
PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations.
Usage
List available versions
module avail petsc
module load petsc
module show petsc
SCALAPACK¶
Scalable Linear Algebra PACKage
ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines. ScaLAPACK solves dense and banded linear systems, least squares problems, eigenvalue problems, and singular value problems. The key ideas incorporated into ScaLAPACK include the use of
- a block cyclic data distribution for dense matrices and a block data distribution for banded matrices, parametrizable at runtime;
-
block-partitioned algorithms to ensure high levels of data reuse;
-
well-designed low-level modular components that simplify the task of parallelizing the high level routines by making their source code the same as in the sequential case.
The LAPACK library is available in several flavors:
Netlib¶
Licensing Terms and Conditions
http://www.netlib.org/scalapack/
ScaLAPACK is a freely-available software package. It is available from netlib via anonymous ftp and the World Wide Web at http://www.netlib.org/scalapack . Thus, it can be included in commercial software packages (and has been). We only ask that proper credit be given to the authors.
The license used for the software is the modified BSD license
Usage
List available versions
module avail scalapack
module load scalapack
Link¶
-L$SCALAPACKROOT/lib -lscalapack
NOTE Scalapack is also available via MKL library
VORO++¶
Voro++ is a software library for carrying out three-dimensional computations of the Voronoi tessellation. A distinguishing feature of the Voro++ library is that it carries out cell-based calculations, computing the Voronoi cell for each particle individually. It is particularly well-suited for applications that rely on cell-based statistics, where features of Voronoi cells (eg. volume, centroid, number of faces) can be used to analyze a system of particles.
Usage
List available versions
module avail voro++
module load voro++