Chapitre I introduction générale 1. Introduction Dans la plus parts des cas le calcule parallèle est considéré comme un moyen de réduire le temps d’exécution des applications qui nécessitent une grande quantité de calcul. La conception et l’implémentation d’un algorithme parallèle est plus difficiles que celle d'un algorithme séquentiel. L'objectif du cours est de donner à l'étudiant le savoir et les techniques pour concevoir un algorithme parallèle sur une architecture parallèle cible. 2. Motivations Limites théoriques et réels des architectures traditionnelles. Minimisation du temps d'exécution des applications. Résoudre des nouveaux problèmes, des nouvelles instances des problèmes. Exploitation des plateformes déjà existant. Accroitre la cohérence des systèmes. 3. Definitions 3.1. Calcul parallèle C’est l'utilisation simultanée des ressources multiples de calcul (processeurs) pour résoudre un problème informatique. 3.2. Un calculateur parallèle Un ensemble des processeurs qui peuvent travailler d’une façon coopérative pour résoudre un problème informatique. Cette définition est assez large pour inclure les : supers calculateurs machines avec unité centrale multiprocesseurs Réseaux des postes de travail. Ensemble des ordinateurs relies avec un lien spécialisé ou avec un simple réseau. 3.3. Un programme parallèle Est un programme qui s’exécute sur un calculateur parallèle. Un ensemble des parties discrètes qui peuvent être exécutées concurremment. Chaque partie est une série d'instructions. 4. Classification des architectures parallèles Dans une architecture d’un ordinateur simple qui est proposée par VAN NYOUMEN on trouve une mémoire et un processeur, le processeur exécute les instructions situent à la mémoire d’une manière séquentiel l’une après l’autre. Mais dans un contexte parallèle on trouve plusieurs pros et mémoires exécutants un ou plusieurs programmes en parallèle sur un ou plusieurs blocs de données. Par conséquent il existe différentes manières de classifier les ordinateurs parallèles. 4.1. Classification de Flynn Une des classifications plus employées couramment, en service depuis 1966, La taxonomie de Flynn distingue des architectures d'ordinateur de multiprocesseur selon la façon dont elles peuvent être classifiées le long des deux dimensions indépendantes de l'instruction et des données. Chacune de ces dimensions peut avoir seulement un de deux états possibles : Simple ou multiple, on trouve quatre calasses SISD, SIMD, MISD et MIMD. 4.1.1. Les machines SISD Cette classe représente les ordinateurs séquentiels (machine de VN). À chaque cycle d’horloge une seule instruction est exécutée sur un seul flux de données ; ce type est caractérisé par san déterminisme. 4.1.2. Les machines SIMD Ce type représente une classe importante des architectures, parallèle où Tous les processeurs exécutent la même instruction à n'importe quel cycle d’horloge et chaque processeur peut traiter une donnée différente. Ce type d’architecture est adapté aux problèmes ayant un degré élevé de régularité telle que le traitement d'image. Cette architecture est caractérisée par son synchronisme et déterminisme. 4.1.3. Les machines MISD Très peu de machines suivent cette architecture, elle peut être considérer lors de la création d’un modèle adapté à une situation particulière, par exemple de multiples transformations géométrique appliquée à un même polygone. 4.1.4. Les machines MIMD Là chaque unité de traitement peut exécuter un flux déférant d’instruction sur un flux déférant de données, ce type est le plus avancé et le plus répondu. La plus part des machines parallèles actuelles suivent cette architecture. Cette architecture elle peut être déterministe ou non déterministe. Elle peut être synchrone ou asynchrone 4.2. Classification des mémoires des machines parallèles Une autre classification se base sur le type de la mémoire. On trouve généralement deux classes des machines parallèles : les machines à mémoire partagée et les machines à mémoire distribuée. 4.2.1. Mémoire partagée Tous les processeurs ont la capacité à adresser l'espace mémoire entier en tant qu'espace d’adresses globale. La communication entre les tâches est réalisée par les opérations de lecture et écriture sur la mémoire partagée. 4.2.2. Mémoire distribuée Chaque processeur a sa propre mémoire locale. Chaque processeur a le droit et la capacité d’adresser uniquement sa mémoire locale, la communication entre les processus qui sur différents processeurs est effectuée par des messages passés par la communication réseau. 5. Modèles et outils de programmations parallèles Il y a plusieurs modèles de programmation parallèle d'usage courant citant : Le modèle de programmation a mémoire partagée Le modèle de passage de message Le modèle de Données parallèles 5.1. Parallélisme De Données Ce modèle de parallélisme est utilisé pour l'exploitation de la simultanéité qui se produite de l'application du même flux d’instructions aux différents éléments d'une structure de données. Par exemple, l’addition de 2 à tous les éléments d’une rangée, ou l’incrémentation du salaire de tous les employés avec 5 ans de service. Les programmes de parallélisme de données sont caractérisés par les caractéristiques suivantes : chaque opération sur chaque élément d'informations peut être considérée comme une tâche indépendante. La granularité normale d'un calcul donnée-parallèle est petite. Le concept de localité des données ne manifeste pas naturellement. Noté que les compilateurs de parallélisme de données exigent souvent du programmeur de fournir des informations au sujet de la façon dont les données doivent être réparties sur les processeurs, c.-à-d. de la façon dont les données doivent être divisées sur les tâches. Après le compilateur peut traduire le programme de données parallèles sous forme de SIMD, et produire un code de communication automatiquement. 5.2. Mémoire Partagée Dans le modèle de programmation a Mémoire Partagée les tâches partagent un espace d’adressage commun. Chaque tache (processus) peut exécuter les opérations de lecture ou d’écriture d’une manière asynchrone. Le control d’accès à la mémoire partagée est assuré avec les mécanismes d’exclusion mutuelle tels que les verrous et les sémaphores. L’avantage de ce modèle est que pour le programmeur il n'y a aucun besoin d'indiquer explicitement comment faire communiquer les données des producteurs aux consommateurs, ceci est à cause de l’absence de la notion de l’ownership de données. Cependant la compréhension et le maintien de la localité des données est plus difficile, par conséquent il est plus difficile d'écrire des programmes déterministes. Dans un environnement avec mémoire distribuée on trouve une autre variété c’est le modèle de la mémoire virtuelle partagée (Virtual Shared Memory VSM). La mémoire distribuée partagée (DSM) est une extension du modèle de programmation a mémoire partagée sur les systèmes qu’ils n’ont pas une mémoire physiquement partagée. L’accès se fait à laide des opérations de lecture et écriture habituelles. Contrairement au passage de message, dans un système de DSM un processus qui veut effectuer des opérations sur quelques données n'a pas besoin de connaître son endroit ; le système les cherchera et trouvera automatiquement. Dans la plupart des systèmes de DSM, des données partagées peuvent être repliées pour augmenter le parallélisme et l'efficacité des applications. Tandis que les machines parallèles scalable sont la plupart du temps basées sur la mémoire distribuée, beaucoup d'utilisateurs trouvent que plus facile d'écrire des programmes parallèles en utilisant un modèle de programmation de shared-mémoire. Ceci fait à DSM un modèle très prometteur, s’il est mis en application avec efficacité. 5.3. Passage de message Le modèle de programmation parallèle passage de message est probablement le modèle aujourd'hui le plus répandu de programmation parallèle. Les programmes Message-passing créent des tâches multiples, chaque tâche encapsule ses données locales et chaque tâche est identifiée par un nom unique, et les tâches agissent l'un sur l’autre en envoyant et en recevant des messages à et des tâches appelées. Théoriquement ce modèle permet la création dynamique des tâches, l'exécution des plusieurs tâches par un processeur, ou l'exécution de différents programmes par différentes tâches. Cependant, dans la pratique la plupart des systèmes passage de message créent un nombre fixe de tâches identiques au démarrage de programme et ne permettent pas aux tâches d’être créées ou détruites pendant l'exécution du programme, P2PMPI est un exemple typique. On dit que ces systèmes mettent en application un modèle de programmation programme simple données multiples (SPMD) parce que chaque tâche exécute le même programme sur des données différentes. Ce modèle est suffisant pour un éventail des problèmes de programmation parallèle mais gêne quelques développements d’algorithme parallèles. De point de vu programmation ce modèle immerge ce forme des bibliothèques des sous programmes. Ces bibliothèques fournissent des routines pour l’initialisation et la configuration de l'environnement de transmission de messages aussi bien que l’envoi et la réception des paquets des données. Actuellement, deux bibliothèques de passage de message de haut niveau sont les plus populaires pour les applications scientifiques et industrielles : Les PVM (machine virtuelle parallèle) du laboratoire national d'Oak Ridge MPI (message passant l'interface) définis par le forum de MPI.