45
Introduction ` a la programmation parall ` ele Oguz Kaya Polytech Paris-Sud Orsay, France Apprentissage 4 ` eme ann ´ ee September 3, 2019 Oguz Kaya (Polytech Paris-Sud) Programmation Parall` ele 1 / 40

Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Introduction a la programmation parallele

Oguz Kaya

Polytech Paris-Sud

Orsay, France

Apprentissage 4eme annee

September 3, 2019

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 1 / 40

Page 2: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Objectifs

Introduire les concepts de base de la programmation parallele

Presenter les principaux modeles de programmation

Fournir quelques conseils pour developper des programmesparalleles efficaces

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 2 / 40

Page 3: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 3 / 40

Page 4: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 3 / 40

Page 5: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 3 / 40

Page 6: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 3 / 40

Page 7: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 4 / 40

Page 8: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Programmation sequentielle

Traditionnellement, les logiciels sont bases sur des calculs sequentiels :

Un probleme est decoupe en instructions

Ces instructions sont executees sequentiellement l’une apres l’autre

Elles sont executees par un seul processeur

A un instant donne, une seule instruction est executee

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 5 / 40

Page 9: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Programmation Parallele

Dans le cas le plus simple, la programmation parallele est l’utilisation deplusieurs ressources de calcul pour resoudre un probleme donne :

Un probleme est decoupe en parties qui peuvent etre lanceessimultanementChaque partie est encore decoupee en instructionsLes instructions de chaque partie sont executees en parallele enutilisant plusieurs processeurs

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 6 / 40

Page 10: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

La loi d’Amdahl

A quel point le programme s’executera plus rapidement?

Acceleration : S(n) =T (1)T (n)

,

ouT(1) : Le temps d’execution du programme en utilisant unprocesseurT(n) : Le temps d’execution du programme en utilisant nprocesseurs

Efficacite : E(n) =S(n)

nIndique a quel point la parallelisation d’un code donne est efficaceSi on considere un programme avec une fraction sequentielle S et unefraction parallele P, alors

Acceleration =1

Pn + S

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 7 / 40

Page 11: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

La Loi d’Amdahl

C’est une loi tres simpliste mais qui a le merite de nous indiquer leslimites de scalabilite de la parallelisation

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 8 / 40

Page 12: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Classification de Flynn

Il y a differentes manieres de classifier les machines paralleles

Une classification assez repandue, utilisee depuis 1966 est laclassification de Flynn

Cette classification distingue les architectures des machinesparalleles suivant les flux d’instructions et de donnees. Chacun nepeut avoir qu’un seul etat : Single (Simple) or Multiple

Quatre classifications possibles d’apres Flynn:

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 9 / 40

Page 13: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Single Instruction, Single Data (SISD)

Une machine sequentielle

Instruction “Single”: une seule instruction est executee par le CPU achaque cycle d’horloge

Donnee “Single” : un seul flux de donnee est utilise comme entree achaque cycle d’horloge

Execution deterministe

Les plus anciens des ordinateurs

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 10 / 40

Page 14: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Single Instruction, Multiple Data (SIMD)

Un exemple de machine parallele

Instruction “Single” : Toutes les unites de calcul executent la memeinstruction a chaque cycle d’horloge

Donnees Multiple : Chaque unite de calcul peut operer sur unedonnee differente

Compatible pour les probleme assez reguliers comme les traitementd’images

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 11 / 40

Page 15: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Multiple Instruction, Single Data (MISD)

Un exemple de machine paralleleInstruction Multiple : Chaque unite de calcul opere sur des donneesindependantes via differents flux d’instructionsDonnee “Single” : Un seul flux de donnees alimente plusieurs unitesde calculQuelques exemples d’utilisation sont :

plusieurs filtres de frequence operant sur un seul signalplusieurs algorithme de cryptographies essayant de dechiffrer un seulmessage code coded message

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 12 / 40

Page 16: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Multiple Instruction, Multiple Data (MIMD)

