Introduction aux architectures et programmes parallèles

Documents pareils
Initiation au HPC - Généralités

INF6500 : Structures des ordinateurs. Sylvain Martel - INF6500 1

Parallélisme et Répartition

Introduction à la Programmation Parallèle: MPI

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

INFO-F-404 : Techniques avancées de systèmes d exploitation

Java Licence Professionnelle CISII,

Équilibrage Dynamique de Charge pour des Calculs Parallèles sur Cluster Linux - Une Évaluation de l Environnement AMPI.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Introduction au langage C

OS Réseaux et Programmation Système - C5

Programmation système de commandes en C

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Limitations of the Playstation 3 for High Performance Cluster Computing

Eléments d architecture des machines parallèles et distribuées

Architecture des ordinateurs

Systèmes et traitement parallèles

Grid Computing. Mihaela JUGANARU-MATHIEU École Nationale Supérieure des Mines de St Etienne

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Architecture des calculateurs

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Le prototype de la fonction main()

Quantification d incertitude et Tendances en HPC

IRL : Simulation distribuée pour les systèmes embarqués

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Architecture des ordinateurs

Programmation système en C/C++

Systèmes parallèles et distribués

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Projet gestion d'objets dupliqués

Les processus légers : threads. Système L3, /31

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation C. Apprendre à développer des programmes simples dans le langage C

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Remote Method Invocation Les classes implémentant Serializable

Conception des systèmes répartis

Simulation d un système de paiement par carte bancaire

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

<Insert Picture Here> Solaris pour la base de donnés Oracle

Synchro et Threads Java TM

UE Programmation Impérative Licence 2ème Année

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation client-serveur sockets - RPC

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

3IS - Système d'exploitation linux - Programmation système

Sanity Check. bgcolor mgcolor fgcolor

Optimisations des SGBDR. Étude de cas : MySQL

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

OpenPaaS Le réseau social d'entreprise

Auto-évaluation Programmation en Java

TP1 : Initiation à Java et Eclipse

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Algorithmique et Programmation, IMA

Threads. Threads. USTL routier 1

Une bibliothèque de templates pour CUDA

Derrière toi Une machine virtuelle!

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Programmer en JAVA. par Tama

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Architecture et Extensions d ArcGIS Server

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Principes des langages de programmation INF 321. Eric Goubault

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation système I Les entrées/sorties

Cours de Systèmes d Exploitation

Tp 1 correction. Structures de données (IF2)

Tests de performance du matériel

Temps Réel. Jérôme Pouiller Septembre 2011

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation parallèle et distribuée

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Systèmes distribués et virtualisation de ressources

TP : Gestion d une image au format PGM

Données Réparties. Thibault BERNARD.

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours 1: Java et les objets

Cours Programmation Système

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Systèmes d exploitation

Licence Sciences et Technologies Examen janvier 2010

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Un ordonnanceur stupide

Rapport d activité. Mathieu Souchaud Juin 2007

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Calcul Parallèle. Cours 5 - JAVA RMI

Rapport 2014 et demande pour Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121

La carte à puce. Jean-Philippe Babau

Introduction au calcul parallèle avec OpenCL

Le système de gestion des fichiers, les entrées/sorties.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmation parallèle et distribuée

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Cours 6 : Tubes anonymes et nommés

Environnements de développement (intégrés)

Projet de programmation (IK3) : TP n 1 Correction

Transcription:

Introduction aux architectures et programmes parallèles Daniel Etiemble de@lri.fr Accélération Accélération (p processeurs) = Performance (p processeurs) Performance (1 processeur) Pour un problème de taille fixe (entrées fixées), performance = 1/temps Accélération à problème fixé (p processeurs) = Temps (1 processeur) Temps (p processeurs) 2 1

