BLAS

About

The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations. The Level 1 BLAS perform scalar, vector and vector-vector operations, the Level 2 BLAS perform matrix-vector operations, and the Level 3 BLAS perform matrix-matrix operations.

Warning

Unless there is a compelling reason to adhere to the standalone BLAS build, it may be advisable to consider utilizing the LAPACK package, whereby both BLAS and LAPACK are provided simultaneously.

The different BLAS installations available on Discoverer may be provided with different abilities regarding the indexing of the handled arrays. If the installation supports the default 32-bit API, it is capable of indexing arrays comprising a number of elements less or equal to the upper range of the 32-bit integer type (up to 231-1 elements). In case the installation supports the extended 64-bit API, then the number of elements in one array, can be less or equal to the upper range of the 64-bit integer type (up to 263-1 elements).

Supported versions (32-bit and 64-bit API)

To check which BLAS versions and build types are currently supported on Discoverer, execute on the login node:

module avail blas

The BLAS environment modules with ‘-int64’ in their names provide access to installations that support the 64-bit API, while those with no ‘-int64’ in their names load installations with build-it 32-bit API.

Warning

At present, we solely provide support for the GCC build of the BLAS code. All other builds that were previously accessible on Discoverer, except for those provided by third parties, are deemed retired. The retired builds should not be used in conjunction with productive code.

Note

Whenever possible, consider a transition from BLAS to OpenBLAS (CPU-level optimized clone ot BLAS), AMD Optimizing CPU Libraries (AOCL) (as BLIS), Math Kernel Library (MKL), or the version of BLAS that comes with NVIDIA HPC SDK (former PGI Compilers). That transition might require changes in your source code. Also note that SuperLU installation contains its own BLAS library (as a shared library). Use the correct prelinking to avoid interference at run-time.

If you need to go over the recipe we used to create the BLAS build installed in the public software repository of Discoverer HPC, visit:

https://gitlab.discoverer.bg/vkolev/recipes/-/tree/main/blas

User-supported versions

Users are welcome to bring, compile, and use their own builds of BLAS, but those builds will not be supported by Discoverer HPC team.

Loading/Compiler affinity

To obtain access to the latest BLAS load the environment module that matches your compiler requirements:

LP GCC build (32-bit API)

module load blas/latest-gcc

or specify the particular version of BLAS you need.

Note

This is the lp64 version of the BLAS library, which is capable of indexing arrays comprising a number of elements less or equal to the upper range of the 32-bit integer type (up to 231-1 elements).

ILP GCC build (64-bit API)

module load blas/latest-gcc-int64

or specify the particular version of BLAS you need.

Note

This is the ilp64 version of the BLAS library, which is capable of indexing arrays comprising a number of elements less or equal to the upper range of the 64-bit integer type (up to 263-1 elements).

Intel oneAPI build (retired)

Warning

This build cannot pass the standard tests included in the code package. Henceforth, it should be regarded as retired. It is advisable to refrain from linking it to any productive code.

module load blas/latest-intel

or specify the particular version of BLAS you need.

Note

This is the lp64 version of the BLAS library, which is capable of indexing arrays comprising a number of elements less or equal to the upper range of the 32-bit integer type (up to 231-1 elements).

Consider switching to Math Kernel Library (MKL).

NVIDIA HPC SDK build

See NVIDIA HPC SDK (former PGI Compilers).

Getting help

See Getting help