Henri Tremblay
Responsable R&D
Performance et calcul parallèle
OCTO Technology
Démontrer que la
programmation parallèle doit
désormais faire partie de la
panoplie standard du
développeur moderne
2
La fin de la loi de Moore ?
Énoncée par Gordon Moore, co-fondateur d’Intel en 1965
Doublement du nombre de transistors sur une puce tous les 2 ans

Encore techniquement vraie mais la fréquence n’augmente plus depuis 2005.

Les fondeurs ont changés d’architecture pour augmenter la puissante des processeur :
multi cœurs.

3
Loi des rendements décroissants
Loi datant de 1768, énoncée par David Ricardo :
En augmentant la quantité utilisée d’un facteur, celle de l’autre
restant fixe, on obtient une quantité supplémentaire de
produits de moins en moins grande

VS

4
Évolution des architectures
CPU : multicoeurs
• La course au Hertz est finie
• Le nombre de cœurs est en constance
augmentation

GPU : des centaines de cœurs
• Surpuissant… en parallèle

5
Pourquoi paralléliser ?

Utilisation CPU : 13%
6
Bonus: C’est écologique!
Intel
X5560 (2.8 GHz, 4 cores, 95 watts)
vs
X5660 (2.8 GHz, 6 cores, 95 watts)
Même nombre de Watt
50% plus de puissance
Si on ignore la loi de Amdahl…
7
Loi d’Amdahl
La fraction du
temps d'exécution
qui ne peut tirer
profit de
l'amélioration
limite le gain de
performance global,
quelle que soit la
valeur de
l'amélioration de la
composante.

8
9
Complexité: Race condition

10
Complexité: Double-checked locking

11
Complexité: Contention

12
Démo 1: Le code

13
14
Exemple .Net: Séquentiel

15
Exemple : .Net à l’ancienne

16
Exemple : .Net Moderne

17
Exemple : Java 8
Arrays.stream(rows)
.parallel().forEach(row -> {
for (int j = 0; j < matBCols; j++) {
double temp = 0;
for (int k = 0; k < matACols; k++) {
temp += row.rowA[k] * matB[k][j];
}
row.rowResult[j] = temp;
}
});

18
Patterns
 Map / Reduce
 Fork / Join
 Actor
 Dataflow
 Software Transactional Memory (STM)
 Functional programming
 Atomic references
19
Exemple: STM
Passé (synchronized)

Présent (atomic)

Future (STM)

20
Quelques frameworks
 Java








Java 8: Parallel collections
Java 7 & JSR166: Fork / Join (java.util.concurrent)
Java 6: Future (java.util.concurrent)
GPars (http://www.gpars.org)
Akka (http://akka.io/)
Clojure STM (http://clojure.org/refs)
Multiverse (http://multiverse.codehaus.org)

 .Net
 .Net 4 (namespace System.Threading.Tasks)
21
22
Approximation de PI

≈4p/n
p

3,14159265
3589793238
4626433832
795…
23
Batman equation
 Calcul de l’aire par un
algorithme de Monte-Carlo:

48,42

24
Batman equation: Séquentiel

25
Batman equation: Parallèle

26
GPGPU : Adapté au parallélisme de masse
 Exploiter la puissance de calcul des GPUs pour le traitement de
tâches massivement parallèles

 Adapté aux algorithmes parallélisables
 Peu adapté au traitement rapide de tâches séquentielles
Nvidia Tesla K20X





2688 cœurs – 3950 Gflops
4450 $
235 W
1,12 $ / Gflop

Xeon E7-8870





10 cœurs – 96 Gflops
4616 $
130 W
48, 08 $ / GFlop
27
GPGPU : Architecture « orientée débit »
Changement de paradigme
 Low-latency pour le CPU
 Orienté débit pour le GPU

Traitement des tâches dans l’ordre
 Basé sur le modèle SIMD
 Génération en masse de threads pour
traiter la même instruction

28
GPGPU : Les facteurs limitants
La multiplication des branches détériore les performances
 Les unités de calculs d’une branche doivent attendre les autres
 Sous-utilisation matérielle

Limitation matérielle
 Transfert de données entre les
mémoires CPU et GPU

29
Quelques frameworks GPU
 C/C++
 OpenCL
 Cuda

 C#
 GPU.NET (http://www.tidepowerd.com)

 Java
 Aparapi (http://code.google.com/p/aparapi)
 Rootbeer (https://github.com/pcpratts/rootbeer1)

 Scala
 ScalaCL (http://code.google.com/p/scalacl)
30
Batman equation: GPU

31
Autres utilisations
 Plusieurs étapes de validation
 Plusieurs calculs à faire
 Toutes les boucles que vous rencontrez!

32
Implémentation naïve
http-worker-1
http-worker-2

…

Thread
Swapping

http-worker-n

Calcul
Monte-Carlo
33
Implémentation parallèle
http-worker-1
http-worker-2

Thread pool
pool-worker-1

…

pool-worker-2

http-worker-n

Calcul
Monte-Carlo
34
Monte Carlo: 1 utilisateur
Séquentiel

Parallèle

35
Monte Carlo: 50 utilisateurs
Séquentiel

Parallèle

36
37
Faut s’y mettre
38
Y’a pas le choix
39
Conclusion

C’est de
plus en
plus
simple
40
Questions
http://perfug.github.io/

+Henri
@henritremblay
htr@octo.com

http://brownbaglunch.fr
41
Démo
Sur GitHub

 Pour récupérer le projet
 git clone git://github.com/henri-tremblay/parallel-lab.git

 Pour compiler (tout est dans vanillapull)
 mvn install

 Pour exécuter
 mvn –pl webapp –Dspring.profiles.active=${mode}

• mode = vanilla | mono | naive | executor | pool |
akka

 Pour bencher


mvn –pl gatling gatling:execute -Dgatling.simulationClass=PricingSimulation

42

Vivre en parallèle - Softshake 2013

Notes de l'éditeur

  • #3 Pourquoi ça vous tombe dessus là toute de suite: À cause de la loi de Moore!Henri:« Démontrer que la programmation parallèle doit désormais … »C’est une technologie mature et omniprésente. Elle ne doit plus être ignorée comme solution possible à vos problèmes de développement par peur de complexité.Évidemment, il y a encore des écueils, mais depuis quelques années, la complexité a été largement réduite.Mais commençons pas le début: Pourquoi ça vous tombe dessus là tout de suite?« Petit aparté: Toute présentation sur la programmation parallèle se doit de parler de la loi de Moore. Nous ne dérogerons pas à la règle donc, je reprends »