PARALLÉLISATION AUTOMATIQUE D’ALGORITHMES ALPHA BOUBACAR DIALLO Étudiant au Doctorat en Informatique diallo.alphaboubacar@gmail.com
PLAN Définitions et concepts de base Architectures parallèles Environnements parallèles Automatisation du processus de parallèlisation Futures avenues
DÉFINITIONS / CONCEPTS DE BASE CPU (Central Processing Unit) Unité centrale de traitement GPU (Graphics Processing Unit) Processeur graphique
DÉFINITIONS / CONCEPTS DE BASE CPU GPU Caractéristiques Puissant multi-core Puissant parallélisateur Processeur de contrôle Puissant processeur de calcul Utilisation Système d’exploitation Modélisation des risques financiers Base de données Imageries médicales Algorithmes récursifs Calculs d’éléments finis
1 Milliard d’opérations à virgule flottante par seconde
CPU (host) GPU
DÉFINITIONS / CONCEPTS DE BASE Programme séquentiel: définit une séquence d’actions ( instructions) Programme parallèle: contient plusieurs processus qui coopèrent Système parallèle: dispose d’au moins 2 CPU ou d’un GPU
PARALLÉLISME Conditions du parallélisme: « Soit P1 et P2 deux programmes; on suppose que chacun des programmes utilisent des variables en entrée (E1 et E2) et produit des valeurs en sortie (S1 et S2). Les programmes P1 et P2 sont exécutables en parallèle (noté P1 | | P2) si et seulement si les conditions suivantes sont respectées : E1 ∩ S2 = Ø, E2 ∩ S1 = Ø et S1 ∩ S2 = Ø. » Philip Bernstein
FORMES DU PARALLÉLISME Parallélisme de données même opération effectuée par des processeurs différents sur des ensembles disjoints de données. Parallélisme de contrôle différentes opérations indépendantes sont réalisées simultanément. Parallélisme de flux l’opération suivante est amorcée avant que la précédente ne soit terminée.
ENVIRONNEMENTS PARALLÉLES MPI (Message Passing Interface) Librairie standard de passage de messages. Communication de haut niveau et de bas niveau. La portabilité. Gestion des groupes de processus. Gestion des processus. Facilité de compréhension et performance élevée.
ENVIRONNEMENTS PARALLÉLES PVM Machine virtuelle composée d’une ou de plusieurs machines hôtes qui communiquent les unes avec les autres à travers le protocole standard TCP/IP. CUDA (Compute Unified Device Arch.) Nouvelle architecture (logicielle et matérielle) pour la mise en œuvre et la gestion des opérations exécutées sur le GPU.
PROCESSUS D’AUTOMATISATION Objectifs du projet: Automatisation du processus de parallélisation des programmes séquentiels. Transformation automatique d’un programme séquentiel en programme parallèle. Parallélisation des boucles FOR contenues dans un programme séquentiel écrit dans le language C.
PROCESSUS D’AUTOMATISATION Traitement des fichiers de code. Mise en œuvre d’une lourde structure de données afin de conserver toutes les parties du code (programme). Une structure programme; Une structure de boucle; Une structure variable;
PROCESSUS D’AUTOMATISATION #include <stdio.h> … int CalDist (FILE *pfi,char *outF, char **pmatNEsp, …) { … FILE * f = fopen(pfi,"r"); } int UpDist (FILE *pfi, double **pDis, char **pS, int pNEs, int nbSites, …) int intRetour; // Retour de fonction bool blnNucleo = true; int main(int argc, char**argv) if(argc != 4){ printf("Nombre d'argument incorrect"); exit(5); } … boucles à paralléliser…
int main(int argc, char**argv) Position 0 Position 25 for(i=0;i<max;i++) int CalDist (FILE *pfi,char *outF, char **pmatNEsp, …) int UpDist (FILE *pfi, double **pDis, char **pS, int pNEs, int nbSites, …) for(i=0;i<max;i++) for(i=0;i<max;i++){ … } int main(int argc, char**argv)
Position 0 Position 5 Position 12 matDistances[i] = taux* i*j; matDistances[i] = taux* i*j; for (j=0; j<=intNbreEspece; j++) 1 5
PROCESSUS D’AUTOMATISATION ####################### # MAIN DU PROGRAMME # nomFichierSeq = validerNomFichier formaterFichier nomFichierSeq annoterFichier NomProgPar programme = creerEnvMPI NomProgPar detecterBoucles programme traiterBoucles programme ecrireProgramme programme indenterFichier NomProgPar
nomFichierValide Fichier structurellelement valide ( 1 inst / ligne, { / ligne ,} / ligne ) Ajout des étiquettes (DEBUTPROGRAMME, DEBUTBOUCLE, INCLUSION) Replissage du programme (main, fonctions et tableau lignes) Remplissage du tableau de boucles du programme Remplissage du tableau d’instruction du programme Écriture du programme parallèle
#include <mpi.h> Int myId, numProcs, nameLen, erreur; MPI_Status statusMsg; MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numProcs);MPI_Comm_rank(MPI_COMM_WORLD,&myId); MPI_Finalize();
PROCESSUS D’AUTOMATISATION Problèmes rencontrés : traiterBoucles programme Détection des dépendances. Synchronisation. Utilisation de PLATO : Outil d’analyse de dépendances. Contient une collection de tests de dépendances de données ( test Banerjee, I-Test, plusieurs versions de la NLVI-Test).
CUDA
CUDA // includes, project #include <cutil.h> // Matrix multiplication on the device void MatrixMulOnDevice(const Matrix M, const Matrix N, Matrix P) { // Load M and N to the device Matrix Md = AllocateDeviceMatrix(M); CopyToDeviceMatrix(Md, M); Matrix Nd = AllocateDeviceMatrix(N); CopyToDeviceMatrix(Nd, N); // Allocate P on the device Matrix Pd = AllocateDeviceMatrix(P); CopyToDeviceMatrix(Pd, P); // Clear memory
CUDA // Setup the execution configuration dim3 dimBlock(WIDTH, WIDTH); dim3 dimGrid(1, 1); // Launch the device computation threads! MatrixMulKernel<<<dimGrid, dimBlock>>> (Md, Nd, Pd); // Read P from the device CopyFromDeviceMatrix(P, Pd); // Free device matrices FreeDeviceMatrix(Md); FreeDeviceMatrix(Nd); FreeDeviceMatrix(Pd); }
FUTURES AVENUES Parallisiation de parties indépendantes du programme qui ne sont pas des boucles For. Parallélisation de programmes écrits en JAVA, C#, Ruby, etc. Automatisation du processus de parallélisation dans de nouveaux environnements : PVM, … Optimisation des versions parallèles
QUESTIONS