S: Temps séquentiel P: Temps parallélisable Application fixe Amdahl Amdahl et Gustafson Application extensible Gustafson S P Acc( n) P = a*n S P n S ap. Acc( n) S P Ts = S+P = fs + (1-fs) Tp = S+P/n = fs +(1-fs)/n Acc( n) 1/ f n s Ts = S+P = fs + n (1-fs) Tp = S+P/n = fs +(1-fs) f E( n) s 1 f n s 3 Classification de Flynn Flot d instructions x Flot de données Single Instruction Single Data (SISD) Single Instruction Multiple Data (SIMD) Multiple Instruction Single Data Multiple Instruction Multiple Data (MIMD) Tout est MIMD! 4 2

SIMD Modèle d exécution CM2 Maspar Contrôleur Lancement instructions ML PE ML PE ML PE Réseau d interconnexion Modèle obsolète pour machines parallèles Processeurs spécifiques différents des CPU standards Lancement des instructions incompatible avec les fréquences d horloge des microprocesseurs modernes Synchronisation après chaque instruction ti : les instructions ti conditionnelles sont synchronisées SPMD Extensions SIMD dans les microprocesseurs 5 Version SPMD du SIMD Modèle d exécution ML CPU ML CPU ML CPU Réseau d interconnexion Chaque CPU exécute le même code. Les CPU sont synchronisés par des barrières avant les transferts de données. Clusters de PCs PC Ethernet 6 3

Organisation mémoire du MIMD Opposé centralisée Espace d adressage unique Accès mémoire uniforme PE PE Réseau PE @Max distribuée Plusieurs espaces d adressage Accès mémoire non uniforme Réseau PE PE PE @0 PE PE PE @Max @Max @Max @0 @0 @0 PE PE PE 12 9 3 6 PE 12 9 3 6 PE 12 9 3 6 12 9 3 6 PE PE 7 - + Complexité Classification mémoire (MIMD) partagée distribuée ib SMP ccnuma MMP Hybrid Clusters P 1 P n Réseau PE PE PE Bus Composants d E/S Modèle mémoire SMP 8 4

Multi-thread et multiprocesseurs Processeur logique 1 Processeur logique 2 Processeur physique 1 Processeur physique 2 Etat archit. (registres) Etat archit. (registres) Etat archit. (registres) Etat archit. (registres) Unités fonctionnelles s Unités fonctionnelles s Unités fonctionnelles s principale principale 9 Multiprocesseurs et multi-cœurs CPU State CPU State Execution unit Execution unit Multiprocesseur Multi-cœurs Execution unit CPU State CPU State Execution unit Execution unit CPU State CPU State Execution unit 10 5

Le problème de cohérence des caches P 1 u:5 P 2 P 3 u=? u=? u= 7 4 5 u:5 3 1 u:5 2 Composants d E/S 1 P1 lit u 2 P3 lit u 3 P3 écrit dans u 4 P1 lit u 5 P2 lit u Résultat des lectures 4 et 5 avec écriture simultanée? avec la réécriture? 11 Cohérence des caches avec un bus Construite au dessus de deux fondements des systèmes monoprocesseurs Les transactions de bus Le diagramme de transitions d états des caches La transaction de bus monoprocesseur Trois phases : arbitrage, commande/adresse, transfert de données Tous les composants observent les adresses ; un seul maître du bus Les états du cache monoprocesseur Ecriture simultanée sans allocation d écriture Deux états : valide et invalide Réécriture Trois états : valide, invalide, modifié Extension aux multiprocesseurs pour implémenter la cohérence P 1 P n Bus Composants d E/S Modèle mémoire SMP 12 6

La cohérence par espionnage de bus Idée de base Les transactions bus sont visibles par tous les processeurs. Les processeurs peuvent observer le bus et effectuer les actions nécessaires sur les évènements importants (changer l état) Implémenter un protocole Le contrôleur de cache reçoit des entrées de deux côtés : Requêtes venant du processeur, requêtes/réponses bus depuis l espion Dans chaque cas, effectue les actions nécessaires Mise à jour des états, fourniture des données, génération de nouvelles transactions bus Le protocole est un algorithme distribué : machines d états coopérantes. Ensemble d états, diagramme de transitions, actions La granularité de la cohérence est typiquement le bloc de cache P1 Pn Bus Composants d E/S Modèle mémoire SMP 13 Cohérence avec cache à écriture simultanée P 1 Espionnage de bus P n Composants E/S Transaction -mémoire Propagation des écritures la mémoire est à jour (écriture simultanée) Bande passante élevée nécessaire 14 7

