Outils pour utilisateurs

Outils du site


logiciels:mkl:mkl

Voir cette page sous forme de diaporama.

Librairie MKL

La librairie Intel Math Kernel Library (MKL) est une librairie de développement, pour des calculs mathématiques optimisées. Elle peut être utilisée par des personnes qui produisent leur programme de calcul en écrivant ces programmes dans les langages C, C++ ou Fortran.

La documentation de cette rubrique concerne donc essentiellement les développeurs.

Certains programmes installés sur CALI ont été compilés avec la MKL. Dans ce cas, la documentation du logiciel sur notre site précisera les conditions particulières à connaître.

Références

Les documents de référence concernant la librairie MKL sont disponibles sur le site d'Intel :

Cette rubrique n'a pas vocation à se substituer à ces documents, mais à apporter une courte introduction (en français) et à attirer votre attention sur quelques points importants.

Autres documentations

Contenu de la librairie MKL

Des librairies optimisées et parallélisées

La MKL contient des librairies mathématiques optimisées :

  • elle tirera le meilleur partie des dernières générations de processeurs Intel
  • elle utilise de façon étendue les possibilités de multi-threading (calcul parallèle sur des architectures multi-coeurs SMP)
  • certains composants de la MKL sont également conçus pour du calcul parallèle distribué (via MPI)
Vous pouvez remarquer d'ores et déjà que vous devrez tenir compte de la capacité au multi-threading automatique de la MKL . Vous devrez en tenir compte lors de la phase de compilation et lors de la phase d'exécution du programme.

Familles de procédures

Plusieurs familles de procédures sont contenues dans la MKL. Certaines sont des implémentations de librairies “bien connues”, antérieures à la MKL et qui sont toujours disponibles sous d'autres implémentations. La version MKL apporte en général des gains de performance. La liste complète de ces famille est disponible dans le guide de référence de la MKL. Citons :

  • BLAS (Basic Linear Algebra Subprograms)
  • LAPACK 3.5
  • ScaLAPACK (utilisable sur architecture à mémoire distribuée)
  • Basic Linear Algebra Communication Subprograms (BLACS)
  • General Fast Fourier Transform (FFT), avec implémentation de l'interface FFTW3

Utiliser la MKL

Environnement

Sur CALI, vous devez suivre les instructions fournies sur intel-composer afin de savoir comment positionner l'environnement pour la MKL.

  • Par défaut, le système positionne l'environnement pour la dernière version stable de la MKL
  • Vous ne devez pas suivre la documentation d'Intel concernant la configuration des variables d'environnement

Compilateurs supportés

La MKL peut être utilisée avec différents compilateurs. Il n'est donc pas obligatoire d'utiliser la suite Intel, des programmes compilés avec la suite GNU pourront aussi être liés avec la MKL.

Modèle en couche

La MKL est conçue pour supporter différents compilateurs et interfaces, différentes implémentations d'OpenMP, différents types de processeurs.

Conceptuellement, on peut considérer que la MKL est composée de plusieurs couches pour permettre ces adaptations :

  • couche d'interface
  • couche de threading
  • couche de calcul

Couche d'interface

  • Sélectionne le type d'entier utilisé dans votre code
    • Pour des entiers 32-bit (mode par défaut), choisir l'interface LP64
    • Pour des entiers 64-bit, choisir l'interface ILP64. Ce mode est sélectionné soit en utilisant des entiers explicitement 64-bit dans le code (INTEGER*8 en Fortran), soit en utilisant une option du compilateur (-i8 en Fortran)
  • Si vous utilisez un autre compilateur que ceux d'Intel, certaines parties doivent être adaptées

Couche threading

  • La librairie MKL est fortement parallélisée. A noter :
    • elle est thread-safe
    • la parallélisation utilise OpenMP
  • La couche threading permet de
    • sélectionner le mode threadé ou séquentiel de la MKL
    • d'adapter la couche de threading à votre compilateur (Intel ou GNU)

Nous reviendrons plus en détail sur la partie threading dans l'article mkl-et-parallelisme.

Compilation

Maintenant que vous avez à l'esprit quelques uns des détails de la MKL, nous allons voir comment réaliser la compilation et l'édition de lien d'un programme.

Vous devrez sélectionner plusieurs paramètres :

  • mode statique ou dynamique
  • utilisation d'entiers 64 ou 32 bits
  • mode threadé ou séquentiel
  • etc.

Plusieurs méthodes de compilation sont possibles, vous devrez choisir l'une ou l'autre.

Option -mkl pour compilateurs Intel

  • Cette méthode est la plus simple
  • Elle ne fonctionnera qu'avec les compilateurs Intel, avec un choix limité d'option
  • Options :
    • -mkl pour utiliser la MKL en version threadé
    • -mkl=sequential pour utiliser la MKL en version séquentiel

Librairie dynamique unifiée

  • L'édition de lien est faite avec la Single Dynamic Library (SDL)
    • Ajouter -lmkl_rt
  • Le choix des couches (mode 64 ou 32 bit, threadé, …) sera fait au moment de l'exécution du programme, soit par des variables d'environnement, soit par des appels explicites à des fonctions dans le code
  • Par défaut, les modes choisis seront
    • entiers 32 bit (LP64)
    • mode threadé
    • compatible pour les compilateurs Intel

Choisir les bonnes librairies

La dernière alternative consiste à sélectionner individuellement chacune des librairies pour chacune des couches :

  • soit vous connaissez très bien les différents composants de la MKL et vous construisez la ligne de compilation avec votre expérience …
  • soit vous utilisez un outil qui vous guidera dans le choix des options : le Intel MKL Link-line Advisor
logiciels/mkl/mkl.txt · Dernière modification: 2015/06/05 17:08 de montap01