Xeon Phi

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Cette page est une traduction de la page Xeon Phi et la traduction est complétée à 100 % et à jour.

Autres langues :anglais 100% • ‎français 100%

Sommaire

Utilisation des accélérateurs Intel Xeon Phi

Des accélérateurs (ou coprocesseurs) Intel Xeon Phi 5110P sont disponibles sur la grappe de calcul Guillimin. La table suivante résume les propriétés des noeuds Xeon Phi disponibles sur Guillimin.

Type de nœud Nombre cœurs/nœud Nb total cœurs Mémoire (Go/cœur) Mémoire total (Go) Cartes Opér. totales en simple préc. (TFlops) Opér. totales en double préc. (TFlops)
AW Phi 50 16 Sandybridge 800 4 3,200 Dual Intel Phi 5110P, 60 cœurs, 1.053 GHz, cache 30 Mo, mémoire totale 8 Go, simple préc.: 2.0 TFlops, double préc.: 1.0 TFlops 200 100

L'architecture Intel Xeon Phi a été conçue pour être familière pour quiconque a de l'expérience avec la programmation parallèle dans un environnement x86. Une carte Phi contient des unités de calcul de la génération Pentium et elle exécute un système d'exploitation Linux. Ainsi, une carte Phi peut exécuter du code parallèle normalement rédigé pour des serveurs conventionnels.

Le code peut faire usage des PThreads, OpenMP, MPI et même des bibliothèques pour GPU, c'est-à-dire OpenCL. Il devrait donc être facile d'adapter vos applications pour les cartes Phi, et ce, sans y apporter trop de modifications. Cependant, il est recommandé d'optimiser votre application spécifiquement pour les cartes Phi afin d'obtenir la meilleure performance possible. Étant donné la compatibilité avec du matériel standard x86, les programmeurs Phi peuvent profiter de leurs outils habituels : compilateurs, profileurs et débogueurs.

Les cartes Xeon Phi supportent un mode de délégation de calcul similaire à celui que l'on utilise avec les GPUs. De plus, un programme pour Xeon Phi peut s'exécuter nativement directement sur la carte. Ainsi, les plus récentes technologies des GPUs Nvidia (Hyper-Q et dynamic parallelism) sont supportées tout naturellement sur les Xeon Phi.

Soumettre des tâches Xeon Phi

Soumettre des tâches Xeon Phi est similaire à soumettre des tâches régulières. La principale différence est que le script de soumission ou la commande qsub doit spécifier la ressource "mics=2" dans la liste des ressources et la tâche doit être soumise à la file d'attente "phi" (voir l'exemple ci-dessous).

Exemple de tâche Intel Xeon Phi:

$ qsub -q phi -l nodes=1:ppn=16:mics=2 ./script_soumission.sh

Chaque nœud a 2 accélérateurs Xeon Phi et 16 cœurs Xeon réguliers. Vous pouvez donc spécifier mics=1 ou mics=2, mais votre accès sera limité respectivement à 1 ou à 2 accélérateurs par nœud réservé pour votre tâche. Enfin, vous devez demander au moins un cœur par nœud afin d'avoir accès aux cartes Xeon Phi.

Modules logiciels pour Xeon Phi

Si vous utilisez les nœuds Xeon Phi, veuillez prendre note de la disponibilité des modules suivants:

  • Compilateurs PGI pour accélérateurs (incluant OpenACC et CUDA-fortran) - module add pgiaccel
  • Compilateurs Intel version 14.0 (incluant le support de Xeon Phi) - module add ifort_icc/14.0
  • Variables d'environnement utiliser Xeon Phi (équivalent à "source compilervars.sh") - module add MIC
  • SDK Intel pour applications OpenCL 1.2 (compilateurs OpenCL et ICD) - module add intel_opencl MIC
  • Intel MPI 4.4.1 (incluant support pour Xeon Phi) - module add ifort_icc/14.0 intel_mpi MIC

Veuillez noter que le chargement du module MIC est nécessaire pour l'utilisation de plusieurs fonctions des cartes Xeon Phi. Assurez-vous que ce module est bien chargé lorsque vous obtenez une erreur en exécutant une application Xeon Phi.

Tâches en mode délégation

