High Performance Computing
Modèles de composants pour les applications HPC
NGAPMEN Ulrich Bolan
Facultés de Sciences
Département de Mathématiques et Informatique
Université de Dschang
October 23, 2024
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 1 / 39
Table de matières
1 Introduction
2 Architecture matérielle des systèmes HPC
3 Paradigmes et modèles de programmation
4 Programmation par composition
5 Programmation parallèle par composition
6 Exemple de modèle de composants
7 Low Level component : Un modèle de composants minimaliste pour le
HPC
8 Conclusion
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 2 / 39
Introduction
Dans un monde où la demande en calcul intensif explose, les systèmes de
High Performance Computing (HPC) deviennent cruciaux pour plusieurs
domaines. Ces systèmes, composés de milliers de cœurs de calcul, exigent
une efficacité maximale pour exploiter pleinement leur potentiel. Comment
concevoir des modèles de composants logiciels capables de répondre aux ex-
igences extrêmes en termes de performance, de modularité, et de portabilité
dans les systèmes HPC modernes ?
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 3 / 39
Architecture matérielle des systèmes HPC
Les architectures à mémoires distribuée et partagée sont deux modèles
fondamentaux dans la conception des systèmes de traitement parallèle.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 4 / 39
Architecture matérielle des systèmes HPC
Architecture UMA (Uniform Memory Access)
Architecture UMA
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 5 / 39
Architecture matérielle des systèmes HPC
Architecture SMP (Symmetric Multi-Processing)
Architecture SMP
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 6 / 39
Architecture matérielle des systèmes HPC
Interaction, Architecture à mémoire partagée
En mémoire partagé, la programmation à base des verrous est l’une des
approches les plus fréquemment utilisées dans les applications.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 7 / 39
Architecture matérielle des systèmes HPC
Architecture NUMA (Non-Uniform Memory Access)
Exemple d’architecture NUMA
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 8 / 39
Architecture matérielle des systèmes HPC
Processeurs multicoeurs et hiérarchie mémoire
Exemple de processeur contenant 24 cœurs et 03 niveaux de cache
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 9 / 39
Architecture matériel des systèmes HPC
Accélérateurs de calcul
Exemple d’Architecture NUMA hétérogène contenant deux processeurs et
une carte graphique
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 10 / 39
Architecture matérielle des systèmes HPC
Architectures à mémoire distribuée
Exemple d’Architecture à mémoire distribuée
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 11 / 39
Architecture matérielle des systèmes HPC
Interaction, Architectures à mémoire distribuée
Dans ce paradigme, les fils d’exécution communiquent uniquement en en-
voyant et en recevant des messages.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 12 / 39
Paradigmes et modèles de programmation
Parallélisme de données
Elle consiste à distribuer des données sur des fils d’exécution qui réalisent
tous une même opération.
Parallélisme de tâches
Le parallélisme de tâches consiste à diviser un calcul d’une application en
un sous-ensemble de calculs appelé tâches.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 13 / 39
Paradigmes et modèles de programmation
Parallélisme de données
Le partitionnement de données consiste à diviser les données d’une
application en sous ensemble de données plus petit appelé fragment.
Surdécomposition.
Dans beaucoup d’applications HPC, le partitionnement forme des
fragments contigus et de taille quasi homogène.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 14 / 39
Paradigmes et modèles de programmation
Parallélisme de tâches
Dépendance de contrôle entre deux tâches t1 et t2 ;
Dépendance de données entre t1 et t2.
On appelle Ordonnancement, le processus visant à affecter à chaque tâches
les ressources disponibles tout en respectant les dépendances entre les tâches.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 15 / 39
Paradigmes et modèles de programmation
Modèles de programmation parallèle : MPI
Le modèle de programmation MPI (Message Passing Interface) est une
norme de passage de messages définissant la syntaxe et la sémantique des
opérations de communication entre les fils d’exécution.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 16 / 39
Paradigmes et modèles de programmation
Modèles de programmation parallèle : Fork-Join
Les modèles Fork-Join consistent à diviser, à un instant donné, un fil d’exécution
en plusieurs. Les fils d’exécution sont ensuite fusionnés afin d’en reformer
un unique.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 17 / 39
Programmation par composition
Crise logicielle : Génie logiciel
De la programmation structurée aux modèles de composants
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 18 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Programmation structurée
Ce paradigme consiste à utiliser les structures de contrôle telles que les
boucles, les conditions et même les sous-routines.
Problème
Comment décomposer et organiser les routines d’une application
efficacement.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 19 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Programmation orientée
objet
Dans ce paradigme de programmation, une application est un ensemble
d’objet qui interagissent. Deux formes de relations entre les objets : Com-
position et Héritage.
Problème
La composition : les dépendances entre les objets ne peuvent être
déterminées que par une analyse souvent profonde et fastidieuse du code
source définissant les objets.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 20 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Modèle de composants
Un modèle de composants définit ce que sont les composants et par quel
moyen les composer. Un langage qui définit comment assembler les com-
posants est un langage d’assemblage.
Parmi certains modèles existants, certains séparent la phase de conception
de composants de la phase d’assemblage durant laquelle ils sont composés.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 21 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Notions importantes
La programmation par composition est une méthode de programma-
tion utilisant la composition comme un moyen d’améliorer la séparation des
préoccupations et la réutilisation des logiciels.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 22 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Notions importantes
Nous définissons une interface, comme une abstraction décrivant un point
d’interaction qui dispose des contraintes d’utilisations.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 23 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Modèle de composants
Les boites noires sont des composants déployables indépendamment.
Cette caractéristique favorise ainsi la séparation des préoccupations.
Les dépendances entre composants ne sont pas entièrement contrôlées
par leurs concepteurs, qui définissent uniquement des interfaces.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 24 / 39
Programmation par composition
De la programmation structurée aux modèles de composants : Notions importantes
La cohésion est une métrique mesurant la capacité d’un élément applicatif
à remplir une unique fonction logique.
Il est possible d’accroı̂tre la cohésion des modules applicatifs en séparant
les préoccupations issues d’une même applications.
Le couplage est une métrique mesurant l’interdépendance entre les éléments
applicatifs. Un couplage fort entre deux modules signifie que les modules
sont fortement liés ensemble.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 25 / 39
Programmation par composition
Formes de composition
Use-provide
Flux de données
Flux de travaux
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 26 / 39
Programmation par composition
Formes de composition : Use-provide
La composition use-provide est l’une des formes de composition les plus
récurrentes dans les modèles de composants. Elle permet aux composants
d’exposer des interfaces appelées port provide fournissant des services et des
interfaces nommées port use qui requièrent des services fournis par d’autre
composants. Les ports use et provide peuvent être typés.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 27 / 39
Programmation par composition
Formes de composition : Flux de données
Dans les modèles de composants utilisant cette approche, des interfaces de
sorties produisent des flux de données et des interfaces d’entrée consomment
un flux de données. Le port d’entrée et de sortie peuvent être typé. Le type
des ports inclut généralement un type structuré de données.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 28 / 39
Programmation par composition
Formes de composition : Flux de travaux
Les modèles de composants basés sur les flux de travaux incluent les ap-
proches basées sur les flux de données et les étendent afin d’y intégrer des
connecteurs et des structures de contrôle telles que des conditions ou des
boucles. Ces modèles permettent généralement aux composant d’exposer
des interfaces d’entrée et de sortie. Certains modèles dotent les composants
d’interface de contrôle permettant de déclencher des traitements sur un
autre composant sans transmettre les données.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 29 / 39
Programmation parallèle par composition
Formes de composition de codes parallèles
L’approche la plus simple pour composer des codes parallèles dans les
modèles de composants consiste à intégrer le parallélisme dans l’implémentation
des composants, sans le rendre visible dans leurs interfaces. Cela permet de
remplacer facilement une implémentation parallèle par une autre, de manière
transparente.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 30 / 39
Programmation parallèle par composition
Formes de composition de codes parallèles : Use-provide parallèle
La composition use-provide dans un contexte parallèle peut être réalisée
en appliquant cette méthode sur chaque élément parallèle individuellement.
Cependant, bien que cette approche soit aussi expressive qu’en contexte
séquentiel, elle limite la composition de codes parallèles, surtout lorsque ces
codes utilisent des niveaux de parallélisme différents ou interdépendants, ce
qui est courant en HPC.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 31 / 39
Programmation parallèle par composition
Formes de composition de codes parallèles : Flux de données et de travaux
FlowVR est un exemple de modèle de composants à base d’interfaces de flux
de données qui offrent des mécanismes pour composer des codes parallèles.
1 Put : envoie d’un message sur un port de sortie ;
2 Get : récupération du message le plus ancien sur un port de sortie ;
3 Wait : Attente des données sur un port d’entrée.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 32 / 39
Programmation parallèle par composition
Formes de composition de codes parallèles : Partage de données
Les modèles de composants supportant le partage de données permettent
de créer des interfaces pour fournir et accéder à des données partagées,
exprimant ainsi la dépendance entre composants. Contrairement aux ap-
proches de flux de données, où plusieurs données transitent, une donnée
unique est partagée simultanément par plusieurs composants, ce qui pose
des problèmes d’accès concurrent. Les interfaces des modèles de com-
posants incluent donc des mécanismes pour contrôler cet accès concurrent.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 33 / 39
Exemple de modèle de composants
Common Component Architecture (CCA)
Diagramme du modèle de conception Use-Provide par CCA
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 34 / 39
Exemple de modèle de composants
GridCCM(CORBA Component Model)
Aperçu de l’architecture CCM
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 35 / 39
Exemple de modèle de composants
GCM (Grid Component Model)
GCM, extension de Fractal, propose des interfaces dérivées du use-provide
séquentiel pour diffuser et rassembler des appels de méthodes. Un com-
posite parallèle peut inclure des instances de composants séquentiels, et les
interfaces de diffusion transforment un appel de méthode unique en plusieurs
appels appliqués aux ports des instances après avoir traversé la membrane
du composite.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 36 / 39
Low Level component : Un modèle de composants
minimaliste pour le HPC (L²C)
Introduction
L²C est à la fois une extension du processus de compilation modulaire
et un modèle de composants de bas niveau proche du système.
Chaque composant est compilé en une bibliothèque, puis instancié et
connecté à l’exécution via un fichier de description d’assemblage.
L2C permet une composition à travers :
l’appel de procédures natives C++,
l’appel de procédure à distance via CORBA,
le passage de messages via MPI.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 37 / 39
Low Level component : Un modèle de composants
minimaliste pour le HPC (L²C)
Caractéristiques
Les composants L²C fournissent des services via des ports provide et
en utilisent via des ports use.
La communication entre les composants se fait par l’appel de
procédures sur ces ports.
Services déclarés en tant que classe abstraite C++ ou interface
CORBA.
Ports MPI permettent de partager des communicateurs entre
instances.
Les composants sont des classes C++ avec annotations pour nom,
ports, propriétés.
Assemblage décrit par un fichier XML (LAD) qui spécifie les
instances, leur configuration, connexions, et processus associés.
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 38 / 39
Conclusion
CCA, GridCCM, GCM, et L²C
Une meilleure modularité, réutilisation, et flexibilité, essentielles dans
le développement de logiciels pour des systèmes de calcul à grande
échelle
Comment améliorer les mécanismes de communication et
d’interopérabilité dans les modèles de composants pour le HPC afin
de faciliter la composition dynamique tout en optimisant les
performances réseaux et réduisant la latence ?
NGAPMEN Ulrich Bolan (UDS) Modèles de composants October 23, 2024 39 / 39