Un exemple de machine paralleleInstruction Multiple : chaque unite de calcul peut executer un fluxd’instructions differentDonnees Multiple : chaque processeur peut operer sur un flux dedonnees differentL’execution peut etre synchrone or asynchrone, deterministe ornon-deterministeLa majorite des machines paralleles modernes font partie de cettecategoriePlusieurs architectures MIMD incluent aussi des composants SIMD

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 13 / 40

Page 17: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 14 / 40

Page 18: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire partagee : caracteristiques generales

Tous les processeurs peuvent acceder a la memoire comme unespace d’adressage global

Plusieurs processeurs peuvent operer de facon independante maispartagent les memes ressources memoire

Les modifications par un processeur dans une zone memoire estvisible par tous les autres processeurs

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 15 / 40

Page 19: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire paratgee : Uniform Memory Access (UMA)

Presente par les machines SMP ( Symmetric Multiprocessor)

Processeurs identiques

Temps d’acces a la memoire egal pour tous les processeurs

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 16 / 40

Page 20: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire paratgee : Non-Uniform Memory Access(NUMA)

Dans la plus part des cas, physiquement construits en liant deux ouplus SMPsUn SMP peut acceder directement a la memoire d’un autre SMPTous les processeurs n’ont pas un temps d’acces egal pour toutesles memoiresLes acces memoire a la memoire d’un autre SMP sont plus lentsSi la coherence du cache est assuree, on parle de cc-NUMA

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 17 / 40

Page 21: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire paratgee :

1 Avantages :L’espace d’adressage global permet une programmation plus simplede point de vue gestion de la memoireLe partage des donnees entre les threads est rapide et uniformegrace a la proximite de la memoire du CPU

2 Inconvenients :Le manque de scalabilite entre la memoire et les CPUs : ajouter plusde CPUs augmentera l’utilisation du bus partage et pour lessystemes a cache coherent, cela augmentera l’effort de gestion de lacoherence entre le cache et la memoireC’est la responsabilite du programmeur de faire les synchronisationsnecessaires pour assurer des acces “corrects” a la memoire globale

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 18 / 40

Page 22: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire distribuee : caracteristiques generales

Les systemes a memoire distribuee necessitent un reseau pourassurer la connexion entre les processeurs

Chaque processeur a sa propre memoire et son propre espaced’adressage

C’est au programmeur d’indiquer explicitement comment et quandles donnees doivent etre communiquees et quand lessynchronisations entre les precesseurs doivent etre effectuees

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 19 / 40

Page 23: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire distribuee : caracteristiques generales

Le reseau utilise pour le transfert des donnees entre lesprocesseurs est tres varie, il peut etre aussi simple qu’Ethernet

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 20 / 40

Page 24: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire distribuee

1 Avantages:La memoire est scalable avec le nombre de processeursChaque processeur accede a sa memoire rapidement sans niinterference avec les autres processeurs ni de cout additionnel pourmaintenir une coherence globale du cache

2 Inconvenients :Le programmeur est responsable de plusieurs details associes a lacommunication des donnees entre les processeursIl peut etre difficile de distribuer des structures de de donneesconcues sur une base de memoire globale sur cette nouvelleorganisation memoire

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 21 / 40

Page 25: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Memoire Hybride : caracteristiques generales

Les machines les plus performantes au monde sont des machinesqui utilisent les memoires partagees et distribuees

Les composantes a memoire partagee peuvent etre des machines amemoire partagee ou des GPUs ( graphics processing units)

Les processeurs d’un meme neoud de calcul partage le memeespace memoire

necessitent des communications pour echanger les donnees entreles noeuds

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 22 / 40

Page 26: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 23 / 40

Page 27: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Modeles de programmation parallele

Les modeles de programmation parallele existent comme uneabstraction au dessus des architectures paralleles

1 Memoire partagee :Intrinsics instructions SIMD (Intel SSE2, ARM NEON), bas niveau(Plus de details dans les cours a venir)Posix Threads bibliothequeOpenMP base sur des directives compilateur a jouter dans un codesequentiel (Plus de details dans les cours a venir)CUDA (Plus de details dans les cours a venir ??)OpenCL

