Intel compilers
Dit bericht is meer dan 5 jaar oud, het is misschien niet meer accuraat.
Nieuwe Intel compilers (Intel OneAPI Base en HPC Toolkits)
De nieuwste versies van de Intel compilers, verkrijgbaar onder de naam Intel OneAPI, zijn vrij verkrijgbaar en te gebruiken, er hoeft geen licentie meer gekocht te worden. De 2023.2 versie is geinstalleerd op door C&CZ beheerde Ubuntu systemen. Als de compilers beschikbaar zijn, dan geeft het module commando
module avail
ook “compiler/latest” te zien, dus bv. de Intel C (icc) en Fortran (ifort) compilers zijn te gebruiken na
module add compiler/latest
Intel compilers (2019u5 / 2019u4 / 2019 / 2014)
C&CZ heeft samen met TCM en Theoretische Chemie twee licenties voor
gelijktijdig gebruik van de Intel Parallel Studio XE voor
Linux aangeschaft.
Verschillende versies zijn geïnstalleerd in /vol/opt/intelcompilers
en
beschikbaar op o.a. clusternodes en
loginservers. Om de omgevingsvariabelen
goed te zetten, moeten SH/BASH-gebruikers vooraf uitvoeren voor de
nieuwste versie:
source /vol/opt/intelcompilers/intel-2019u5/composerxe/bin/compilervars.sh intel64
en CSH-gebruikers:
setenv arch intel64
source /vol/opt/intelcompilers/intel-2019u5/composerxe/bin/compilervars.csh intel64
Daarna levert icc -V
het versienummer. Voor de oudere versies moet
“2019u5” veranderd worden in “2019u4”, “2019” resp. “2014”.
Een erg handige resource is
intel-mkl-link-line-advisor
waarmee je compiler- en linker-opties kunt opvragen voor het gebruik van
de MKL.
Documentation for the previous version (2011)
Compiling Fortran (/opt/intel/bin/ifort)
- Intel Fortran Composer XE 2011 Getting Started Tutorials
- Intel Fortran Compiler XE 12.0 User and Reference Guides
Math Kernel Library (mkl, linking blas, lapack)
Intel Cluster Studio 2011
- Intel Cluster Studio 2011 for Linux* OS - index to all local documentation
- Intel® MPI Library for Linux OS Documentation Index
How to create a standalone MKL version of BLAS and LAPACK shared libraries ?
This is described in detail in Building Custom Shared Objects
- Create a new directory (e.g. ~/lib)
mkdir ~/lib
cd ~/lib
- Copy these files:
cp /opt/intel/composerxe/mkl/tools/builder/{makefile,blas_list,lapack_list} ~/lib
- Set the MKLROOT variable (in bash):
MKLROOT=/opt/intel/mkl
export MKLROOT
In tcsh use:
setenv MKLROOT /opt/intel/mkl
- Make the shared libraries libblas_mkl.so and liblapack_mkl.so
make libintel64 export=blas_list interface=lp64 threading=parallel name=libblas_mkl
make libintel64 export=lapack_list interface=lp64 threading=parallel name=liblapack_mkl
The options are described here
The newly created libblas_mkl.so and liblapack_mkl.so require
/opt/intel/lib/intel64/libiomp5.so
to work. On the cluster nodes this file is automatically linked when required.
Using the MKL BLAS and LAPACK shared libraries (with Scilab)
This should work for any executable that uses a dynamically linked blas or lapack. We use Scilab as an example.
- Make sure we have an executable, not just a script that calls the executable:
file scilab-bin
The output looks something like this:
scilab-bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15 ...
- Determine the exact name that is used by the executable:
ldd scilab-bin | grep blas
The output could be:
libblas.so.3gf => ~/sciab-5.4.1/lib/thirdparty/libblas.so.3gf
- Replace the library with a link to the MKL version
cd ~/sciab-5.4.1/lib/thirdparty/
rm libblas.so.3gf
ln -s ~/lib/libblas_mkl.so libblas.so.3gf
Also follow this procedure for lapack.
- To use more than one thread, i.e., for parallel computation, set:
MKL_NUM_THREADS=4
export MKL_NUM_THREADS
This example will use 4 cores.
- To check the number of cores available, use:
cat /proc/cpuinfo | grep processor | wc