0% ont trouvé ce document utile (0 vote)
133 vues53 pages

Cours 04

Transféré par

orochon
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
133 vues53 pages

Cours 04

Transféré par

orochon
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction à

OpenMP

Chargé de cours: Lévis Thériault


Département de génie logiciel et des TI

1
Sommaire
 OpenMP et programmation en mémoire partagée
 Programmation multithreads
 Modèle fork/join
 OpenMP (Open MultiProcessing)

 OpenMP en pratique
 Les directives de partage du travail
 Les directives de synchronisation
 La bibliothèque d’OpenMP

 OpenMP plus précisément…


 Implémentation pratique
 Le parallélisme imbriqué
 OpenMP2
 OpenMP4

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 2
Modèle à mémoire partagée

 Plusieurs processus
s’exécutent en parallèle
 Processus attribués à des
processeurs distincts
Tâche 8 Tâche 1 Tâche 2
 La mémoire est partagée
(physiquement ou
virtuellement) Tâche 7 Mémoire Partagée Tâche 3

 Les communications entre


processeurs se font par Tâche 6 Tâche 5 Tâche 4

lectures et écritures dans la


mémoire partagée

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 3
Modèle à mémoire partagée

 Particulièrement adapté aux architectures à


mémoire partagée (de type SIMD et MIMD)
 Multiprocesseurs
 Centralisés  SMP (IBM SP3/SP4)
 Distribués  CC-NUMA (SGI Origin 3800)
 2 principales représentations :
 Threads
 Fork/Join

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 4
Modèle de threads

 Programme : ensemble de processus légers (threads)


qui coopèrent afin de réaliser un objectif commun
 Thread : entité logique, fonction, correspondant à une
partie de programme
 Pouvant s’exécuter indépendamment des autres parties
 Pouvant s’exécuter de façon concurrente
 Possédant des données locales et globales
 Un programme écrit sous forme de threads peut être
exécuté séquentiellement
 Pseudo-parallélisme
 Partage du temps CPU entre les threads durant l’exécution
 Changements de contexte

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 5
Modèle de threads

 Ce même programme peut aussi être exécuté de façon


réellement parallèle
 Répartition des threads sur les processeurs
 Un ou plusieurs threads par processeur
 Communication par les données globales stockées dans
la mémoire qui est partagée
 Fonctionnalités pour
 La gestion des threads (création, destruction, etc.)
 L’ordonnancement et l’état des threads (actif, exécutable, en
exécution, en veille, etc.)
 La synchronisation (sémaphores, barrières, etc.)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 6
Modèle fork/join

 Thread maître Thread maître


 Exécution du code séquentiel
 Débute et termine l’exécution Fork
 Fork : création de threads esclaves
 Threads esclaves Threads esclaves

 Exécutent la portion parallèle


 Join : destruction des esclaves et retour Join

du contrôle au maître Fork

 Le nombre de threads peut varier


durant l’exécution
 Permet la parallélisation
Join
incrémentale

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 7
Caractéristiques du modèle

 Facilité de programmation - Transparence


 Ressemble beaucoup au modèle séquentiel
 Communications « indirectes » généralement plus faciles à gérer
que le passage de messages
 La gestion des synchronisations doit se faire autrement
que par des messages
 Régions critiques
 Barrières
 Sémaphores

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 8
Caractéristiques du modèle

 Problème de localité des données


 Structurer le code pour tirer profit des caches (si possible)
 Exemple : inversion ligne/colonne d’une matrice
 Efficacité non garantie
 La transparence facilite la tâche du programmeur, mais
l’optimisation de la performance est plus difficile
 L’organisation matérielle de la mémoire peut avoir un impact
important pour le même code sur 2 machines

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 9
Développement d’applications basées
sur le modèle à mémoire partagée
 Principaux modèles de programmation
 Programmation multithreads
 Pthreads -> largement utilisé dans les bibliothèques des systèmes
de type UNIX
 Java Threads -> extension du langage Java qui encapsule une
classe Thread
 Programmation à mémoire partagée structurée (Structured
Shared-Memory Programming)
 OpenMP

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 10
OpenMP
 Ensemble d’outils permettant d’étendre des langages
séquentiels existants :
 Directives de compilation
 Appels de routines de bibliothèque
 Variables d’environnement
 API permettant d’exprimer un modèle de parallélisme à
