Introduction à OpenMP

Documents pareils
Introduction à la Programmation Parallèle: MPI

Plan du cours Cours théoriques. 29 septembre 2014

Java Licence Professionnelle CISII,


Cours Informatique Master STEP

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

Initiation au HPC - Généralités

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

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Une bibliothèque de templates pour CUDA

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmer en JAVA. par Tama

Module.NET 3 Les Assemblys.NET

Problèmes liés à la concurrence

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

Une introduction à Java

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

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

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Génération de code binaire pour application multimedia : une approche au vol

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

Présentation du PL/SQL

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

as Architecture des Systèmes d Information

Introduction au langage C

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Rapport d activité. Mathieu Souchaud Juin 2007

1. Structure d'un programme FORTRAN 95

Utiliser Java sans BlueJ

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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)

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

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

Performances de la programmation multi-thread

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction à CUDA.

CA Mainframe Application Tuner r8.5

Introduction à la programmation concurrente

Groupe calcul parallèle

Plan du cours. Historique du langage Nouveautés de Java 7

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

Machines Virtuelles. et bazard autour. Rémi Forax

Un ordonnanceur stupide

Algorithmique et Programmation, IMA

Threads. Threads. USTL routier 1

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Optimisation de logiciels de modélisation sur centre de calcul

ACTIVITÉ DE PROGRAMMATION

Performances et optimisations

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

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

Corrigé des TD 1 à 5

Java Licence Professionnelle CISII,

Projet gestion d'objets dupliqués

Auto-évaluation Programmation en Java

Examen Médian - 1 heure 30

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

modèles génériques applicables à la synthèse de contrôleurs discrets pour l Internet des Objets

Architecture des ordinateurs

Java - la plateforme

Projet Android (LI260) Cours 2

Bases de programmation. Cours 5. Structurer les données

1 Description générale de VISFIELD

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre I Notions de base et outils de travail

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Génie Logiciel avec Ada. 4 février 2013

LOG4430 : Architecture et conception avancée

//////////////////////////////////////////////////////////////////// Administration bases de données

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

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

Java 1.5 : principales nouveautés

TP1 : Initiation à Java et Eclipse

Derrière toi Une machine virtuelle!

Le langage C. Introduction, guide de reference

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Projet de programmation (IK3) : TP n 1 Correction

Programmation parallèle et ordonnancement de tâches par vol de travail. Thierry Gautier MOAIS, INRIA, Grenoble

Programmation d Applications Concurrentes et Distribuées (INF431)

Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Evaluation des performances de programmes parallèles haut niveau à base de squelettes algorithmiques

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Gestion de projet. Définition. Caractérisation

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

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Exercices INF5171 : série #3 (Automne 2012)

Exécutif temps réel Pierre-Yves Duval (cppm)

= constante et cette constante est a.

FLEX 3. Applications Internet riches avec Flash ActionScript 3, MXML et Flex Builder. Aurélien Vannieuwenhuyze

Transcription:

Introduction à OpenMP Daniel Etiemble de@lri.fr Références Dieter an Mey, «Parallel programming in OpenMP», Aachen university of Technology Muller et al, «Introduction to OpenMP», High Performance Computing Center, Stuttgart, www.hlrs.de www.openmp.org 2 1

OpenMP Modèle pour la programmation parallèle Parallélisme en mémoire partagée Parallélisation incrémentale Fondé sur le compilateur Extension aux langages de programmation existants (C/C++, Fortran) Directives Quelques procédures de bibliothèques Supporte le parallélisme de données 3 Modèle d exécution OpenMP Modèle fork-join d exécution parallèle L exécution commence avec un seul processus (thread maître) Début d une construction parallèle : le thread maître crée un ensemble de threads Fin d une construction parallèle. Les threads de l ensemble se synchronise : barrière implicite Seul le thread maître continue à s exécuter Partie séquentielle Partie parallèle Partie séquentielle Partie parallèle Partie séquentielle 4 2

Région parallèle OpenMP Bloc de code à exécuter par plusieurs threads en parallèle. Chaque thread exécute le même code Fortran!$OMP PARALLEL [clause[[,]clause] ] Bloc!$OMP END PARALLEL C/C++ #pragma omp parallel [clause[clause] ] Bloc structuré Clause private (list) shared (list) 5 Construction parallèle OpenMP C/C++ #pragma omp parallel Bloc structuré /*omp end parallel*/ Fortran!$OMP PARALLEL Bloc!$OMP END PARALLEL 6 3