Dans le mode délégation (offload mode), l'accélérateur reçoit du travail (sections lourdes en calculs) d'un processus s'exécutant sur un processeur régulier du serveur. Pour utiliser ce mode, des instructions spéciales, telles que des directives ou des pragmas, doivent être inscrites dans le code source pour indiquer au compilateur comment l'accélérateur sera utilisé. Pour de plus amples détails, veuillez consulter notre matériel de formation.

$ module add ifort_icc MIC
$ icc -o delegation -openmp delegation.c
$ ./delegation

Tâches en mode natif

Un programme en mode natif est compilé pour une exécution directe sur la carte Xeon Phi et il n'utiliser, en principe, aucune ressource sur le serveur hôte. Souvent, un code parallèle ne nécessitera aucune modification par rapport à la version "serveur seulement". Pour compiler en mode natif, il suffit d'utiliser l'option -mmic du compilateur:

$ module add ifort_icc MIC
$ icc -mmic -o mm_omp.MIC -openmp mm_omp.c
$ micnativeloadex ./mm_omp.MIC

C'est une bonne pratique d'ajouter l'extension .MIC au nom des exécutables MIC pour ne pas les confondre avec les exécutables CPU. La commande micnativeloadex, un programme fourni par Intel, tente de copier toutes les bibliothèques (libraries) requises vers la carte Xeon Phi et exécute ensuite le fichier .MIC. Dans certains cas, il est peut-être préférable de configurer manuellement les différents chemins d'accès (paths) au lieu d'utiliser micnativeloadex:

$ scp mm_omp.MIC mic0:~/.
$ ssh mic0 "export LD_LIBRARY_PATH=/software/compilers/Intel/2013-sp1-14.0/lib/mic:$LD_LIBRARY_PATH; ./mm_omp.MIC"

Pour utiliser MPI en mode natif, veuillez utiliser le module intel_mpi et initialisez la variable d'environnement I_MPI_MIC:

$ module add intel_mpi ifort_icc MIC
$ export I_MPI_MIC=enable
$ export I_MPI_MIC_POSTFIX=.MIC
$ mpiicc -mmic -o bonjour.MIC bonjour.c
$ mpirun -n 60 -host mic0 ./bonjour        # L'extension .MIC est volontairement omise
MIC: Bonjour de aw-4r12-n37-mic0 4 sur 60
MIC: Bonjour de aw-4r12-n37-mic0 21 sur 60
MIC: Bonjour de aw-4r12-n37-mic0 30 sur 60
...

Mode symétrique

Il est possible d'avoir des processus MPI s'exécutant simultanément sur le serveur hôte et sur l'accélérateur. Veuillez noter que la différence de vitesse des deux types de cœurs peut causer des problèmes au niveau de l'équilibre de la charge de calcul ; il faut donc concevoir le code MPI en conséquence. Pour utiliser le mode symétrique, le code MPI doit être compilé séparément pour le serveur hôte et pour l'accélérateur. Toutes les instructions pour exécuter du code MPI en mode natif doivent être suivies. Additionnellement, la variable d'environnement I_MPI_FABRICS doit avoir la valeur shm:tcp :

$ module add intel_mpi ifort_icc MIC
$ export I_MPI_MIC=enable
$ export I_MPI_MIC_POSTFIX=.MIC
$ export I_MPI_FABRICS=shm:tcp
$ mpiicc -o bonjour bonjour.c
$ mpiicc -mmic -o bonjour.MIC bonjour.c
$ mpirun -perhost 1 -n 4 -host $(cat $PBS_NODEFILE $PBS_MICFILE | tr '\n' ',') ./bonjour
CPU: Bonjour de aw-4r12-n40 1 sur 4
CPU: Bonjour de aw-4r12-n37 0 sur 4
MIC: Bonjour de aw-4r12-n37-mic0 2 sur 4
MIC: Bonjour de aw-4r12-n40-mic0 3 sur 4

Ateliers de formation sur Xeon Phi

Veuillez consulter le matériel de formation du plus récent atelier Introduction to Intel Xeon Phi pour davantage d'information concernant la façon d'utiliser efficacement ces accélérateurs pour vos recherches. Pour le reste, de l'information générale concernant la programmation parallèle avec MPI ou OpenMP se trouve dans ce Wiki.

Lectures recommandées

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager