Generative and Meta-Programming - Modern C++ Design for Parallel Computing
Lattice Boltzmann sur architecture multicoeurs vectorielle - Une approche de haut niveau
1. Lattice Boltzmann sur architecture multicoeurs vectorielle
une approche de haut niveau
Antoine Tran Tan Joel Falcou
Université de Paris Sud
LRI - ParSys
Inria - Postale
Juin 2015
1 of 18
4. Le compromis matériel/logiciel
Single Core Era
Performance
Expressiveness
C/Fort.
C++
Java
Multi-Core/SIMD Era
Performance
Expressiveness
Sequential
Threads
SIMD
Heterogenous Era
Performance
Expressiveness
Sequential
SIMD
Threads
GPU
Phi
Distributed
3 of 18
5. Le compromis matériel/logiciel
Single Core Era
Performance
Expressiveness
C/Fort.
C++
Java
Multi-Core/SIMD Era
Performance
Expressiveness
Sequential
Threads
SIMD
Heterogenous Era
Performance
Expressiveness
Sequential
SIMD
Threads
GPU
Phi
Distributed
?
Comment allier performance ET expressivité ?
4 of 18
7. NT2
: The Numerical Template Toolbox
Une bibliothèque pour le calcul scientique
■ Interface semblable à M pour les utilisateurs
■ Classes et primitives pour le calcul haute performance
■ Souplesse vers les nouvelles architectures
5 of 18
8. NT2
: The Numerical Template Toolbox
Une bibliothèque pour le calcul scientique
■ Interface semblable à M pour les utilisateurs
■ Classes et primitives pour le calcul haute performance
■ Souplesse vers les nouvelles architectures
Composantes
■ Boost.SIMD pour le parallélisme mono-processeur
■ Utilisation de squelettes parallèles récursifs pour le parallélisme
multi-processeurs
■ Un code portable multi-architectures et multi-runtimes
5 of 18
11. L’algorithme Lattice Boltzmann
Pourquoi cet algorithme ?
■ Simplicité du coeur de l’algorithme
■ Fort parallélisme de données
■ Degré de liberté sur la structure des données
7 of 18
12. L’algorithme Lattice Boltzmann
Pourquoi cet algorithme ?
■ Simplicité du coeur de l’algorithme
■ Fort parallélisme de données
■ Degré de liberté sur la structure des données
La version D2Q9
■ Le schéma le plus simple
■ Se généralise aux versions DnQm
■ Des accès mémoire prenant le dessus sur le calcul
7 of 18
14. Contexte du code
■ Travail sur un lattice 2D
■ Rebonds sur bords et
obstacle (en gris), et
conditions de Neumann en
entrée (en bleu)
8 of 18
15. Contexte du code
■ Travail sur un lattice 2D
■ Rebonds sur bords et
obstacle (en gris), et
conditions de Neumann en
entrée (en bleu)
■ Mise à jour des 9
composantes de vitesse pour
chaque point
8 of 18
16. Coeur de l’algorithme - Version Pull
■ Propagation ■ Collision
Légendes
. : élément à lire
. : position du point à mettre à jour
9 of 18
17. Vers une version NT2
1. Obtenir un code simple similaire à Matlab
2. Utiliser tout le potentiel d’une machine multi-coeur
3. Tendre vers l’efficacité d’une version GPU écrite en CUDA
10 of 18
25. Conclusion
■ Des performances attendues pour un problème limité par la bande
passante mémoire
■ Extension sur GPU disponible (Ian Masliah, Doctorant au LRI)
■ Suivez-nous sur https://github.com/NumScale/nt2
17 of 18