mémoire partagée dans des programmes
 1.0 –> C, C++, Oct. 1998, Fortran Oct. 1997
 2.0 –> C, C++, Mars 2002, Fortran Nov. 2000
 2.5 –> C, C++, Fortran, Mai 2005
 3.0 –> Spécification, Mai 2008
 3.1 –> Spécification, Juillet 2011
 4.0 –> Spécification, Juillet 2013
 Évolution d’OpenMP
 [Link] (p.41)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 11
OpenMP

 Permet l’écriture de programmes portables sur la plupart


des multiprocesseurs
 Le programmeur spécifie au compilateur et au système
les actions à faire pour exécuter un programme en
parallèle
 Responsable de l’exactitude du programme (gestion des race
conditions, des synchronisations, etc.)
 OpenMP != générateur de code parallèle
 Permet d’écrire un seul programme pouvant être
exécuté de façon parallèle ou séquentielle
 Parallélisme de type SPMD (Single Program Multiple
Data)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 12
OpenMP
 ‘Quasi’-standard développé et soutenu par les fabricants de
machines, et de compilateurs

 But : spécifier une interface simple pour permettre la programmation


parallèle en mémoire partagée à l’aide de threads

 Le modèle choisi repose sur des directives de compilation qui


génèrent un code multithread

 En fait ces directives proviennent des directives constructeurs déjà


présentes chez Cray, SGI, … et tous les autres fabricants de
multiprocesseurs de grande taille

 Le but est de promouvoir la simplicité d’utilisation de telles machines


(très coûteuses) via une interface simple d’utilisation

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 13
OpenMP
 OpenMP: API (Application Programming
Interface) pour la programmation parallèle sur
les machines parallèles à mémoire partagée:
 Directives au compilateur
 Libraire de fonctions

 OpenMP fonctionne en conjonction avec C, C++


et Fortran

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Développement de programmes en C
avec OpenMP
 Parallélisme de type Fork-Join
 Parties de code séquentielles
 Parties de code parallèles (Régions parallèles)
 Vision de la mémoire en 2 niveaux
 Partagée -> Variables accessibles par tous les threads (shared)
 Privée -> Variables locales aux threads (private, threadprivate)
 Inclusion de la bibliothèque OpenMP
 #include <openmp.h>
 Format d’une directive de compilation :
 #pragma omp nom-directive [clause[ [,] clause]…]
 clause : composante additionnelle optionnelle

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 15
Structure d’un programme OpenMP
 Multithreading et parallélisme fork/join
 Un processus est lancé, qui reproduit ensuite les threads lorsqu’une
région parallèle est rencontrée
 La parallélisation peut être réalisée de façon incrémentale

Région séquentielle

Région parallèle multithread

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 16
Ajustement de quelques paramètres
importants
 Modifier le nombre de threads qui seront actifs dans les
régions parallèles du programme
 Par la modification de la variable d’environnement
 setenv OMP_NUM_THREADS
 Par un appel à une routine à l’intérieur du programme
 void omp_set_num_threads(int i);
 Peut être modifié plusieurs fois durant une exécution
 Obtenir le nombre de processeurs disponibles
 int omp_get_num_procs (void)
 Le système détermine ce nombre, peut être inférieur au nombre
réel de processeurs
 Habituellement : nb threads = nb procs

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 17
Concept général

 Un programme OpenMP est exécuté par un processus


unique.
 Ce processus active des processus légers (Threads) à
l’entrée d’une région parallèle.
 Chaque Threads exécute une tâche composée d’un
ensemble d’instructions.
 Pendant l’exécution d’une tâche, une variable peut être
lue et/ou modifiée en mémoire.
 Elle peut être définie dans la pile (stack) (espace
mémoire local) d’un Thread; on parle alors de variable
privée.
 Elle peut être définie dans un espace à mémoire
partagée par tous les Threads; on parle alors de variable
partagée.

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Concept général
1 234
 Un programme OpenMP est une Nombre de
alternance de régions séquentielles et tâches

parallèles.
 Une région séquentielle est toujours
exécutée par la tâche maître.
 Une région parallèle peut être
exécutée par plusieurs tâches à la
fois.
 Les tâches peuvent se partager le
travail contenu dans la région
parallèle.

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Concept général
 Le partage du travail consiste essentiellement à :
 Exécuter une boucle par répartition des itérations entre les
tâches ;
 Exécuter plusieurs sections de code mais une seule par tâche ;
 Exécuter plusieurs occurrences de la même procédure par
différentes tâches (orphaning).

Sections parallèles Procédure parallèle


Boucle parallèle (orphaning)
(Looplevel
parallelism)

X=y+12;
Y=x+21

for i=0;… d=f(x);


