ROMEO HPC Center

ROMEO II : Compilateur Intel C/C++ et Intel Math Kernel Library

Résumé: Ce document sert de base à ceux qui veulent utiliser la Cluster Math Kernel Library (CMKL) d'Intel, librairie optimisée pour les processeurs Itanium. Nous ne détaillerons pas comment programmer avec cette librairie, mais comment réussir à compiler lorsqu'on l'utilise.

1 Cas pratique : les nombres aléatoires

L'utilisation de la fonction rand() afin de générer un nombre aléatoire dans un programme parallèle C/C++ est à proscrire, car cette fonction bloque des ressources systèmes et vos processus doivent alors d'attendre la libération de ces ressources pour pouvoir poursuivre.
Il est préférable d'utiliser un autre moyen pour générer des nombres aléatoires pour pallier ce problème, et la librairie Intel Kernel Math nous en fournit un grand nombre dédié au processeur Itanium.

1.1 Compiler avec la librairie mkl

Pour compiler vos programmes utilisant la librairie mkl, vous devez inclure dans votre programme cette librairie :
#include<mkl.h>
Maintenant vous devez indiquer au compilateur où trouver cette librairie. Pour cela, on ajoute à la ligne de commande les paramètres suivants :

  • -I /opt/intel/cmkl/8.1.1/include/
  • -L /opt/intel/cmkl/8.1.1/lib/64
  • -lvml

Par exemple :

icc -I /opt/intel/cmkl/8.1.1/include/ -L /opt/intel/cmkl/8.1.1/lib/64 -lvml source.c -o executable
ou
icpc -I /opt/intel/cmkl/8.1.1/include/ -L /opt/intel/cmkl/8.1.1/lib/64 -lvml source.c -o executable

Il sera parfois nécessaire d'ajouter les arguments -lkml_ipf et -lmk_lapack selon vos besoins.

1.2 Exécuter un programme utilisant la librairie mkl

Une fois votre programme compilé, vous allez vouloir l'exécuter, et une erreur indiquant que le programme ne trouve pas les librairies nécessaires à son fonctionnement apparaît. Nous devons modifier la variable d'environnement référençant les librairies afin de lui indiquer où elles se trouvent. Pour cela, tapez la commande suivante :
export LD_LIBRARY_PATH = opt/intel/cmkl/8.1.1/lib/64 : $LD_LIBRARY_PATH
Bien évidemment, à chaque nouvelle session, vous devrez taper cette commande. Pour éviter cela, nous allons modifier notre fichier .bashrc se trouvant à la racine de notre compte (voir listing 1)

Listing 1: Le fichier .bashrc

# .bashrc
# User specific aliases and functions
if [ "$HOSTNAME" == romeo1 ]; then
# Acces au compilateur C/C++ d'Intel
source /opt/intel/iccvars.sh
fi
# Ajout du chemin de la librairie CMKL
export LD_LIBRARY_PATH=/opt/intel/cmkl/8.1.1/lib/64/ : $LD_LIBRARY_PATH
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

2 Pour finir

Afin de savoir utiliser correctement cette librairie, je vous invite à consulter le Intel Math Kernel Library - Vector Statistical Library Notes (intel_vlsnotes.pdf) disponible sur le site http://cosy.univ-reims.fr/romeo2/.