2 Memoire distribuee :Sockets bibliotheque, bas niveauMPI Message Passing Interface le standard pour les architectures amemoire distribuee, le code parallele est en general tres different ducode sequentiel (Plus de details dans les cours a venir)

Quel modele de programmation utilise ?

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 24 / 40

Page 28: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Modeles de programmation parallele

Les modeles de programmation parallele existent comme uneabstraction au dessus des architectures paralleles

1 Memoire partagee :Intrinsics instructions SIMD (Intel SSE2, ARM NEON), bas niveau(Plus de details dans les cours a venir)Posix Threads bibliothequeOpenMP base sur des directives compilateur a jouter dans un codesequentiel (Plus de details dans les cours a venir)CUDA (Plus de details dans les cours a venir ??)OpenCL

2 Memoire distribuee :Sockets bibliotheque, bas niveauMPI Message Passing Interface le standard pour les architectures amemoire distribuee, le code parallele est en general tres different ducode sequentiel (Plus de details dans les cours a venir)

Quel modele de programmation utilise ?Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 24 / 40

Page 29: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Modele Thread

IEEE POSIX Threads (PThreads)Une API Standard UNIX, existe aussi sous WindowsPlus de 60 fonctions: pthread create, pthread join, pthread exit, . . .

OpenMPUne interface plus haut niveau, basee sur

des directives compilateurdes fonctions bibliothequesun runtime

Une orientation vers les application calcul haute performance (HPC)

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 25 / 40

Page 30: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

OpenMP

Modele d’execution fork-joinModele memoire

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 26 / 40

Page 31: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Message Passing Interface

Specification et gestion par le forum MPILa bibliotheque fournit un ensemble de primitives de communication :point a point ou collectiveC/C++ et Fortran

Un modele de programmation bas niveaula distribution des donnees et les communications doivent etre faitesmanuellementLes primitives sont faciles a utiliser mais le developpement desprogrammes paralleles peut etre assez difficile

Les communicationsPoint a point (messages entre deux processeurs)Collective (messages dans des groupes de processeurs)

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 27 / 40

Page 32: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Produit scalaire : Sequentiel

#include <s t d i o . h>#define SIZE 256

int main ( ) {double sum, a [ SIZE ] , b [ SIZE ] ;

// Initializationsum = 0 . ;for ( s i z e t i = 0 ; i < SIZE ; i ++) {

a [ i ] = i ∗ 0 . 5 ;b [ i ] = i ∗ 2 . 0 ;}

// Computationfor ( s i z e t i = 0 ; i < SIZE ; i ++)

sum = sum + a [ i ]∗b [ i ] ;

p r i n t f ("sum = %g\n" , sum ) ;return 0;}

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 28 / 40

Page 33: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Produit scalaire : instructions SSE

#include <immin t r i n . h>#include <iostream>#include <a lgor i thm>#include <numeric>

int main ( ){

s td : : s i z e t const s ize = 4 ∗ 5;s td : : srand ( t ime ( n u l l p t r ) ) ;float ∗ array0 = s t a t i c c a s t< float ∗ >( mm malloc ( s ize ∗ sizeof ( float ) , 16 ) ) ;float ∗ array1 = s t a t i c c a s t< float ∗ >( mm malloc ( s ize ∗ sizeof ( float ) , 16 ) ) ;s td : : generate n ( array0 , s ize , [ ] ( ) { return std : : rand ()%10;} ) ;s td : : generate n ( array1 , s ize , [ ] ( ) { return std : : rand ()%10;} ) ;

auto r0 = mm mul ps ( mm load ps ( &array0 [ 0 ] ) , mm load ps ( &array1 [ 0 ] ) ) ;

for ( s td : : s i z e t i = 0 ; i < s ize ; i +=4 ){

r0 = mm add ps ( r0 , mm mul ps ( mm load ps ( &array0 [ i ] ) , mm load ps ( &array1 [ i ] ) ) ) ;

}

float tmp [ 4 ] a t t r i b u t e ( ( a l igned ( 1 6 ) ) ) ;mm store ps ( tmp , r0 ) ;auto res = std : : accumulate ( tmp , tmp + 4 , 0.0 f ) ;

mm free ( array0 ) ;mm free ( array1 ) ;

return 0;}

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 29 / 40