Cohérence avec cache à écriture différée P 1 Invalidation Espionnage de bus P n Ecriture Composants E/S Transaction -mémoire Ligne dans un seul cache Ecriture dans la ligne et recopie mémoire lors d un remplacement Ligne dans plusieurs caches Ecriture dans la ligne et invalidation des lignes correspondantes dans les autres caches 15 Le protocole MESI 4 états Exclusif Seule copie du bloc Non modifié (= ) Modifié Modifié (!= ) Partagé Copie dans plusieurs blocs Identique en mémoire Invalide Actions Processeurs Bus PrWr/BusRdX PrRd PrWr/ M BusRdX/Flush BusRd/Flush PrWr/ PrWr/BusRdX E BusRd/ Flush BusRdX/Flush PrRd/ S BusRdX/Flush PrRd/ BusRd (S ) PrRd/ BusRd/Flush PrRd/ BusRd(S) I 16 8

Le problème du faux partage Un processeur écrit dans une partie d une ligne de cache. Un autre processeur écrit dans une autre partie d une ligne de cache Même si chaque processeur ne modifie que sa «partie» de la ligne de cache, toute écriture dans un cache provoque une invalidation de «toute» la ligne de cache dans les autres caches. 17 Modèles de programmation PARALLÉLISME DE DONNÉES Opérations successives sur des PRINCIPLE données multidimensionnelles TÂCHES CONCURRENTES Le programme est décomposé en tâches concurrentes indépendantes DONNEES CONTRÔLE Données distribuées dans les mémoires locales (distribution, alignement, partage) Plusieurs espaces d adressage Un seul programme de type séquentiel Contrôle centralisé ou distribué - instructions (SIMD) - code (SPMD) Données dans une mémoire logiquement partagée Espace d adressage unique Distribué (tâches concurrentes) - Accès aux variables partagées - coopération entre processus 18 9

Modèles de programmation (2) + - Parallélisme de données (HPF) partagée (OpenMP,P threads) Passage de messages (MPI) SPSA : Un seul programme Un seul espace d adressage MISA : Plusieurs flots d instructions Un seul espace d adressage MIMA : Plusieurs flots d instructions Plusieurs espaces d adressage AUTOMATIQUE Ordonnancement du calcul Accès lointain Synchronisation MANUEL Ordonnancement du calcul Synchronisation MANUEL Ordonnancement du calcul Accès lointain Synchronisation ilateur ammeur Co omplexité pour le compi Co omplexité pour le progra - + 19 Un exemple: le calcul de 1 1 dx arctan(1) arctan(0) 0 2 1 x 4 Calcul de PI/4 1,2 1/(1+x*x) 1 0,8 0,6 0,4 0,2 0 0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 4 0,4 0,45 0,5 x 0,55 0,6 0,65 0,7 0,75 0,8 0,85 0,9 0,95 1 20 10

