~~SLIDESHOW yatil~~ ====== 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 [[:logiciels: | 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 : * [[https://software.intel.com/en-us/mkl_11.2_ug_lin | User's Guide for Intel® Math Kernel Library 11.2 for Linux OS]] * [[https://software.intel.com/en-us/mkl_11.2_ref | Reference Manual for Intel® Math Kernel Library 11.2 ]] 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 ==== * [[https://software.intel.com/en-us/mkl_cookbook | Intel® Math Kernel Library Cookbook]] * [[http://cali2.unilim.fr/intel-xe/mkl/mkl_documentation.htm]] : toute la documentation de la MKL installée sur CALI ===== 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 [[https://software.intel.com/en-us/mkl_11.2_ref | 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 [[:logiciels: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 [[http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor | Intel MKL Link-line Advisor]]