g(x);
for i=0;…

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Structure d’OpenMP

 Directives et clauses de compilation:


 elles servent à définir le partage du travail, la synchronisation et le
statut privé ou partagé des données ;
 elles sont considérées par le compilateur comme des lignes de
commentaires à moins de spécifier une option adéquate de
compilation pour qu’elles soient interprétées.
 Fonctions et sous-programmes: ils font partie d’une
bibliothèque chargée de l’édition des liens du programme.
 Variables d’environnement : une fois positionnées, leurs
valeurs sont prises en compte à l’exécution.

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Structure d’OpenMP

Programme

Compilation Directives

Édition de liens Bibliothèque

Variables
Exécution
d’environnement

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Boucles parallèles
 Les boucles for:
for (i = first; i < size; i += prime)
marked[i] = 1;
 Avec OpenMP, on peut facilement indiquer l’exécution
parallèle de la boucle
 Le compilateur prend le soin de générer le code qui va
allouer les itérations aux Threads

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Pragma
 « Pragmatic information »
 Pragma: une directive au compilateur Fortran, C,
C++
 Une façon de communiquer entre le
programmeur et le compilateur
 Le compilateur est libre d’ignorer les pragmas
 Syntax:
 #pragma omp <rest of pragma>

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014
Directives de compilation
 Utiliser un langage à directives revient à insérer des lignes de
commandes dans le code du programme, et qui seront traitées par
le pré-compilateur. Ces directives sont utilisées sur des régions
structurées! (un point d’entrée, un point de sortie, uniques)

 Dans le cas d’OpenMP, un code C ou Fortran multithread est alors


généré, puis compilé

 Les directives OpenMP sont des commentaires (permet de compiler


avec/sans le support OpenMP), prenant la forme :
 C : #pragma omp <directive> [clause [clause ] … ]
 Fortran : !$OMP, C$OMP, *$OMP <directive> [clause [
clause ] … ]

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 25
Directives de base
 Ouverture d’une région parallèle
 C : #pragma omp parallel []
 Fortran : !$OMP PARALLEL[]

 Fermeture de l’environnement parallèle


 C : aucune : la région est englobée entre {}
 Fortran : !$OMP END PARALLEL

 Obtention du rang du thread (fonction de la bibliothèque)


 C : omp_get_thread_num();
 Fortran : omp_get_thread_num()

 Obtention du nombre de processus (fonction de la bibliothèque)


 C : omp_get_num_threads();
 Fortran : omp_get_num_threads()

 Choix du nombre de threads de la prochaine région parallèle (bibliothèque)


 C : omp_set_num_threads(int nb_threads);
 Fortran : call omp_set_num_threads(nb_threads)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 26
Variables d’environnement OpenMP
 Le comportement par défaut d’OpenMP peut être précisé par
l’utilisation de variables d’environnement
 OMP_NUM_PROCS = nombre de threads qui seront lancés dans
chaque région parallèle
 OMP_DYNAMIC = variation possible du nombre de threads suivant la
zone parallèle
 OMP_SCHEDULE = contrôle de l’ordonnancement des boucles
 OMP_NESTED = possibilité d’utiliser du parallélisme imbriqué

 Toutes ces variables seront ignorées si des fonctions de la


bibliothèques équivalentes sont utilisées

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 27
HelloWorld_OpenMP.c
#include <stdio.h>
#include <omp.h>

void main(int argc, char ** argv) {


int rang, nprocs;

#pragma omp parallel private(rang, nprocs)


{
rang = omp_get_thread_num();
nprocs = omp_get_num_threads();
printf(“Bonjour, je suis %d (parmi %d threads)\n”, rang, nprocs);
}

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 28
OpenMP : notions de base
 Notions élémentaires : variables partagées ou privées

 Directives de partage de travail

 Directives de synchronisation

 Fonctions de la bibliothèque

 Exemple concret : calcul de la trace d’une matrice carrée

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 29
Variables partagées et privées
 Une variable partagée pourra être écrite et lue par tous les threads

 Une variable est dite privée pour un thread si seulement lui peut la
lire et l’écrire

 Les clauses SHARED ou PRIVATE permettent de préciser lors de


l’ouverture de la région quelles variables sont partagées ou privées.
Il est aussi possible de préciser la valeur par défaut (exemple :
!$OMP PARALLEL DEFAULT(SHARED) )

 Certaines variables sont privées par défaut. Exemple : les indices


des boucles parallélisées avec les directives for/DO

 Les variables utilisées dans les fonctions appelées par les zones
parallèles sont systématiquement privées!

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 30
Clauses de partage/privatisation
 PRIVATE
 La variable est privée pour chacun des threads

 SHARED
 La variable est partagée entre tous les threads

 FIRSTPRIVATE
 La variable est privée et prend la valeur qu’avait la variable du même nom sur le
thread maître

 LASTPRIVATE
 La valeur en sortie de région parallèle est la copie de celle de la dernière
itération en séquentiel

 THREADPRIVATE
 Utilisée pour préciser qu’une variable est privée (utile pour les variables globales)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 31
Distribution des itérations des boucles
 Une des cibles d’OpenMP : permet de distribuer les itérations des
boucles entre les différents threads

 Syntaxe :
 C : #pragma omp for
 Fortran : !$OMP DO / !$OMP END DO

 En pratique :
#pragma omp parallel #pragma omp parallel for
#pragma omp for for (i=0; i<N; i++) {
for (i=0; i<N; i++) { …
… }
}

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 32
Distribution des itérations des boucles

 Par défaut, tous les threads s’arrêtent et attendent