Page 34: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Produit scalaire : Pthreads

#include <s t d i o . h>#include <pthread . h>#define SIZE 256#define NUM THREADS 4#define CHUNK SIZE /NUM THREADS

int i d [NUM THREADS ] ;double sum, a [ SIZE ] , b [ SIZE ] ;p th read t t i d [NUM THREADS ] ;p thread mutex t mutex sum ;

void∗ dot (void∗ i d ) {s i z e t i ;int m y f i r s t = ∗(int∗) i d ∗ CHUNK;int my las t = (∗ (int∗) i d + 1) ∗ CHUNK;double sum local = 0 . ;

// Computationfor ( i = m y f i r s t ; i < my las t ; i ++)

sum local = sum local + a [ i ]∗b [ i ] ;

p thread mutex lock (&mutex sum ) ;sum = sum + sum local ;p thread mutex unlock (&mutex sum ) ;return NULL;}

int main ( ) {s i z e t i ;

// Initializationsum = 0 . ;for ( i = 0 ; i < SIZE ; i ++) {

a [ i ] = i ∗ 0 . 5 ;b [ i ] = i ∗ 2 . 0 ;}

p t h r e a d m u t e x i n i t (&mutex sum , NULL ) ;

for ( i = 0 ; i < NUM THREADS; i ++) {i d [ i ] = i ;p th read crea te (& t i d [ i ] , NULL, dot ,

(void∗)& i d [ i ] ) ;}

for ( i = 0 ; i < NUM THREADS; i ++)p t h r e a d j o i n ( t i d [ i ] , NULL ) ;

p thread mutex dest roy (&mutex sum ) ;

p r i n t f ("sum = %g\n" , sum ) ;return 0;}

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 30 / 40

Page 35: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Produit scalaire : OpenMP

#include <s t d i o . h>#define SIZE 256

int main ( ) {double sum, a [ SIZE ] , b [ SIZE ] ;

// Initializationsum = 0 . ;for ( s i z e t i = 0 ; i < SIZE ; i ++) {

a [ i ] = i ∗ 0 . 5 ;b [ i ] = i ∗ 2 . 0 ;}

// Computation#pragma omp p a r a l l e l for reduc t ion ( + :sum)for ( s i z e t i = 0 ; i < SIZE ; i ++) {

sum = sum + a [ i ]∗b [ i ] ;}

p r i n t f ("sum = %g\n" , sum ) ;return 0;}

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 31 / 40

Page 36: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Produit scalaire : MPI

#include <s t d i o . h>#include "mpi.h"#define SIZE 256

int main (int argc , char∗ argv [ ] ) {int numprocs , my rank , m y f i r s t , my las t ;double sum, sum local , a [ SIZE ] , b [ SIZE ] ;M P I I n i t (& argc , &argv ) ;MPI Comm size (MPI COMM WORLD, &numprocs ) ;MPI Comm rank (MPI COMM WORLD, &my rank ) ;m y f i r s t = my rank ∗ SIZE / numprocs ;my las t = ( my rank + 1) ∗ SIZE / numprocs ;

// Initializationsum local = 0 . ;for ( s i z e t i = 0 ; i < SIZE ; i ++) {

a [ i ] = i ∗ 0 . 5 ;b [ i ] = i ∗ 2 . 0 ;}

// Computationfor ( s i z e t i = m y f i r s t ; i < my las t ; i ++)

sum local = sum local + a [ i ]∗b [ i ] ;MPI Al l reduce (& sum local , &sum, 1 , MPI DOUBLE, MPI SUM, MPI COMM WORLD) ;

if ( my rank == 0)p r i n t f ("sum = %g\n" , sum ) ;

MPI F ina l i ze ( ) ;return 0;}

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 32 / 40

Page 37: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Modele Hybride

