PaCO++ André Ribes Réunion Hydrogrid Rennes 15/09/03
Plan Contexte Problèmes CORBA PaCO++ Conclusion / perspectives
Contexte : couplage de code Thermal Optics Dynamics Satellite design Structural Mechanics
Caractéristiques de ce type d’application Différents codes s’échangent des données Codes parallèles Dynamique Évolution des codes Différents tests Gourmandes Mémoire Puissance de calcul
La grille : un environnement d’exécution Homogeneous cluster SAN Homogeneous cluster LAN WAN Supercomputer Visualisation
Problèmes de la grille Différents types de réseaux Différents types de machines Des ressources matérielles différentes entre deux exécutions Il faut que le logiciel puisse s’adapter C’est notre problème ;-) !
Problèmes des applications de couplage Différentes équipes Différents : Langages Bibliothèques de communications ( MPI, PVM,...) Applications distribuées et parallèles Dynamicité Complexe Besoin : Exprimer clairement les intéractions Meilleure maintenance
Notre objectif Fournir des logiciels permettant de concevoir et d’exécuter ces applications dans de bonnes conditions Projet PARIS : PadicoTM : pb liés à la dynamicité de la grille, à l’hétérogénéité des réseaux et à la cohabitation des middlewares PaCO++, GridCCM : modèle de programmation
Que doit fournir l’exécutif Support de différentes machines et réseaux Contrainte venant de la grille Support de différents langages Haute performance Support de codes parallèles Support de codes distribués
CORBA Modèle permettant de mettre en oeuvre des applications distribuées Version 2 : Objet Version 3 : Composant Pas de support du parallèlisme PaCO++ : Objet GridCCM : Composant
interface MatrixOperations { const long SIZE = 100; typedef double Vector[ SIZE ]; typedef double Matrix[ SIZE ][ SIZE ]; void multiply(in Matrix A, in Vector B, out Vector C ); }; Server Client IDL Stub Object invocation Object Request Broker (ORB) with IIOP IDL Compiler POA IDL Skeleton Object Implementation CORBA v2 Concept d’objets distribués (OMG) Programmation orienté objet Invocation de méthode distante Indépendance: matériel, OS et langage de programmation Indépendance des vendeurs (interopérabilité)
CORBA interface objet_distant { void exemple(in Matrice mat); }; Description de l’interface // Récupération du serveur objet_distant * serveur =... // Construction des données... Matrice_var ma_matrice =... // Appel d’une méthode distante serveur->exemple(ma_matrice); Code d’appel chez le client
CORBA Envoi de la matrice CORBA : Applicatif : Client Serveur dynamique Optique
PaCO++ : scénario 1 Redistribution des données Client Objet Parallèle
PaCO++ : scénario 2 Redistribution des données Objet Parallèle
Les apports de PaCO++ Flux de communications parallèles Objet Parallèle
Les apports de PaCO++ Exprimer la redistribution des données Sous forme de plug-in ( non fourni ;-) !) Objet Parallèle
Exemple avec PaCO++ interface objet_distant { void exemple(in Matrice mat); }; Description de l’interface interface objet_distant methode exemple : parallèle argument mat : distribué Description du parallèlisme
Génération du code fichier de descriptionUtilisation.idl Générateur CORBA souches CORBA compilateur PaCO++ UtilisationPaCO.idlcode PaCO++
Code coté client // Récupération du serveur objet_distant * serveur = // Creation de la bibliothèque de distribution serveur->paco_register(ma_bibliothèque_de_redistribution);... // Construction des données... Matrice_var ma_matrice =... // Description des données PaCO::PacoInitData_t data;... // Appel d’une méthode distante serveur->exemple(ma_matrice); Code spécifique à PaCO++
Incidence dans les codes de simulations Les données transmises doivent-être décrites en IDL ! Il faut pouvoir décrire la distribution des données dans les codes ! Il vous faut écrire la bibliothèque de redistribution ! Les intéractions sont réalisées à l’aide d’appel de méthode !
Composant ? Boite noire Interfaces spécifiées Unité logique indépendante Unité de déploiement Application Assemblage de composants Composant Facette (interface fournie) Réceptacle (interface utilisée) Attributs Producteur d’évènements Composant CORBA Consommateur d’évènements
Exemple component C1 : uses I1 component C2 : provides I1 C1 C2 I1 connect_I1(C1,C2) C1 C2 I1
Les composants logiciels Programmation par composants Réutilisabilité du code Modularité Unité de déploiement indépendante Industrie du logiciel Gestion des hétérogénéités CORBA, EJB, COM+ Déploiement des codes sur une architecture distribuée Modèle de composant logiciel CORBA
GridCCM Version parallèle des composants CORBA Utilisation du code et de l’expérience de PaCO++
Prototype de PaCO++ Version Beta Parsers Générateurs Supports de différents ORBs Distribution bloc-cyclique de vecteur En cours Nouvelle interface pour les bibliothèques de redistributions des données
Performances
Conclusion Applications complexes Modèle de programmation adapté PaCO++ : extension de CORBA pour le parallèlisme Prototype existant ACI Grid EPSN
Perspectives Améliorations de la gestion des données distribuées ARC RedGrid Passage au composant avec GridCCM En réutilisant PaCO++