Clauses sur la portée des variables private (liste) Les variables de la liste appartiennent à chaque thread d un ensemble (privées) shared (liste) Les variables de la liste sont partagées par tous les threads de l ensemble Par défaut, les variables sont partagées, mais Les variables locales (pile) des sous programmes appelés sont privées Les variables automatiques d un bloc sont privées La variable de contrôle de boucle du DO (fortran) et for (C) est privée 7 Fonctions de bibliothèque Fonction omp_get_num_threads Fournit le nombre de threads dans l ensemble exécutant la région parallèle dans laquelle elle est appelée C/C++ int omp_get_num_threads(void); Fortran integer function omp_get_num_threads() Fonction omp_get_thread_number Fournit le numéro de thread à l intérieur de l ensemble, compris entre 0 et omp_get_num_threads()-1. Le thread maître a le numéro 0. C/C++ int omp_get_thread_num(void); Fortran integer function omp_get_thread_num() 8 4

Partage du travail et synchronisation Quel thread exécute une instruction ou une opération? Et quand? Constructions de partage de travail Constructions maître et synchronisation 9 Les constructions de partage du travail Divisent l exécution de la partie de code concernée entre les différents threads de l ensemble Doivent être incluses dynamiquement dans une région parallèle Ne doivent pas créer de nouveaux threads Pas de barrière implicite à l entrée Les directives Les sections Do (Fortran) For (C/C++) 10 5

Les directives de section (C/C++) #pragma omp parallel { #pragma omp sections { a= ; b= ; #pragma omp section c= ; d= ; #pragma omp section e= ; f= ; #pragma omp section g= ; h= ; /*omp end sections*/ /*omp end parallel*/ a= c= e= g= b= d= f= h= 11 Directive for (C/C++) #pragma omp parallel private(f) { f=7; #pragma omp for for (i=0;i<20;i++) a[i]=b[i]+f*(i+5); /*omp end parallel*/ f=7 f=7 f=7 f=7 i=0,4 i=5,9 i=10,14 i=15,19 a[i)=b[i] + a[i)=b[i] + a[i)=b[i] + a[i)=b[i] + 12 6

Directive for La clause peut être l une des suivantes private (liste) reduction (operator : liste) Réalise une réduction sur les variables qui apparaissent dans la liste avec l opérateur «operator» En C/C++, les opérateurs sont : +, *, -, &, ^,, &&, A la fin de la réduction, la variable partagée reflète le résultat de la combinaison de la valeur initiale de la variable partagée avec la valeur finale de chacune des copies privées en utilisant l opérateur spécifié schedule (type [,chunk]) Spécifie comment les itérations de la boucle sont divisées parmi les threads nowait (C/C++ sur #pragma omp for) Barrière implicite à la fin du for, sauf si nowait est spécifié Si nowait est spécifié, les threads ne se synchronisent pas à la fin de la boucle 13 Synchronisation Barrière implicite Début et fin des constructions parallèles Fin de toutes les autres constructions La synchronisation implicite peut être supprimée par «nowait» Explicite Critical Le code considéré est exécuté par tous les threads, mais seulement par un threadàla fois C/C++ #pragma omp critical [(name)]» Bloc structuré Fortran!$OMP CRITICAL [(name)]» Bloc!$OMP END CRITICAL [(name)] 14 7

Section critique : un exemple (C/C++) mx=0; #pragma omp parallel private (pmax) { pmax = 0; #pragma omp for private ( r ) for (i=0;i<20;i++) { r= travail(i); pmax =(r>pmax? r : pmax); /*end for*/ /*omp end for*/ #pragma omp critical mx=(pmax>mx? pmax : mx); /*omp end critical*/ /*omp end parallel*/ mx=0 pmax=0 pmax=0 pmax=0 pmax=0 i=0,4 i=5,9 i=10,14 i=15,19 r= r= r= r= pmax= pmax= pmax= pmax= mx= mx= mx= mx= 15 Directive combinée parallel for Raccourci pour spécifier une région parallèle qui contient une seule directive do/for C/C++ #pragma omp parallel for [clause [clause] ] Boucle for Fortran!$ OMP PARALLEL DO [clause [[,]clause] ] Boucle do!$ OMP END PARALLEL DO Cette directive a toutes les clauses de la directive parallèle et de la directive do/for sauf «nowait» 16 8

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. 17 Program PI OpenMP: Work sharing construct #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(); sum[id] = 0; #pragma omp for for (i=0;i< etapes; i++){ 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; 18 9

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); #pragma omp critical pi += sum 19 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 20 10