La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Les Objets CORBA parallèles Travaux pratiques Lundi 22 mai 2000 ARC « Couplage » Christophe René (IRISA/IFSIC) Eric Lemoine (INSA Lyon)

Présentations similaires


Présentation au sujet: "Les Objets CORBA parallèles Travaux pratiques Lundi 22 mai 2000 ARC « Couplage » Christophe René (IRISA/IFSIC) Eric Lemoine (INSA Lyon)"— Transcription de la présentation:

1 Les Objets CORBA parallèles Travaux pratiques Lundi 22 mai 2000 ARC « Couplage » Christophe René (IRISA/IFSIC) Eric Lemoine (INSA Lyon)

2 Sommaire Exemple dutilisation des objets CORBA parallèles Résolution de léquation de la chaleur Encapsulation dun programme MPI Multiplication de deux matrices (algorithme de Fox) Démonstration dune application de couplage Simulation des interactions électromagnétiques

3 Avant de commencer utilisateur1utilisateur2 utilisateur3utilisateur4utilisateur5 utilisateur6utilisateur7utilisateur8 utilisateur9 Répertoire de travail dépend de votre poste Connexion au cluster xon paraski

4 Résolution de l équation de la chaleur Décomposition de domaine Utilisation de deux objets parallèles Exemple dutilisation des objets CORBA parallèles Objet CORBA parallèle serverC ORB Objet CORBA parallèle serverR Objet CORBA standard client_heat objet 1 objet 2 objet 1

5 Interface IDL des objets #include "Common.idl" interface[*] HeatEquationColDistrib { void ComputeColumnDistrib( inout dist[ * ][ BLOCK, 1 ] Matrix m ); void stop(); }; const long N = 10; typedef double Matrix[ N ][ N ]; #include "Common.idl" interface[*] HeatEquationRowDistrib { void ComputeRowDistrib( inout dist[ BLOCK ][ * ] Matrix m ); void stop(); }; Common.idl HeatEquationColDistrib.idl HeatEquationRowDistrib.idl

6 Script dactivation Fonctionnant du script Activation du service de nommage nsd... Activation de lobjet CORBA parallèle serverR mpirun./serverR... Activation de lobjet CORBA parallèle serverC mpirun./serverC... Activation du client séquentiel./client_heat... Localisation de l exemple ~/utilisateur?/HeatEquation Utilisation du script./run.sh serverC, serverR: 2 objs./run.sh 3 serverC, serverR: 3 objs./run.sh 3 2 serverC: 3 objs; serverR: 2 objs./run.sh 2 3 serverC: 2 objs; serverR: 3 objs

7 Fonctionnant interne des talons (stubs) et des squelettes (skeletons)

8 Programme original Multiplication de deux matrices en utilisant lalgorithme de Fox Mode de distribution de la matrice = BLOCK, BLOCK Nombre de processeurs = un carré parfait Code MPI lisant les données dans des fichiers Utilisation: (répertoire ~/utilisateur?/Encapsulation)./run_mpi.sh Encapsulation de code

9 Adaptation du code MPI int main( int argc, char* argv[] ) { /*... */ MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &id ); /*... */ MPI_Send(... ); MPI_Recv(... ); /*... */ MPI_Finalize(); } int main_mpi_pgm( int argc, char* argv[] ) { /*... */ /* MPI_Init( &argc, &argv ); */ MPI_Comm_rank( MPI_COMM_WORLD, &id ); /*... */ MPI_Send(... ); MPI_Recv(... ); /*... */ /* MPI_Finalize(); */ } fox.c (code original) newfox.c (code modifié)

10 Spécification et mise en œuvre du wrapper typedef sequence arg_type; interface[ n ^ 2 ] Wrapper { void compute( in string directory, in arg_type arguments ); void stop(); }; Wrapper.idl void Wrapper_impl::compute( const char* directory, const arg_type_DArray& arguments ) { int argc = arguments.length() + 1; char** argv = new (char *) [ argc ]; argv[ 0 ] = strdup( newfox ); /* Application name */ for( int i0 = 1; i0 < argc; ++i0 ) argv[ i0 ] = strdup( arguments[ i0 - 1 ] ); chdir( directory ); main_mpi_pgm( argc, argv ); for( int i1 = 0; i1 < argc; ++i1 ) free( argv[ i1 ] ); delete [] argv; } Wrapper_impl.cc

11 int main( int argc, char* argv[] ) { /*... */ orb = ORB_init( argc, argv ); /*... */ objc = rootctx->resolve_collection( name ); /*... */ arg_type arguments; arguments.length( argc - 4 ); for( int i = 1; i < (argc - 4 ); ++i ) arguments[ i ] = strdup( argv[ i + 4 ] ); pos->compute( working_directory, arguments ); /*... */ } Mise en œuvre du serveur et du client Client.cc int main( int argc, char* argv[] ) { /*... */ PaCO_DL_init( &argc, &argv ); /*... */ orb = ORB_init( argc, argv ); /*... */ server = new Wrapper_impl(); /*... */ rootctx->join_collection( name, server ); /*... */ orb->run(); /*... */ PaCO_DL_exit(); return 0; } Server.cc

12 Script dactivation Fonctionnant du script Activation du service de nommage nsd... Activation de lobjet CORBA parallèle mpirun./server_mtx... Activation du client séquentiel./client_mtx... Localisation de l exemple ~/utilisateur?/Encapsulation Utilisation du script./run_paco.sh server_mtx: 4 objs./run_paco.sh 4 server_mtx: 4 objs

13 Questions ?

14 Démonstration dune application de couplage


Télécharger ppt "Les Objets CORBA parallèles Travaux pratiques Lundi 22 mai 2000 ARC « Couplage » Christophe René (IRISA/IFSIC) Eric Lemoine (INSA Lyon)"

Présentations similaires


Annonces Google