Difference between revisions of "The BLAS and LAPACK libraries"

From Planets
Jump to: navigation, search
(Created page with "The BLAS and LAPACK libraries are very common libraries useful for doing linear algebra operations involving matrices and vectors, .e.g. solving linear equation systems, doing...")
 
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
The BLAS and LAPACK libraries are very common libraries useful for doing linear algebra operations involving matrices and vectors, .e.g. solving linear equation systems, doing SVD factorization, etc.
+
The BLAS (Basic Linaer Algebra) and LAPACK (Linear Algebra PACKage) libraries are very common libraries useful for doing linear algebra operations involving matrices and vectors, .e.g. solving linear equation systems, doing SVD factorization, etc.
 
In many case they are already installed and available Linux systems, but not always... and then you will have to download and install them yourself.
 
In many case they are already installed and available Linux systems, but not always... and then you will have to download and install them yourself.
 +
 +
== Using package managers etc. ==
 +
In many cases, obtaining and installing the BLAS and LAPACK libraries can be done via the system's package manager; e.g. under Ubuntu-Linux with:
 +
<syntaxhighlight lang="bash">
 +
sudo apt-get install libblas-dev liblapack-dev
 +
</syntaxhighlight>
 +
If you don't have root-like (sudo) privileges, or your system manager doesn't help, then you can always install the libraries from scratch as detailed below.
  
 
== Obtaining the source code of the BLAS and LAPACK libraries ==
 
== Obtaining the source code of the BLAS and LAPACK libraries ==
Line 10: Line 17:
  
 
=== Compiling the BLAS library ===
 
=== Compiling the BLAS library ===
Assuming you dowloaded the package in a "BLAS" directory, edit the '''make.inc''' to fit your settings, if needed and simply run
+
Assuming you dowloaded the package in a "BLAS" directory, e.g.:
 +
<syntaxhighlight lang="bash">
 +
wget http://www.netlib.org/blas/blas-3.11.0.tgz
 +
tar xvzf blas-3.11.0.tgz
 +
cd BLAS-3.11.0/
 +
</syntaxhighlight>
 +
Edit the '''make.inc''' to fit your settings (e.g. compiler name and options), if needed and the simply run
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
make
 
make
 
</syntaxhighlight>
 
</syntaxhighlight>
which should produce the static library '''blas_UNIX.a'''. It is good practice to usually use a different naming convention and call the library '''libblas.a''' so you can make a symbolic link to have both available:
+
which should produce the static library '''blas_LINUX.a'''. It is good practice to usually use a different naming convention and call the library '''libblas.a''' so you can make a symbolic link to have both available:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
ln -s blas_UNIX.a libblas.a
+
ln -s blas_LINUX.a libblas.a
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
 
=== Compiling the LAPACK library ===
 
=== Compiling the LAPACK library ===
Assuming you dowloaded the package in a "LAPACK" directory
+
Assuming you dowloaded the package in a "LAPACK" directory, e.g.:
 +
<syntaxhighlight lang="bash">
 +
wget https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.11.0.tar.gz
 +
tar xvzf v3.11.0.tar.gz
 +
cd lapack-3.11.0
 +
</syntaxhighlight>
 +
copy the provided '''make.inc.example''' as '''make.inc''' and adapt it to fit your settings (e.g. compiler name and options), if needed, and then run:
 +
<syntaxhighlight lang="bash">
 +
make
 +
</syntaxhighlight>
 +
which should produce the static library '''liblapack.a'''. Note that recent versions of LAPACK actually incorporate the BLAS library but with a different name: '''librefblas.a'''.
  
 +
== Linking to the libraries ==
 +
One simply needs to specify options
 +
<pre>
 +
-Lpath/to/the/LAPACK/library -llapack -Lpath/to/the/BLAS/library -lblas
 +
</pre>
 +
at compile time. Note the ordering: as some LAPACK routines rely on BLAS routines one must specify the LAPACK library first
  
 
[[Category:FAQ]]
 
[[Category:FAQ]]

Latest revision as of 08:11, 17 October 2023

The BLAS (Basic Linaer Algebra) and LAPACK (Linear Algebra PACKage) libraries are very common libraries useful for doing linear algebra operations involving matrices and vectors, .e.g. solving linear equation systems, doing SVD factorization, etc. In many case they are already installed and available Linux systems, but not always... and then you will have to download and install them yourself.

Using package managers etc.

In many cases, obtaining and installing the BLAS and LAPACK libraries can be done via the system's package manager; e.g. under Ubuntu-Linux with:

sudo apt-get install libblas-dev liblapack-dev

If you don't have root-like (sudo) privileges, or your system manager doesn't help, then you can always install the libraries from scratch as detailed below.

Obtaining the source code of the BLAS and LAPACK libraries

The Fortran source codes are available on Netlib.org : http://www.netlib.org/blas/ and http://www.netlib.org/lapack/

Compiling the libraries

Prerequisites

All you need are a Fortran compiler and the gmake utility

Compiling the BLAS library

Assuming you dowloaded the package in a "BLAS" directory, e.g.:

wget http://www.netlib.org/blas/blas-3.11.0.tgz
tar xvzf blas-3.11.0.tgz
cd BLAS-3.11.0/

Edit the make.inc to fit your settings (e.g. compiler name and options), if needed and the simply run

make

which should produce the static library blas_LINUX.a. It is good practice to usually use a different naming convention and call the library libblas.a so you can make a symbolic link to have both available:

ln -s blas_LINUX.a libblas.a


Compiling the LAPACK library

Assuming you dowloaded the package in a "LAPACK" directory, e.g.:

wget https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.11.0.tar.gz
tar xvzf v3.11.0.tar.gz
cd lapack-3.11.0

copy the provided make.inc.example as make.inc and adapt it to fit your settings (e.g. compiler name and options), if needed, and then run:

make

which should produce the static library liblapack.a. Note that recent versions of LAPACK actually incorporate the BLAS library but with a different name: librefblas.a.

Linking to the libraries

One simply needs to specify options

-Lpath/to/the/LAPACK/library -llapack -Lpath/to/the/BLAS/library -lblas

at compile time. Note the ordering: as some LAPACK routines rely on BLAS routines one must specify the LAPACK library first