Programme PI : version séquentielle static long etapes = 100000; double pas; void main () { int i; double x, pi, sum = 0.0; pas = 1.0/(double) etapes; for (i=1;i<= etapes; i++){ x = ((double)i-0.5)*pas; sum = sum + 4.0/(1.0+x*x); pi = pas * sum; 21 Primitives de base en «mémoire partagée» Création et destruction de threads CREATE (p, proc, arg) : création de p threads qui commence à exécuter la procédure re proc avec les arguments arg WAIT_for_end (p) : fin d exécution de p processus Variables privées et partagées Accès exclusif à des variables partagées LOCK(var) et UNLOCK(var) : accès exclusif à une région critique de code Barrières Barrière (nom, p) : synchronisation de p threads for (i=1;i<= etapes; i++){ x = ((double)i-0.5)*pas; sum = sum + 4.0/(1.0+x*x) -Répartir les itérations sur différents threads -Réduction des sommes partielles dans une variable globale 22 11

PI open MP : approche SPMD #include <omp.h> static long etapes = 100000; double pas; #define NB_THREADS 2 void main () { int i; double x, pi, sum[nb_threads]; pas = 1.0/(double) etapes; omp_set_num_threads(nb_threads) #pragma omp parallel { double x; int id; id = omp_get_thread_num(); for (i=id, sum[id]=0.0;i< etapes; i=i+nb_threads){ x = ((double)i+0.5)*pas; sum[id] += 4.0/(1.0+x*x); for(i=0, pi=0.0;i<nb_threads;i++) pi += sum[i] * pas; Programmes SPMD : Chaque thread exécute le même code avec l identificateur de thread spécifiant le travail spécifique du thread. 23 Programme PI OpenMP: clause privée et section critique #include <omp.h> static long etapes = 100000; double pas; #define NB_THREADS 2 void main () { int i; double x, sum, pi=0.0; pas = 1.0/(double) etapes; omp_set_num_threads(nb_threads) #pragma omp parallel private (x, sum) { id = omp_get_thread_num(); for (i=id,sum=0.0;i< etapes;i=i+nb_threads){ x = ((double)i+0.5)*pas; sum += 4.0/(1.0+x*x); 0+ #pragma omp critical pi += sum*pas; 24 12

SECTIONS CRITIQUES #pragma omp parallel private (x, sum) { id = omp_get_thread_num(); for (i=id,sum=0.0;i< etapes;i=i+nb_threads){ x = ((double)i+0.5)*pas; sum += 4.0/(1.0+x*x); #pragma omp critical pi += sum pi est partagé et sum (chaque processeur) est privé. Chaque itération pi+=sum (chaque processeur) doit être atomique. 25 Programme PI OpenMP : For parallèle + réduction #include <omp.h> static long etapes = 100000; double pas; #define NB_THREADS 2 void main () { int i; double x, pi, sum = 0.0; pas = 1.0/(double) etapes; omp_set_num_threads(nb_threads) #pragma omp parallel for reduction(+:sum) private(x) for (i=1;i<= etapes; i++){ x = ((double)i-0.5)*pas; sum = sum + 4.0/(1.0+x*x); pi = pas * sum; OpenMP ajoute 2 à 4 lignes de code 26 13

Approche MPI ML CPU ML CPU ML CPU Réseau d interconnexion Initialiser l environnement Identifier le nombre d ordinateurs et les identifier Calcul dans chaque ordinateur, avec (ou sans) communication de données intermédiaires Opération globale pour obtenir le résultat for (i=1;i<= etapes; i++){ x = ((double)i-0.5)*pas; sum = sum + 4.0/(1.0+x*x) -Répartir les itérations sur différents ordinateurs -Réduction des sommes partielles dans une variable globale 27 Programme PI : version MPI #include <mpi.h> #include <math.h> int main(argc, argv) int argc; char *argv[]; { int done=0, n=100000, myid, numprocs, i; double mypi, pi, h, sum, x; MPI_Init (&argc, &argv) MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Bcast(&n, 1,MPI_INT, 0, MPI_COMM_WORLD); if (myid==0) printf(); MPI_Finalize(); Return 0; h=1.0/(double) n; sum=0.0; for (i=myid+1;i<= n; i+=numprocs) { x = ((double)i-0.5)*h; sum+ = 4.0/(1.0+x*x); mypi = pas * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); 28 14

Primitives MPI utilisée dans PI MPI_Init (&argc, &argv) Initialise l environnement MPI MPI_Comm_size(MPI_COMM_WORLD, &numprocs); Fournit le nombre de processeurs MPI_Comm_rank(MPI_COMM_WORLD, &myid); Chaque processus reçoit son rang dans le groupe associé avec un communicateur. Chaque processus reçoit une valeur myid différente MPI_Finalize Clôt l environnement MPI 29 Primitive MPI globale dans le programme PI MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); La valeur de n est diffusée à chaque processus. Communication collective. MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_ COMM_ WORLD); Diffusion (Broadcast) Réduction (Reduce) Pi= Mypi(0)+ Mypi(1)+ Mypi(2)+ Mypi(2) 30 15