lorsque la fin de la boucle est atteinte (barrière de
synchronisation explicite)
 Ce comportement peut être changé en utilisant la clause
NOWAIT

 La façon dont les itérations sont distribuées entre les


différents threads peut être modifiée via la clause de
scheduling, ou via la variable d’environnement
OMP_SCHEDULE

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 33
Distribution du calcul
 La directive SECTION permet d’attribuer à chaque thread un bloc
structuré différent (programmation MPMD : Multiple Program,
Multiple Data)

#pragma omp parallel


{
#pragma omp sections
{
#pragma omp section
section1…
#pragma omp section
section2…
}
… suite du programme execute par tous
}

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 34
Clause de réduction
 Afin de permettre d’effectuer une opération globale sur les valeurs
locales obtenues en sortie d’une région parallèle, on peut utiliser
une clause de réduction

 Utilisation (dans PARALLEL, for/DO, …)


 REDUCTION (opération: liste de variables)

 Opérations disponibles:
 min, max
 +, -, *

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 35
Synchronisation
 OpenMP possède des directives permettant de synchroniser les
threads entre eux, ou du moins de contrôler plus finement le
déroulement de l’exécution

 Ce sont les directives:


 ATOMIC
 CRITICAL
 BARRIER
 FLUSH
 ORDERED
 SINGLE
 MASTER

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 36
ATOMIC / CRITICAL
 Les directives ATOMIC et CRITICAL permettent de spécifier qu’un
et un seul thread entrera dans la région suivant immédiatement la
directive

 La différence réside dans le fait que ATOMIC se base principalement


sur les instructions atomiques des processeurs, et correspond à une
mise à jour de variable alors que CRITICAL englobe toute une
partie de code (implémentation sous-jacente probablement avec des
verrous)

 Ces directives peuvent par exemple servir à effectuer une réduction


‘manuelle’ en cours de calcul

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 37
BARRIER / FLUSH
 La directive BARRIER est une barrière de synchronisation : tous les
threads l’atteignant attendront que les autres threads arrivent à la
barrière avant de continuer l’exécution

 La directive FLUSH(variable) permet de forcer la variable


partagée variable à être visible de tous les processeurs après une
mise à jour

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 38
ORDERED
 Dans une boucle parallélisée avec OMP for/DO, la directive
ORDERED permet de s’assurer que l’ordre des opérations à l’intérieur
de la zone de la directive sera exécutée dans l’ordre correspondant
aux itérations de la boucle, comme dans le cas séquentiel

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 39
SINGLE / MASTER
 Ces directives permettent d’assurer que le code n’est exécute que
par un seul thread

 Dans le cas de SINGLE, c’est le premier thread qui atteint la zone


considérée qui procède à l’exécution

 Dans le cas de MASTER, c’est toujours le thread maître (de rang 0)


qui exécute la tâche

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 40
Fonctions de la bibliothèque OMP
 Outre les fonctions déjà évoquées permettant de connaître le rang
des différents threads ainsi que le nombre total de threads, la
bibliothèque OpenMP propose également plusieurs fonctions

 Synchronisation par des verrous


 omp_set/get_lock(), omp_test_lock()…

 Savoir si l’on est dans une zone parallèle ou pas


 omp_in_parallel()

 …

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 41
Trace d’une matrice (1)
 Calcul de la trace d’une matrice An

 Rappel : la trace d’une matrice est la somme des éléments de sa diagonale


