performances de la programmation multi-thread€¦ · introduction définitions...

30
Introduction Définitions Etude des performances Synchronisation Conclusion Performances de la programmation multi-thread Eric Beuque Cyril Moutenet URF Sciences et Techniques, Université de Franche-Comté, Besançon 06 février 2009 Tuteur : Laurent Philippe Jury : Olga Kouchnarenko 1/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Upload: others

Post on 17-Oct-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Performances de la programmation multi-thread

Eric Beuque Cyril Moutenet

URF Sciences et Techniques, Université de Franche-Comté, Besançon

06 février 2009

Tuteur : Laurent PhilippeJury : Olga Kouchnarenko

1/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 2: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

2/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 3: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Introduction

Choix des langages à étudierC (Posix Thread, OpenMP, fork)C++ (TBB)Java (Thread, Rmi)C# (Thread) (Mono sous linux)

Plates-formesOS : Windows, LinuxType de processeurs : Core2Duo, P4 Hyperthreading, Bi-ProcQuadCore

Choix des algorithmes de testFibonacciMultiplication de matrices

Etude des bibliothèques de synchronisation

3/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 4: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

4/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 5: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Définition

Processus légerUn processus léger (thread) est un processus qui possède unemémoire partagée avec le programme qui le lance.

Multi-threadingLe Multi-threading décrit des tâches qui peuvent être exécutées defaçon simultanée.

HyperthreadingL’Hyperthreading est une caractéristique d’un processeur à deuxprocesseurs logiques sur un processeur physique.

5/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 6: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Outils de programmation (1)

POSIXpThread sous UNIX

OpenMPAPI C/C++ et Fortran. Pour le développement a granularité faibleproche du séquentiel.

MPIExploitation des ordinateurs distants par passage de messages etoffre la possibilité de réaliser des calculs parallèles à mémoiredistribuée.

6/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 7: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Outils de programmation (2)

TBBCalcul parallèle pour C++, avec abstraction des threads.

JSR166yBibliothèque pour Java équivalente au packagejava.util.concurrent.

7/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 8: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

8/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 9: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Etude des performances

Algorithmes :FibonacciMultiplication de matrices

Tests effectués :Comparaison des différents langages et bibliothèquesComparaison entre le non threadé et le multi-threadéTests des différents processeurs mono et multi-cœurs

9/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 10: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

10/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 11: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Test sur Fibonacci - Algorithme

Algorithm 1 Calcule n fois le nombre de Fibonacci d’un entier

1: nFibo ← lire() . Lecture du nombre à calculer2: nbFois ← lire() . Lecture du nombre de fois à calculer3: dateDebut ← now()4: for i = 1 to nbFois do . Début de la région parallèle5: fibo(nFibo)6: end for . Fin de la région parallèle7: dateFin← now()

11/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 12: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des différentes bibliothèquesTests sans threads : 1× fibo(n)

Java > C > CSharp

Java 2 X plus rapide

Thread ≈ NonThread

Meilleur : JavaThread

Linux Core2Duo T9300 2,5GHz12/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 13: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des différentes bibliothèquesTests avec 2 threads : 2× fibo(n)

Java > C > CSharp

Thread > NonThread

Meilleur : JavaThread

Faible : CSharpMono

Linux Core2Duo T9300 2,5GHz

13/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 14: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison du niveau d’optimisation du compilateur en CTests du niveau de compilation de GCC

Meilleur : O3

3 X plus rapide

Linux Core2Duo T9300 2,5GHz

14/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 15: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des machines virtuelle JavaTests des JVM Sun 1.5, 1.6 et OpenJDK 1.6

SunJDK1.5 ≈ SunJDK1.6 > OpenJDK1.6

Linux Core2Duo T9300 2,5GHz

15/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 16: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison finale entre Java et CTests entre SunJDK1.6 et C en -O3

C > Java

Meilleur :Fork,OpenMP

Linux Core2Duo T9300 2,5GHz16/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 17: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

17/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 18: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Test sur la multiplication de matrices - Algorithme

Algorithm 2 Calcule la multiplication d’une matrice A par B, et metle résultat dans C

1: dateDebut ← now()2: A,B ← initialiser(mSize) . Initialise les matrices3: for i = 0 to mSize do . Début de la région parallèle4: for j = 0 to mSize do5: for k = 0 to mSize do6: C [i ][j]← C [i ][j] + A[i ][k] ∗ B[k][j]7: end for8: end for9: end for . Fin de la région parallèle

10: dateFin← now()

18/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 19: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des technologies de processeursTests Core 2 Duo - 2 threads

Gain ≈ x2 avec threads

TBB : faible < CSharp

CNoThread > Java

PThread ≈ OpenMP

Linux Core2Duo T9300 2,5GHz

19/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 20: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des technologies de processeursTests P4 Hyperthreading - 2 threads

Pas de gestion des threads

Avec threads⇔ Sans thread

Linux P4 HyperThreading

20/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 21: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Comparaison des technologies de processeursTests Xeon 2 x Quad Core - 8 threads

Gain :Java : 14xC : 7x

Linux Pentium Xeon X5460 3.16GHz (2 processeurs à 4 cœurs)

21/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 22: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Performance des threadsTests Core 2 Duo T5500

Mauvaise exploitation des threads

Windows T5500 1.66Ghz

22/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 23: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Performance des threadsPentium 4D (Dual Core)

Bonne exploitation des threads

Linux P4 D 2.8GHz

23/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 24: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Performance des threadsPentium Xeon X5460 (2 x Quad Core)

Gain faible au delà de 4 threads

Linux Pentium Xeon X5460 3.16GHz (2 processeurs à 4 cœurs)

24/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 25: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Bibliothèque JSR166yAutre algorithme

Algorithme 10x plus performant.

Linux Pentium Xeon X5460 3.16GHz (2 processeurs à 4 cœurs)

25/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 26: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

26/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 27: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Test sur FibonacciTest sur la multiplication de matricesCréation de thread

Création de thread

Temps de création d’un thread

Fig.: Temps de création d’un thread sur un Linux Core2Duo T9300

Utilisation mémoireDifficile à mesurer

27/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 28: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Plan

1 Introduction

2 Définitions

3 Etude des performancesTest sur FibonacciTest sur la multiplication de matricesCréation de thread

4 Synchronisation

5 Conclusion

28/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 29: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Synchronisation

Mutex : ReentrantLock, pthread_mutex_t, omp_lock_t, Mutex...

Sémaphore : Monitor, Semaphore...

Section critique : synchronized{}, lock{}, #pragma omp critical{}...

Modèle producteur-consommateurAutres bibliothèques de synchronisation :

Java : concurrent (LinkedBlockingQueue, ExecutorService, . . . )CSharp : Monitor, ReaderWriterLock, . . .

29/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread

Page 30: Performances de la programmation multi-thread€¦ · Introduction Définitions Etudedesperformances Synchronisation Conclusion Performances de la programmation multi-thread EricBeuque

IntroductionDéfinitions

Etude des performancesSynchronisation

Conclusion

Conclusion

Bilan :Technique (connaissances, tests limités...)Humain (expérience...)

Conclusion

30/30 Eric Beuque, Cyril Moutenet Performances de la programmation multi-thread