Plusieurs processus MPI, chacun gerant un nombre de threadsCommunication inter-process via envoi de messages (MPI)Communication Intra-process (thread) via la memoire partagee

Bien adapte au architectures hybridesun processus par noeudun thread par coeur

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 33 / 40

Page 38: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Plan

1 Introduction

2 Architecture Memoire des machines paralleles

3 Modeles de programmation parallele

4 Autour du developpement de programmes paralleles

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 34 / 40

Page 39: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Un modele de performance ; le roofline modele

La performance qu’on peut atteindre (Gflop/s) est bornee par

Min{

La performance crete de la machine,La bande passante maximale × l’intensite operationnelle

},

ou l’intensite operationnelle est le nombre d’operation floattanteseffectuee par byte de DRAM transfere

depend de l’algorithme et de l’architecture cible

produit matrice-vecteur dense : Idgemv 6 14

produit matrice-vecteur creux : ISpMV 6 16 , depend du format du

stockage (CSR ici)

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 35 / 40

Page 40: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Un modele de performance ; le roofline modele

La performance qu’on peut atteindre (Gflop/s) est bornee par

Min{

La performance crete de la machine,La bande passante maximale × l’intensite operationnelle

},

ou l’intensite operationnelle est le nombre d’operation floattanteseffectuee par byte de DRAM transfere

depend de l’algorithme et de l’architecture cible

produit matrice-vecteur dense : Idgemv 6 14

produit matrice-vecteur creux : ISpMV 6 16 , depend du format du

stockage (CSR ici)

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 35 / 40

Page 41: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

le roofline modele : l’intensite operationnelle

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 36 / 40

Page 42: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Modele de performance pour NVIDIA Tesla K40

8  

16  

32  

64  

128  

256  

512  

1024  

2048  

1/16   1/8     1/4     1/2     1               2               4               8               16               32               64               128              

Performan

ce  (G

flop/s)

Opera3onal  Intensity  (Flops/Byte)

Roofline  model  for  K40m

DGEMV_MAGMA  (n=100:3000)  

DAXPY_MAGMA  (n=3000:20000)  

DGEMM_MAGMA  (n=100:1600)  

DGEMV_CUBLAS  (n=100:3000)  

DGEMM_CUBLAS  (n=100:1600)  

Max  Bandwidth  (288  GBytes/s)  

Peak  Performance  (1430GFlops/s)  

SpMV_MAGMA_CSR  (n=16384:2097152)  

SpMV_MAGMA_ELL  (n=16384:2097152  

SpMV_cuSPARSE_CSR  (n=16384:2097152)  

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 37 / 40

Page 43: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Ou commencer ? : Optimisation des noyaux

Performance au niveau du coeurReduire les defauts de cache : blocking, tilling, loop ordering, . . .

Vectorisation (unites SSE/AVX )

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 38 / 40

Page 44: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Quoi faire apres ?

Identifier les goulot d’etranglements du programme :savoir les parties qui consomment le plus de temps d’executionles outils d’analyse de performance peuvent aider ici ( profilers . . . )Se concentrer sur la parallelisation des goulot d’etranglements

Identifier les goulot d’etranglements du programme :Est ce qu’il y a des parties tres lentesPourquoi ?

Re-structurer le programme ou utiliser un autre algorithme pourreduire les parties qui sont tres lentes

Utiliser l’existant : logiciels et bibliotheques paralleles optimises(IBM’s ESSL, Intel’s MKL, AMD’s AMCL, LAPACK, . . . )

Developper de nouveaux algorithmes

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 39 / 40

Page 45: Introduction à la programmation parallèlekayaogz.github.io/teaching/app4-programmation-parallele... · 2020. 9. 10. · Il y a differentes mani´ eres de classifier les machines

Qu’est ce qui doit etre considere ? : quelques elements

La distribution des donnees : 1D, 2D, block, block cyclic, tiles . . .

La granularite

Les communications

Les synchronisations

Le recouvrement des calculs et des communications

L’equilibrage de charge entre les threads et/ou les processeurs

. . .

Oguz Kaya (Polytech Paris-Sud) Programmation Parallele 40 / 40