(matrice nécessairement carrée)

 n 
 Mathématiquement, on sait que : Trace( A)    Ak , k 
 k 1 
 Immédiatement, on voit facilement que le problème peut être parallélisé en
calculant la somme des éléments diagonaux sur plusieurs processeurs puis
en utilisant une réduction pour calculer la trace globale

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 42
Trace d’une matrice (2)
#include <stdio.h> printf("La trace de A est : %f \n",
#include <omp.h> traceA);
}
void main(int argc, char ** argv) {
int me, np, root=0;
int N; /* On suppose que N = m*np */
double A[N][N];
double traceA = 0;

/* Initialisation de A */
/* … */
#pragma omp parallel default(shared)
#pragma omp for reduction(+:traceA)
for (i=0; i<N; i++) {
traceA += A[i][i]
}

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 43
OpenMP : notions avancées

 Notes sur l’implémentation

 Parallélisme imbriqué (nested parallelism)

 OpenMP2

 OpenMP4

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 44
Notes sur l’implémentation (1)
 La création sémantique de multiples zones parallèles ne signifie pas
forcement leur création réelle…

Modèle abstrait

Implémentation probable

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 45
Notes sur l’implémentation (2)
Le maître Le thread Le thread maître Le thread
exécute le maître insère exécute des tâches de maître
code des tâches la pile. Si elle est vide, il exécute le
séquentiel dans la pile attend la terminaison code
de tâches par les autres threads séquentiel

Un environnement possible d’exécution

Les threads esclaves exécutent la boucle : {prendre tâche dans la pile; exécuter la tâche}

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 46
Parallélisme imbriqué
 La notion de parallélisme imbriqué fait référence à la possibilité
d’ouvrir une région parallèle à l’intérieur d’une région déjà parallèle

 Immédiatement, on peut voir les applications dans le cas de la


parallélisation des nids de boucles, par exemple pour procéder ‘par
bloc’

 Toutefois, la plupart des compilateurs sérialisent les régions


imbriquées, par manque de support au point de vue du système
d’exploitation (en pratique, seules les NEC SX5 et les Compaq ES-
40 permettent une telle approche)

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 47
OpenMP2
 OpenMP2 est une évolution d’OpenMP qui permet de faciliter
l’utilisation du langage par l’ajout de directives et/ou clauses

 Tout particulièrement :
 NUM_THREADS qui dans la déclaration d’une zone parallèle permet de
définir le nombre de threads qui seront utilisés
 La clause de REDUCTION est étendue aux tableaux
 Un principe d’affinité entre les zones parallèles est suggéré, afin que
deux zones successives utilisent les mêmes threads
 Des fonctions de prise de temps (omp_get_wtime()) sont mises en
place

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 48
OpenMP4
 Support pour différents dispositifs de calcul – omp target

 Support pour les opérations SIMD – omp simd

 Support pour la parallélisation de tâches – omp cancel

 Localité et affinité des « threads » – omp_places

 Autres modifications : ex. réductions définies par l’utilisateur

49 Hiver 2015 - Cours 05


Remarques et conclusion
 OpenMP est avant tout un outil qui a pour but de
procurer un mode de parallélisation attractif car
incrémental et simple d’utilisation

 Il est avant tout promu par les constructeurs et les


fabricants de compilateurs

 Se concentrant uniquement sur l’aspect de la


parallélisation des tâches, par rapport à d’autres outils
comme HPF, des études en cours essaient d’y ajouter
cet aspect de placement de données

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 50
Sommaire

 OpenMP -> mémoire Caractéristique OpenMP MPI


partagée -> fork/join
 Souvent utilisé pour le
parallélisme de données, Utilisable sur les Oui Oui
multiprocesseurs
mais permet aussi le
parallélisme fonctionnel
Utilisable sur les multi- Non Oui
 Relativement confortable ordinateurs
pour le programmeur
 Les synchronisations Permet le parallélisme Oui Non
incrémental
doivent tout de même être
bien gérées
Codage supplémentaire minimal Oui Non

 [Link]
Permet d’exploiter la mémoire Non Oui
directement

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 51
Quelques pointeurs
 Le site officiel du ‘standard’ OpenMP (en Anglais)
 [Link]

 Les cours de l’IDRIS (en Français)


 [Link]
[Link]

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 52
Référence
 Krawezik, G. (2003). Présentation rapide de OpenMP.
LRI – Université de Paris Sud

LOG645 – Architectures de calculs parallèles


Matériel développé par Lévis Thériault, Automne 2014 53

Vous aimerez peut-être aussi