diff --git a/trunk/paradiseo-peo/src/core/communicable.cpp b/trunk/paradiseo-peo/src/core/communicable.cpp index 609ceb0d4..6ca4fa80f 100644 --- a/trunk/paradiseo-peo/src/core/communicable.cpp +++ b/trunk/paradiseo-peo/src/core/communicable.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -46,8 +46,7 @@ static std :: map comm_to_key; /* Map of regist unsigned Communicable :: num_comm = 0; -Communicable :: Communicable () -{ +Communicable :: Communicable () { comm_to_key [this] = key = ++ num_comm; key_to_comm.push_back (this); @@ -55,48 +54,41 @@ Communicable :: Communicable () sem_init (& sem_stop, 0, 0); } -Communicable :: ~ Communicable () -{ +Communicable :: ~ Communicable () { + } -COMM_ID Communicable :: getKey () -{ +COMM_ID Communicable :: getKey () { return key; } -Communicable * getCommunicable (COMM_ID __key) -{ +Communicable * getCommunicable (COMM_ID __key) { assert (__key < key_to_comm.size ()); - return key_to_comm [__key]; + return key_to_comm [__key]; } -COMM_ID getKey (const Communicable * __comm) -{ - +COMM_ID getKey (const Communicable * __comm) { + return comm_to_key [__comm]; } -void Communicable :: lock () - { +void Communicable :: lock () { - sem_wait (& sem_lock); - } + sem_wait (& sem_lock); +} -void Communicable :: unlock () -{ +void Communicable :: unlock () { sem_post (& sem_lock); } -void Communicable :: stop () -{ +void Communicable :: stop () { sem_wait (& sem_stop); } -void Communicable :: resume () -{ +void Communicable :: resume () { sem_post (& sem_stop); } diff --git a/trunk/paradiseo-peo/src/core/communicable.h b/trunk/paradiseo-peo/src/core/communicable.h index 24b315ec6..11348707e 100644 --- a/trunk/paradiseo-peo/src/core/communicable.h +++ b/trunk/paradiseo-peo/src/core/communicable.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,35 +41,34 @@ typedef unsigned COMM_ID; -class Communicable - { +class Communicable { - public : +public : - Communicable (); + Communicable (); + + virtual ~ Communicable (); - virtual ~ Communicable (); + COMM_ID getKey (); - COMM_ID getKey (); + void lock (); /* It suspends the current process if the semaphore is locked */ + void unlock (); /* It unlocks the shared semaphore */ - void lock (); /* It suspends the current process if the semaphore is locked */ - void unlock (); /* It unlocks the shared semaphore */ + void stop (); /* It suspends the current process */ + void resume (); /* It resumes ___________ */ + +protected : - void stop (); /* It suspends the current process */ - void resume (); /* It resumes ___________ */ + COMM_ID key; - protected : + sem_t sem_lock; + + sem_t sem_stop; - COMM_ID key; + static unsigned num_comm; +}; - sem_t sem_lock; - - sem_t sem_stop; - - static unsigned num_comm; - }; - -extern Communicable * getCommunicable (COMM_ID __key); +extern Communicable * getCommunicable (COMM_ID __key); //extern COMM_ID getKey (const Communicable * __comm); diff --git a/trunk/paradiseo-peo/src/core/cooperative.h b/trunk/paradiseo-peo/src/core/cooperative.h index e8d9698f7..573c06805 100644 --- a/trunk/paradiseo-peo/src/core/cooperative.h +++ b/trunk/paradiseo-peo/src/core/cooperative.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -42,29 +42,28 @@ typedef unsigned COOP_ID; -class Cooperative : public Communicable - { +class Cooperative : public Communicable { - public : +public : - Runner * getOwner (); + Runner * getOwner (); - void setOwner (Runner & __runner); + void setOwner (Runner & __runner); - virtual void pack () = 0; + virtual void pack () = 0; + + virtual void unpack () = 0; - virtual void unpack () = 0; + void send (Cooperative * __coop); - void send (Cooperative * __coop); + virtual void notifySending (); - virtual void notifySending (); +private : - private : + Runner * owner; - Runner * owner; +}; - }; - -extern Cooperative * getCooperative (COOP_ID __key); +extern Cooperative * getCooperative (COOP_ID __key); #endif diff --git a/trunk/paradiseo-peo/src/core/eoPop_comm.h b/trunk/paradiseo-peo/src/core/eoPop_mesg.h similarity index 92% rename from trunk/paradiseo-peo/src/core/eoPop_comm.h rename to trunk/paradiseo-peo/src/core/eoPop_mesg.h index 322d2cf03..c0b6cc009 100644 --- a/trunk/paradiseo-peo/src/core/eoPop_comm.h +++ b/trunk/paradiseo-peo/src/core/eoPop_mesg.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -34,23 +34,21 @@ * */ -#ifndef __eoPop_comm_h -#define __eoPop_comm_h +#ifndef __eoPop_mesg_h +#define __eoPop_mesg_h #include #include "messaging.h" -template void pack (const eoPop & __pop) -{ +template void pack (const eoPop & __pop) { pack ((unsigned) __pop.size ()); for (unsigned i = 0; i < __pop.size (); i ++) pack (__pop [i]); } -template void unpack (eoPop & __pop) -{ +template void unpack (eoPop & __pop) { unsigned n; diff --git a/trunk/paradiseo-peo/src/core/eoVector_comm.h b/trunk/paradiseo-peo/src/core/eoVector_mesg.h similarity index 80% rename from trunk/paradiseo-peo/src/core/eoVector_comm.h rename to trunk/paradiseo-peo/src/core/eoVector_mesg.h index d9cb90882..c6de15d53 100644 --- a/trunk/paradiseo-peo/src/core/eoVector_comm.h +++ b/trunk/paradiseo-peo/src/core/eoVector_mesg.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -34,43 +34,28 @@ * */ -#ifndef __eoVector_comm_h -#define __eoVector_comm_h +#ifndef __eoVector_mesg_h +#define __eoVector_mesg_h #include #include "messaging.h" -template void pack (const eoVector & __v) -{ +template void pack (const eoVector & __v) { - - if ( !__v.invalid() ) - { - pack( (unsigned int) 1 ); - pack (__v.fitness ()) ; - } - else - pack( (unsigned int) 0 ); + pack (__v.fitness ()) ; unsigned len = __v.size (); pack (len); for (unsigned i = 0 ; i < len; i ++) - pack (__v [i]); + pack (__v [i]); } -template void unpack (eoVector & __v) -{ +template void unpack (eoVector & __v) { + + F fit; + unpack (fit); + __v.fitness (fit); - F fit; - unsigned int vfit; - unpack( vfit ); - if ( vfit ) - { - unpack (fit); - __v.fitness (fit); - } - else - __v.invalidate(); unsigned len; unpack (len); __v.resize (len); @@ -78,23 +63,21 @@ template void unpack (eoVector & __v) unpack (__v [i]); } -template void pack (const eoVectorParticle & __v) -{ +template void pack (const eoVectorParticle & __v) { pack (__v.fitness ()) ; pack (__v.best()); unsigned len = __v.size (); pack (len); for (unsigned i = 0 ; i < len; i ++) - pack (__v [i]); + pack (__v [i]); for (unsigned i = 0 ; i < len; i ++) - pack (__v.bestPositions[i]); + pack (__v.bestPositions[i]); for (unsigned i = 0 ; i < len; i ++) - pack (__v.velocities[i]); + pack (__v.velocities[i]); } -template void unpack (eoVectorParticle & __v) -{ +template void unpack (eoVectorParticle & __v) { F fit; unpack(fit); @@ -105,11 +88,11 @@ template void unpack (eoVectorParticle & _ unpack (len); __v.resize (len); for (unsigned i = 0 ; i < len; i ++) - unpack (__v [i]); + unpack (__v [i]); for (unsigned i = 0 ; i < len; i ++) - unpack (__v.bestPositions[i]); + unpack (__v.bestPositions[i]); for (unsigned i = 0 ; i < len; i ++) - unpack (__v.velocities[i]); + unpack (__v.velocities[i]); } #endif diff --git a/trunk/paradiseo-peo/src/core/messaging.h b/trunk/paradiseo-peo/src/core/messaging.h index 1087584de..4b9d0b3d9 100644 --- a/trunk/paradiseo-peo/src/core/messaging.h +++ b/trunk/paradiseo-peo/src/core/messaging.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -40,46 +40,44 @@ #include /* Char */ -extern void pack (const char & __c); +extern void pack (const char & __c); /* Float */ -extern void pack (const float & __f, int __nitem = 1); +extern void pack (const float & __f, int __nitem = 1); /* Double */ -extern void pack (const double & __d, int __nitem = 1); +extern void pack (const double & __d, int __nitem = 1); /* Integer */ -extern void pack (const int & __i, int __nitem = 1); +extern void pack (const int & __i, int __nitem = 1); /* Unsigned int. */ -extern void pack (const unsigned int & __ui, int __nitem = 1); +extern void pack (const unsigned int & __ui, int __nitem = 1); /* Short int. */ -extern void pack (const short & __sh, int __nitem = 1); +extern void pack (const short & __sh, int __nitem = 1); /* Unsigned short */ extern void pack (const unsigned short & __ush, int __nitem = 1); /* Long */ -extern void pack (const long & __l, int __nitem = 1); +extern void pack (const long & __l, int __nitem = 1); /* Unsigned long */ -extern void pack (const unsigned long & __ul, int __nitem = 1); +extern void pack (const unsigned long & __ul, int __nitem = 1); /* String */ -extern void pack (const char * __str); +extern void pack (const char * __str); /* Pointer */ -template void pack (const T * __ptr) -{ - - pack ((unsigned long) __ptr); +template void pack (const T * __ptr) { + + pack ((unsigned long) __ptr); } /* Pair */ -template void pack (const std :: pair & __pair) -{ - +template void pack (const std :: pair & __pair) { + pack (__pair.first); pack (__pair.second); } @@ -88,48 +86,46 @@ template void pack (const std :: pair & __pair) // /* Char */ -extern void unpack (char & __c); +extern void unpack (char & __c); /* Float */ -extern void unpack (float & __f, int __nitem = 1); +extern void unpack (float & __f, int __nitem = 1); /* Double */ -extern void unpack (double & __d, int __nitem = 1); +extern void unpack (double & __d, int __nitem = 1); /* Integer */ -extern void unpack (int & __i, int __nitem = 1); +extern void unpack (int & __i, int __nitem = 1); /* Unsigned int. */ -extern void unpack (unsigned int & __ui, int __nitem = 1); +extern void unpack (unsigned int & __ui, int __nitem = 1); /* Short int. */ -extern void unpack (short & __sh, int __nitem = 1); +extern void unpack (short & __sh, int __nitem = 1); /* Unsigned short */ extern void unpack (unsigned short & __ush, int __nitem = 1); /* Long */ -extern void unpack (long & __l, int __nitem = 1); +extern void unpack (long & __l, int __nitem = 1); /* Unsigned long */ -extern void unpack (unsigned long & __ul, int __nitem = 1); +extern void unpack (unsigned long & __ul, int __nitem = 1); /* String */ -extern void unpack (char * __str); +extern void unpack (char * __str); /* Pointer */ -template void unpack (T * & __ptr) -{ - +template void unpack (T * & __ptr) { + unsigned long p; unpack (p); __ptr = (T *) p; } /* Pair */ -template void unpack (std :: pair & __pair) -{ - +template void unpack (std :: pair & __pair) { + unpack (__pair.first); unpack (__pair.second); } diff --git a/trunk/paradiseo-peo/src/core/peo_debug.cpp b/trunk/paradiseo-peo/src/core/peo_debug.cpp index e5aa1bff1..973493aa7 100644 --- a/trunk/paradiseo-peo/src/core/peo_debug.cpp +++ b/trunk/paradiseo-peo/src/core/peo_debug.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -56,8 +56,7 @@ static char host [MAX_BUFF_SIZE]; std :: vector files; -void setDebugMode (bool __dbg) -{ +void setDebugMode (bool __dbg) { debug = __dbg; gethostname (host, MAX_BUFF_SIZE); @@ -65,9 +64,8 @@ void setDebugMode (bool __dbg) extern int getNodeRank (); -void initDebugging () -{ - +void initDebugging () { + mkdir (DEBUG_PATH, S_IRWXU); // files.push_back (stdout); char buff [MAX_BUFF_SIZE]; @@ -75,37 +73,33 @@ void initDebugging () files.push_back (fopen (buff, "w")); } -void endDebugging () -{ +void endDebugging () { for (unsigned i = 0; i < files.size (); i ++) if (files [i] != stdout) fclose (files [i]); } -void printDebugMessage (const char * __mess) -{ +void printDebugMessage (const char * __mess) { + return; + if (debug) { - if (debug) - { + char buff [MAX_BUFF_SIZE]; + time_t t = time (0); - char buff [MAX_BUFF_SIZE]; - time_t t = time (0); + /* Date */ + sprintf (buff, "[%s][%s: ", host, ctime (& t)); + * strchr (buff, '\n') = ']'; + for (unsigned i = 0; i < files.size (); i ++) + fprintf (files [i], buff); - /* Date */ - sprintf (buff, "[%s][%s: ", host, ctime (& t)); - * strchr (buff, '\n') = ']'; - for (unsigned i = 0; i < files.size (); i ++) - fprintf (files [i], buff); - - /* Message */ - sprintf (buff, "%s", __mess); - - for (unsigned i = 0; i < files.size (); i ++) - { - fputs (buff, files [i]); - fputs ("\n", files [i]); - fflush (files [i]); - } + /* Message */ + sprintf (buff, "%s", __mess); + + for (unsigned i = 0; i < files.size (); i ++) { + fputs (buff, files [i]); + fputs ("\n", files [i]); + fflush (files [i]); } + } } diff --git a/trunk/paradiseo-peo/src/core/peo_debug.h b/trunk/paradiseo-peo/src/core/peo_debug.h index 8c72f860b..d00b5e9c7 100644 --- a/trunk/paradiseo-peo/src/core/peo_debug.h +++ b/trunk/paradiseo-peo/src/core/peo_debug.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 diff --git a/trunk/paradiseo-peo/src/core/peo_fin.cpp b/trunk/paradiseo-peo/src/core/peo_fin.cpp index 82b19559a..d4e2e5a4f 100644 --- a/trunk/paradiseo-peo/src/core/peo_fin.cpp +++ b/trunk/paradiseo-peo/src/core/peo_fin.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -39,8 +39,8 @@ #include "runner.h" #include "rmc.h" -void peo :: finalize () -{ + +void peo :: finalize () { printDebugMessage ("waiting for the termination of all threads"); diff --git a/trunk/paradiseo-peo/src/core/peo_fin.h b/trunk/paradiseo-peo/src/core/peo_fin.h index de34ee2dd..9cdaf2bf8 100644 --- a/trunk/paradiseo-peo/src/core/peo_fin.h +++ b/trunk/paradiseo-peo/src/core/peo_fin.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,9 +37,8 @@ #ifndef __peo_finalize_h #define __peo_finalize_h -namespace peo - { - +namespace peo { + extern void finalize (); } diff --git a/trunk/paradiseo-peo/src/core/peo_init.cpp b/trunk/paradiseo-peo/src/core/peo_init.cpp index 130e398a3..301090a34 100644 --- a/trunk/paradiseo-peo/src/core/peo_init.cpp +++ b/trunk/paradiseo-peo/src/core/peo_init.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,26 +41,24 @@ #include "peo_debug.h" #include "rmc.h" -namespace peo - { +namespace peo { int * argc; - + char * * * argv; - void init (int & __argc, char * * & __argv) - { + void init (int & __argc, char * * & __argv) { argc = & __argc; - + argv = & __argv; - + /* Initializing the the Resource Management and Communication */ initRMC (__argc, __argv); - /* Loading the common parameters */ + /* Loading the common parameters */ loadParameters (__argc, __argv); - + /* */ initDebugging (); } diff --git a/trunk/paradiseo-peo/src/core/peo_init.h b/trunk/paradiseo-peo/src/core/peo_init.h index 0e39ad506..b578cb501 100644 --- a/trunk/paradiseo-peo/src/core/peo_init.h +++ b/trunk/paradiseo-peo/src/core/peo_init.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,13 +37,12 @@ #ifndef __peo_init_h #define __peo_init_h -namespace peo - { +namespace peo { extern int * argc; - + extern char * * * argv; - + extern void init (int & __argc, char * * & __argv); } diff --git a/trunk/paradiseo-peo/src/core/peo_param.cpp b/trunk/paradiseo-peo/src/core/peo_param.cpp index 3d5af684d..a6023430e 100644 --- a/trunk/paradiseo-peo/src/core/peo_param.cpp +++ b/trunk/paradiseo-peo/src/core/peo_param.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,8 +41,7 @@ -void peo :: loadParameters (int & __argc, char * * & __argv) -{ +void peo :: loadParameters (int & __argc, char * * & __argv) { eoParser parser (__argc, __argv); diff --git a/trunk/paradiseo-peo/src/core/peo_param.h b/trunk/paradiseo-peo/src/core/peo_param.h index 1860dce90..fd00bfc28 100644 --- a/trunk/paradiseo-peo/src/core/peo_param.h +++ b/trunk/paradiseo-peo/src/core/peo_param.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,9 +37,8 @@ #ifndef __peo_param_h #define __peo_param_h -namespace peo - { - +namespace peo { + extern void loadParameters (int & __argc, char * * & __argv); } diff --git a/trunk/paradiseo-peo/src/core/peo_run.cpp b/trunk/paradiseo-peo/src/core/peo_run.cpp index 6b91f7dbe..b379146af 100644 --- a/trunk/paradiseo-peo/src/core/peo_run.cpp +++ b/trunk/paradiseo-peo/src/core/peo_run.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -39,9 +39,8 @@ #include "rmc.h" #include "runner.h" -void peo :: run () -{ - +void peo :: run () { + startRunners (); runRMC (); diff --git a/trunk/paradiseo-peo/src/core/peo_run.h b/trunk/paradiseo-peo/src/core/peo_run.h index 5eaf5483a..e4bcc55c6 100644 --- a/trunk/paradiseo-peo/src/core/peo_run.h +++ b/trunk/paradiseo-peo/src/core/peo_run.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,9 +37,8 @@ #ifndef __peo_run_h #define __peo_run_h -namespace peo - { - +namespace peo { + extern void run (); } diff --git a/trunk/paradiseo-peo/src/core/reac_thread.cpp b/trunk/paradiseo-peo/src/core/reac_thread.cpp index 8ae675e15..d771a8ad4 100644 --- a/trunk/paradiseo-peo/src/core/reac_thread.cpp +++ b/trunk/paradiseo-peo/src/core/reac_thread.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -40,29 +40,25 @@ static bool the_end = false; static std :: vector reac_threads; -ReactiveThread :: ReactiveThread () -{ +ReactiveThread :: ReactiveThread () { reac_threads.push_back (this); sem_init (& sem, 0, 0); } -void ReactiveThread :: sleep () -{ +void ReactiveThread :: sleep () { - sem_wait (& sem); + sem_wait (& sem); } -void ReactiveThread :: wakeUp () -{ +void ReactiveThread :: wakeUp () { - sem_post (& sem); + sem_post (& sem); } -void stopReactiveThreads () -{ +void stopReactiveThreads () { the_end = true; for (unsigned i = 0; i < reac_threads.size (); i ++) - reac_threads [i] -> wakeUp (); + reac_threads [i] -> wakeUp (); } diff --git a/trunk/paradiseo-peo/src/core/reac_thread.h b/trunk/paradiseo-peo/src/core/reac_thread.h index f9f132f02..b3cd71912 100644 --- a/trunk/paradiseo-peo/src/core/reac_thread.h +++ b/trunk/paradiseo-peo/src/core/reac_thread.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,23 +41,22 @@ #include "thread.h" -class ReactiveThread : public Thread - { +class ReactiveThread : public Thread { + +public: - public: + /* Ctor */ + ReactiveThread (); - /* Ctor */ - ReactiveThread (); + void sleep (); + + void wakeUp (); + +private: - void sleep (); - - void wakeUp (); - - private: - - sem_t sem; - - }; + sem_t sem; + +}; extern void stopReactiveThreads (); diff --git a/trunk/paradiseo-peo/src/core/ring_topo.cpp b/trunk/paradiseo-peo/src/core/ring_topo.cpp index dfdbf571c..5dbf9933d 100644 --- a/trunk/paradiseo-peo/src/core/ring_topo.cpp +++ b/trunk/paradiseo-peo/src/core/ring_topo.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,19 +37,17 @@ #include "ring_topo.h" void RingTopology :: setNeighbors (Cooperative * __mig, - std :: vector & __from, - std :: vector & __to) -{ + std :: vector & __from, + std :: vector & __to) { __from.clear () ; __to.clear () ; - int len = mig.size () ; - - for (int i = 0 ; i < len ; i ++) - if (mig [i] == __mig) - { - __from.push_back (mig [(i - 1 + len) % len]) ; - __to.push_back (mig [(i + 1) % len]) ; - break; + int len = mig.size () ; + + for (int i = 0 ; i < len ; i ++) + if (mig [i] == __mig) { + __from.push_back (mig [(i - 1 + len) % len]) ; + __to.push_back (mig [(i + 1) % len]) ; + break; } } diff --git a/trunk/paradiseo-peo/src/core/ring_topo.h b/trunk/paradiseo-peo/src/core/ring_topo.h index b1715a99b..40d7405c6 100644 --- a/trunk/paradiseo-peo/src/core/ring_topo.h +++ b/trunk/paradiseo-peo/src/core/ring_topo.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -39,15 +39,14 @@ #include "topology.h" -class RingTopology : public Topology - { - - public : - - void setNeighbors (Cooperative * __mig, - std :: vector & __from, - std :: vector & __to); - - }; +class RingTopology : public Topology { + +public : + + void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to); + +}; #endif diff --git a/trunk/paradiseo-peo/src/core/rmc.h b/trunk/paradiseo-peo/src/core/rmc.h index be2f18e2e..7efb1bac3 100644 --- a/trunk/paradiseo-peo/src/core/rmc.h +++ b/trunk/paradiseo-peo/src/core/rmc.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -39,7 +39,7 @@ extern void initRMC (int & __argc, char * * & __argv); -extern void runRMC (); /* Resource Management and Communication */ +extern void runRMC (); /* Resource Management and Communication */ extern void finalizeRMC (); diff --git a/trunk/paradiseo-peo/src/core/runner.cpp b/trunk/paradiseo-peo/src/core/runner.cpp index c8c5ac36a..827d20f85 100644 --- a/trunk/paradiseo-peo/src/core/runner.cpp +++ b/trunk/paradiseo-peo/src/core/runner.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,104 +41,163 @@ #include "peo_debug.h" #include "messaging.h" -static unsigned num_act = 0; /* Number of active runners */ +#include "../rmc/mpi/mess.h" +#include "../rmc/mpi/tags.h" -static std :: vector ll_threads; /* Low-level runner threads */ + +static std :: vector ll_threads; /* Low-level runner threads */ static std :: vector the_runners; -static unsigned num_runners = 0; +static unsigned num_def_runners = 0; /* Number of defined runners */ -Runner :: Runner () -{ +static unsigned num_local_exec_runners = 0; /* Number of locally executing runners */ + +static unsigned num_exec_runners = 0; /* Number of globally executing runners */ - id = ++ num_runners; - the_runners.push_back (this); - sem_init (& sem_start, 0, 0); - num_act ++; -} extern int getNodeRank (); extern int getNumberOfNodes (); -void unpackTerminationOfRunner () -{ - RUNNER_ID id; - unpack (id); - num_act --; - printDebugMessage ("I'm noticed of the termination of a runner"); - if (! num_act) - { - printDebugMessage ("all the runners have terminated. Now stopping the reactive threads."); - stopReactiveThreads (); - } +Runner :: Runner () { + + def_id = ++ num_def_runners; + the_runners.push_back (this); + sem_init (& sem_start, 0, 0); + sem_init (& sem_cntxt, 0, 0); } -bool atLeastOneActiveRunner () -{ +RUNNER_ID Runner :: getDefinitionID () { - return num_act; + return def_id; } -RUNNER_ID Runner :: getID () -{ +RUNNER_ID Runner :: getExecutionID () { - return id; + return def_id; } -void Runner :: start () -{ - - setActive (); - sem_post (& sem_start); - run (); - terminate (); -} - -void Runner :: notifySendingTermination () -{ - - /* - char b [1000]; - sprintf (b, "Il reste encore %d !!!!!!!!!!!!", n); - printDebugMessage (b); - */ - printDebugMessage ("je suis informe que tout le monde a recu ma terminaison"); - setPassive (); - -} - -void Runner :: waitStarting () -{ - - sem_wait (& sem_start); -} - -Runner * getRunner (RUNNER_ID __key) -{ +Runner * getRunner (RUNNER_ID __key) { return dynamic_cast (getCommunicable (__key)); } -void startRunners () -{ +void packExecutionContext () { + + num_local_exec_runners = 0; + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isAssignedLocally ()) num_local_exec_runners ++; + pack(num_local_exec_runners); +} + +void unpackExecutionContext () { + + unsigned num_remote_runners; + unpack(num_remote_runners); + num_exec_runners += num_remote_runners; +} + +void initializeContext () { + + + initMessage (); + packExecutionContext (); + sendMessageToAll (EXECUTION_CONTEXT_TAG); + + int src, tag; + for (unsigned i = 0; i < getNumberOfNodes(); i ++) { + + cleanBuffers (); + waitMessage (); + + probeMessage ( src, tag ); + receiveMessage( src, tag ); + + initMessage (); + unpackExecutionContext (); + } + + cleanBuffers (); + + synchronizeNodes (); + + for (unsigned i = 0; i < the_runners.size (); i ++) + if (the_runners [i] -> isAssignedLocally ()) the_runners [i] -> notifyContextInitialized (); +} + +void Runner :: waitStarting () { + + sem_wait (& sem_start); +} + +void Runner :: waitContextInitialization () { + + sem_wait (& sem_cntxt); +} + +void Runner :: start () { + + setActive (); + + sem_post (& sem_start); + + waitContextInitialization (); + run (); + terminate (); +} + +void startRunners () { /* Runners */ for (unsigned i = 0; i < the_runners.size (); i ++) - if (the_runners [i] -> isLocal ()) - { - addThread (the_runners [i], ll_threads); - the_runners [i] -> waitStarting (); - } + if (the_runners [i] -> isAssignedLocally ()) { + addThread (the_runners [i], ll_threads); + the_runners [i] -> waitStarting (); + } + printDebugMessage ("launched the parallel runners"); } - -void joinRunners () -{ - +void joinRunners () { joinThreads (ll_threads); } + +bool atLeastOneActiveRunner () { + + return num_exec_runners; +} + +unsigned numberOfActiveRunners () { + + return num_exec_runners; +} + +void Runner :: notifyContextInitialized () { + + sem_post (& sem_cntxt); +} + +void Runner :: notifySendingTermination () { + + printDebugMessage ("I am informed that everyone received my termination notification."); + setPassive (); +} + +void unpackTerminationOfRunner () { + + RUNNER_ID finished_id; + unpack (finished_id); + + num_exec_runners --; + + printDebugMessage ("I'm noticed of the termination of a runner"); + + if (!num_exec_runners) { + + printDebugMessage ("All the runners have terminated - now stopping the reactive threads."); + stopReactiveThreads (); + } +} diff --git a/trunk/paradiseo-peo/src/core/runner.h b/trunk/paradiseo-peo/src/core/runner.h index 9153481b8..ba9ba56ac 100644 --- a/trunk/paradiseo-peo/src/core/runner.h +++ b/trunk/paradiseo-peo/src/core/runner.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -42,46 +42,60 @@ #include "communicable.h" #include "thread.h" + typedef unsigned RUNNER_ID; -class Runner : public Communicable, public Thread - { - public : +class Runner : public Communicable, public Thread { - Runner (); +public : - void start (); + Runner (); - void waitStarting (); + RUNNER_ID getDefinitionID (); - bool isLocal (); + RUNNER_ID getExecutionID (); - void terminate (); + bool isAssignedLocally (); - virtual void run () = 0; + void waitStarting (); - RUNNER_ID getID (); + void waitContextInitialization (); - void packTermination (); + void start (); - void notifySendingTermination (); + virtual void run () = 0; - private : + void terminate (); - sem_t sem_start; + void notifyContextInitialized (); - unsigned id; - }; + void notifySendingTermination (); -extern bool atLeastOneActiveRunner (); + void packTermination (); -extern void unpackTerminationOfRunner (); +private : -extern Runner * getRunner (RUNNER_ID __key); + sem_t sem_start; + sem_t sem_cntxt; + + unsigned def_id; +}; + + +extern Runner * getRunner (RUNNER_ID __key); + +extern void initializeContext (); extern void startRunners (); extern void joinRunners (); +extern bool atLeastOneActiveRunner (); + +extern unsigned numberOfActiveRunners (); + +extern void unpackTerminationOfRunner (); + + #endif diff --git a/trunk/paradiseo-peo/src/core/service.cpp b/trunk/paradiseo-peo/src/core/service.cpp index fc36d7105..c843aec10 100644 --- a/trunk/paradiseo-peo/src/core/service.cpp +++ b/trunk/paradiseo-peo/src/core/service.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -36,55 +36,51 @@ #include "service.h" -void Service :: setOwner (Thread & __owner) -{ +void Service :: setOwner (Thread & __owner) { owner = & __owner; } - -Thread * Service :: getOwner () -{ + +Thread * Service :: getOwner () { return owner; } -Service * getService (SERVICE_ID __key) -{ +Service * getService (SERVICE_ID __key) { return dynamic_cast (getCommunicable (__key)); } -void Service :: notifySendingData () -{ +void Service :: notifySendingData () { + } -void Service :: notifySendingResourceRequest () -{ +void Service :: notifySendingResourceRequest () { num_sent_rr --; if (! num_sent_rr) notifySendingAllResourceRequests (); } -void Service :: notifySendingAllResourceRequests () -{ +void Service :: notifySendingAllResourceRequests () { + } -void Service :: packData () -{ +void Service :: packData () { + } -void Service :: unpackData () -{ +void Service :: unpackData () { + } -void Service :: execute () -{ +void Service :: execute () { + +} + +void Service :: packResult () { + } -void Service :: packResult () -{ -} +void Service :: unpackResult () { -void Service :: unpackResult () -{ } diff --git a/trunk/paradiseo-peo/src/core/service.h b/trunk/paradiseo-peo/src/core/service.h index f2fe895b7..67a0fef03 100644 --- a/trunk/paradiseo-peo/src/core/service.h +++ b/trunk/paradiseo-peo/src/core/service.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -42,38 +42,37 @@ typedef unsigned SERVICE_ID; -class Service : public Communicable - { +class Service : public Communicable { - public : +public : - void setOwner (Thread & __owner); + void setOwner (Thread & __owner); + + Thread * getOwner (); - Thread * getOwner (); + void requestResourceRequest (unsigned __how_many = 1); + void packResourceRequest (); - void requestResourceRequest (unsigned __how_many = 1); - void packResourceRequest (); + virtual void packData (); + virtual void unpackData (); - virtual void packData (); - virtual void unpackData (); + virtual void execute (); + + virtual void packResult (); + virtual void unpackResult (); - virtual void execute (); + virtual void notifySendingData (); + virtual void notifySendingResourceRequest (); + virtual void notifySendingAllResourceRequests (); - virtual void packResult (); - virtual void unpackResult (); +private : - virtual void notifySendingData (); - virtual void notifySendingResourceRequest (); - virtual void notifySendingAllResourceRequests (); + Thread * owner; /* Owner thread (i.e. 'uses' that service) */ - private : + unsigned num_sent_rr; /* Number of RR not really sent (i.e. still in the sending queue)*/ - Thread * owner; /* Owner thread (i.e. 'uses' that service) */ +}; - unsigned num_sent_rr; /* Number of RR not really sent (i.e. still in the sending queue)*/ - - }; - -extern Service * getService (SERVICE_ID __key); +extern Service * getService (SERVICE_ID __key); #endif diff --git a/trunk/paradiseo-peo/src/core/thread.cpp b/trunk/paradiseo-peo/src/core/thread.cpp index 3badf671d..8b5e07ac0 100644 --- a/trunk/paradiseo-peo/src/core/thread.cpp +++ b/trunk/paradiseo-peo/src/core/thread.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -42,79 +42,59 @@ static std :: vector threads; unsigned num_act = 0; -Thread :: Thread () -{ - +Thread :: Thread () { + threads.push_back (this); act = false; } -Thread :: ~ Thread () -{ +Thread :: ~ Thread () { /* Nothing ! */ } extern int getNodeRank (); -void Thread :: setActive () -{ +void Thread :: setActive () { - if (! act ) - { + if (! act) { - act = true; - num_act ++; - // if (getNodeRank () == 1) - // printf ("On passe a %d\n", num_act); - } + act = true; + num_act ++; + } } -void Thread :: setPassive () -{ +void Thread :: setPassive () { - if (act) - { + if (act) { - act = false; - num_act --; - // if (getNodeRank () == 1) - // printf ("On passe a %d\n", num_act); - - } + act = false; + num_act --; + } } -bool atLeastOneActiveThread () -{ +bool atLeastOneActiveThread () { return num_act; } -unsigned numberOfActiveThreads () -{ +static void * launch (void * __arg) { - return num_act; -} - -static void * launch (void * __arg) -{ - - Thread * thr = (Thread *) __arg; + Thread * thr = (Thread *) __arg; thr -> start (); + return 0; } -void addThread (Thread * __hl_thread, std :: vector & __ll_threads) -{ +void addThread (Thread * __hl_thread, std :: vector & __ll_threads) { pthread_t * ll_thr = new pthread_t; __ll_threads.push_back (ll_thr); - pthread_create (ll_thr, 0, launch, __hl_thread); + pthread_create (ll_thr, 0, launch, __hl_thread); } -void joinThreads (std :: vector & __threads) -{ +void joinThreads (std :: vector & __threads) { - for (unsigned i = 0; i < __threads.size (); i ++) - pthread_join (* __threads [i], 0); + for (unsigned i = 0; i < __threads.size (); i ++) + pthread_join (* __threads [i], 0); } diff --git a/trunk/paradiseo-peo/src/core/thread.h b/trunk/paradiseo-peo/src/core/thread.h index 7d51bf2d7..16762db76 100644 --- a/trunk/paradiseo-peo/src/core/thread.h +++ b/trunk/paradiseo-peo/src/core/thread.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,28 +41,27 @@ /* A high-level thread */ -class Thread - { +class Thread { + +public: - public: + /* Ctor */ + Thread (); - /* Ctor */ - Thread (); + /* Dtor */ + virtual ~ Thread (); + + /* Go ! */ + virtual void start () = 0; - /* Dtor */ - virtual ~ Thread (); + void setActive ();/* It means the current process is going to send messages soon */ + void setPassive ();/* The current process is not going to perform send operations + (but it may receive messages) */ - /* Go ! */ - virtual void start () = 0; - - void setActive ();/* It means the current process is going to send messages soon */ - void setPassive ();/* The current process is not going to perform send operations - (but it may receive messages) */ - - private : - - bool act; - }; +private : + + bool act; +}; extern void addThread (Thread * __hl_thread, std :: vector & __ll_threads); @@ -71,7 +70,4 @@ extern void joinThreads (std :: vector & __ll_threads); extern bool atLeastOneActiveThread (); /* It returns 'true' iff at least one process is going to send messages */ -extern unsigned numberOfActiveThreads (); - - #endif /*THREAD_H_*/ diff --git a/trunk/paradiseo-peo/src/core/topology.cpp b/trunk/paradiseo-peo/src/core/topology.cpp index 89deaa759..4a685b406 100644 --- a/trunk/paradiseo-peo/src/core/topology.cpp +++ b/trunk/paradiseo-peo/src/core/topology.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -36,15 +36,13 @@ #include "topology.h" -Topology :: ~ Topology () -{ - +Topology :: ~ Topology () { + /* Nothing ! */ } -void Topology :: add (Cooperative & __mig) - { - - mig.push_back (& __mig) ; - } +void Topology :: add (Cooperative & __mig) { + + mig.push_back (& __mig) ; +} diff --git a/trunk/paradiseo-peo/src/core/topology.h b/trunk/paradiseo-peo/src/core/topology.h index 0d14cb98a..1addbf842 100644 --- a/trunk/paradiseo-peo/src/core/topology.h +++ b/trunk/paradiseo-peo/src/core/topology.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,22 +41,21 @@ #include "cooperative.h" -class Topology - { +class Topology { - public: +public: - virtual ~Topology (); + virtual ~Topology (); - void add (Cooperative & __mig); + void add (Cooperative & __mig); - virtual void setNeighbors (Cooperative * __mig, - std :: vector & __from, - std :: vector & __to) = 0; + virtual void setNeighbors (Cooperative * __mig, + std :: vector & __from, + std :: vector & __to) = 0; - protected: +protected: - std :: vector mig ; - }; + std :: vector mig ; +}; #endif diff --git a/trunk/paradiseo-peo/src/peo.h b/trunk/paradiseo-peo/src/peo.h index c9584db38..54914f3f4 100644 --- a/trunk/paradiseo-peo/src/peo.h +++ b/trunk/paradiseo-peo/src/peo.h @@ -315,17 +315,19 @@ //! //!ParadisEO WebSite : http://paradiseo.gforge.inria.fr //!Contact: paradiseo-help@lists.gforge.inria.fr -//! #include "core/peo_init.h" #include "core/peo_run.h" #include "core/peo_fin.h" -#include "core/eoVector_comm.h" +#include "core/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" #include "peoEA.h" +#include "peoParallelAlgorithmWrapper.h" -/* Parallel steps of the E.A. */ +/* <------- components for parallel algorithms -------> */ #include "peoSeqTransform.h" #include "peoParaSGATransform.h" #include "peoSeqPopEval.h" @@ -334,13 +336,13 @@ /* Cooperative island model */ #include "core/ring_topo.h" -#include "peoAsyncIslandMig.h" #include "peoSyncIslandMig.h" +#include "peoAsyncIslandMig.h" /* Synchronous multi-start model */ #include "peoSyncMultiStart.h" -#include "peoParallelAlgorithmWrapper.h" #include "peoSynchronousMultiStart.h" +/* <------- components for parallel algorithms -------> */ /* Parallel PSO */ #include "peoInitializer.h" diff --git a/trunk/paradiseo-peo/src/peoAsyncIslandMig.h b/trunk/paradiseo-peo/src/peoAsyncIslandMig.h index a6612abb8..266c32b0c 100644 --- a/trunk/paradiseo-peo/src/peoAsyncIslandMig.h +++ b/trunk/paradiseo-peo/src/peoAsyncIslandMig.h @@ -47,9 +47,13 @@ #include #include +#include "core/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" + #include "core/topology.h" +#include "core/thread.h" #include "core/cooperative.h" -#include "core/eoPop_comm.h" #include "core/peo_debug.h" @@ -217,13 +221,12 @@ template< class EOT > void peoAsyncIslandMig< EOT > :: pack() { lock (); - { - :: pack( coop_em.front()->getKey() ); - :: pack( em.front() ); - coop_em.pop(); - em.pop(); - } + ::pack( coop_em.front()->getKey() ); + ::pack( em.front() ); + coop_em.pop(); + em.pop(); + unlock(); } @@ -232,12 +235,11 @@ template< class EOT > void peoAsyncIslandMig< EOT > :: unpack() { lock (); - { - eoPop< EOT > mig; - :: unpack( mig ); - imm.push( mig ); - } + eoPop< EOT > mig; + ::unpack( mig ); + imm.push( mig ); + unlock(); } diff --git a/trunk/paradiseo-peo/src/peoParaSGATransform.h b/trunk/paradiseo-peo/src/peoParaSGATransform.h index 36a6d3c21..08f6bb1cb 100644 --- a/trunk/paradiseo-peo/src/peoParaSGATransform.h +++ b/trunk/paradiseo-peo/src/peoParaSGATransform.h @@ -111,8 +111,8 @@ template< class EOT > void peoParaSGATransform< EOT > :: packData() { pack( idx ); - :: pack( pop->operator[]( idx++ ) ); - :: pack( pop->operator[]( idx++ ) ); + pack( pop->operator[]( idx++ ) ); + pack( pop->operator[]( idx++ ) ); } @@ -120,8 +120,8 @@ template< class EOT > void peoParaSGATransform< EOT > :: unpackData() { unpack( idx ); - :: unpack( father ); - :: unpack( mother ); + unpack( father ); + unpack( mother ); } @@ -139,8 +139,8 @@ template< class EOT > void peoParaSGATransform< EOT > :: packResult() { pack( idx ); - :: pack( father ); - :: pack( mother ); + pack( father ); + pack( mother ); } @@ -150,10 +150,11 @@ template< class EOT > void peoParaSGATransform< EOT > :: unpackResult() unsigned sidx; unpack( sidx ); - :: unpack( pop->operator[]( sidx++ ) ); - :: unpack( pop->operator[]( sidx ) ); + unpack( pop->operator[]( sidx++ ) ); + unpack( pop->operator[]( sidx ) ); num_term += 2; - // Can be used with a odd size + + // Can be used with an odd size if ( num_term == 2*(pop->size()/2) ) { diff --git a/trunk/paradiseo-peo/src/peoSyncIslandMig.h b/trunk/paradiseo-peo/src/peoSyncIslandMig.h index 2e223d70f..65d91ebf7 100644 --- a/trunk/paradiseo-peo/src/peoSyncIslandMig.h +++ b/trunk/paradiseo-peo/src/peoSyncIslandMig.h @@ -50,9 +50,13 @@ #include #include +#include "core/messaging.h" +#include "core/eoPop_mesg.h" +#include "core/eoVector_mesg.h" + #include "core/topology.h" #include "core/thread.h" -#include "core/eoPop_comm.h" +#include "core/cooperative.h" #include "core/peo_debug.h" @@ -225,13 +229,12 @@ template< class EOT > void peoSyncIslandMig< EOT > :: pack() { lock (); - { - :: pack( coop_em.front()->getKey() ); - :: pack( em.front() ); - coop_em.pop(); - em.pop(); - } + pack( coop_em.front()->getKey() ); + pack( em.front() ); + coop_em.pop(); + em.pop(); + unlock(); } @@ -240,12 +243,11 @@ template< class EOT > void peoSyncIslandMig< EOT > :: unpack() { lock (); - { - eoPop< EOT > mig; - :: unpack( mig ); - imm.push( mig ); - } + eoPop< EOT > mig; + unpack( mig ); + imm.push( mig ); + unlock(); sem_post( &sync ); diff --git a/trunk/paradiseo-peo/src/peoSyncMultiStart.h b/trunk/paradiseo-peo/src/peoSyncMultiStart.h index b4c15607a..424d2f733 100644 --- a/trunk/paradiseo-peo/src/peoSyncMultiStart.h +++ b/trunk/paradiseo-peo/src/peoSyncMultiStart.h @@ -147,7 +147,7 @@ template< class EOT > peoSyncMultiStart< EOT > :: peoSyncMultiStart( template< class EOT > void peoSyncMultiStart< EOT > :: packData() { - :: pack( sel[ idx++ ] ); + pack( sel[ idx++ ] ); } diff --git a/trunk/paradiseo-peo/src/peoSynchronousMultiStart.h b/trunk/paradiseo-peo/src/peoSynchronousMultiStart.h index 44feec3a1..aa2a00b1d 100644 --- a/trunk/paradiseo-peo/src/peoSynchronousMultiStart.h +++ b/trunk/paradiseo-peo/src/peoSynchronousMultiStart.h @@ -232,9 +232,9 @@ template < typename EntityType > class peoSynchronousMultiStart : public Service template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packData() { - ::pack( functionIndex ); - ::pack( idx ); - ::pack( ( EntityType& ) *data[ idx++ ] ); + pack( functionIndex ); + pack( idx ); + pack( ( EntityType& ) *data[ idx++ ] ); // done with functionIndex for the entire data set - moving to another // function/algorithm starting all over with the entire data set ( idx is set to 0 ) @@ -249,9 +249,9 @@ template < typename EntityType > void peoSynchronousMultiStart< EntityType >::pa template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackData() { - ::unpack( functionIndex ); - ::unpack( dataIndex ); - ::unpack( entityTypeInstance ); + unpack( functionIndex ); + unpack( dataIndex ); + unpack( entityTypeInstance ); } template < typename EntityType > void peoSynchronousMultiStart< EntityType >::execute() @@ -268,15 +268,15 @@ template < typename EntityType > void peoSynchronousMultiStart< EntityType >::ex template < typename EntityType > void peoSynchronousMultiStart< EntityType >::packResult() { - ::pack( dataIndex ); - ::pack( entityTypeInstance ); + pack( dataIndex ); + pack( entityTypeInstance ); } template < typename EntityType > void peoSynchronousMultiStart< EntityType >::unpackResult() { - ::unpack( dataIndex ); - ::unpack( entityTypeInstance ); + unpack( dataIndex ); + unpack( entityTypeInstance ); // wrapping the unpacked data - the definition of an abstract algorithm imposes // that its internal function operator acts only on abstract data types diff --git a/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp b/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp index e5356c800..23ab6c539 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/comm.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -51,48 +51,45 @@ static sem_t sem_comm_init; static Communicator * the_thread; -Communicator :: Communicator (int * __argc, char * * * __argv) -{ +Communicator :: Communicator (int * __argc, char * * * __argv) { - the_thread = this; + the_thread = this; initNode (__argc, __argv); - loadRMCParameters (* __argc, * __argv); + loadRMCParameters (* __argc, * __argv); sem_post (& sem_comm_init); } -void Communicator :: start () -{ +void Communicator :: start () { - while (true) - { + while (true) { - /* Zzz Zzz Zzz :-))) */ - sleep (); - sendMessages (); + /* Zzz Zzz Zzz :-))) */ + sleep (); - if (! atLeastOneActiveRunner ()) - break; - receiveMessages (); - } - waitBuffers (); + sendMessages (); + + if (! atLeastOneActiveRunner ()) + break; + + receiveMessages (); + } + + waitBuffers (); printDebugMessage ("finalizing"); - MPI_Finalize (); + MPI_Finalize (); } -void initCommunication () -{ +void initCommunication () { sem_init (& sem_comm_init, 0, 0); } -void waitNodeInitialization () -{ +void waitNodeInitialization () { sem_wait (& sem_comm_init); } -void wakeUpCommunicator () -{ +void wakeUpCommunicator () { the_thread -> wakeUp (); } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/comm.h b/trunk/paradiseo-peo/src/rmc/mpi/comm.h index ef19fa9ac..5184d45f1 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/comm.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/comm.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -40,16 +40,15 @@ #include "../../core/communicable.h" #include "../../core/reac_thread.h" -class Communicator : public ReactiveThread - { +class Communicator : public ReactiveThread { - public : +public : + + /* Ctor */ + Communicator (int * __argc, char * * * __argv); - /* Ctor */ - Communicator (int * __argc, char * * * __argv); - - void start (); - }; + void start (); +}; extern void initCommunication (); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp b/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp index 186cefd51..de6ce75a2 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/coop.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,35 +41,29 @@ #include "mess.h" #include "../../core/peo_debug.h" -Runner * Cooperative :: getOwner () -{ +Runner * Cooperative :: getOwner () { return owner; } -void Cooperative :: setOwner (Runner & __runner) -{ +void Cooperative :: setOwner (Runner & __runner) { owner = & __runner; } -void Cooperative :: send (Cooperative * __coop) -{ +void Cooperative :: send (Cooperative * __coop) { - :: send (this, getRankOfRunner (__coop -> getOwner () -> getID ()), COOP_TAG); + :: send (this, getRankOfRunner (__coop -> getOwner () -> getDefinitionID ()), COOP_TAG); // stop (); } -Cooperative * getCooperative (COOP_ID __key) -{ +Cooperative * getCooperative (COOP_ID __key) { return dynamic_cast (getCommunicable (__key)); } -void Cooperative :: notifySending () -{ +void Cooperative :: notifySending () { //getOwner -> setPassive (); // resume (); - // printDebugMessage (b); } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp b/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp index 32021980e..669eaae4d 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/mess.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -42,60 +42,54 @@ #include "node.h" #define MPI_BUF_SIZE 1024*64 - + static char mpi_buf [MPI_BUF_SIZE]; - + static int pos_buf ; static std :: vector act_buf; /* Active buffers */ static std :: vector act_req; /* Active requests */ -void cleanBuffers () -{ +void cleanBuffers () { - for (unsigned i = 0; i < act_req.size ();) - { - - MPI_Status stat ; - int flag ; - MPI_Test (act_req [i], & flag, & stat) ; - if (flag) - { - - delete act_buf [i] ; - delete act_req [i] ; - - act_buf [i] = act_buf.back () ; - act_buf.pop_back () ; - - act_req [i] = act_req.back () ; - act_req.pop_back () ; - } - else - i ++; + for (unsigned i = 0; i < act_req.size ();) { + + MPI_Status stat ; + int flag ; + MPI_Test (act_req [i], & flag, & stat) ; + if (flag) { + + delete[] act_buf [i] ; + delete act_req [i] ; + + act_buf [i] = act_buf.back () ; + act_buf.pop_back () ; + + act_req [i] = act_req.back () ; + act_req.pop_back () ; } + else + i ++; + } } -void waitBuffers () -{ +void waitBuffers () { printDebugMessage ("waiting the termination of the asynchronous operations to complete"); - for (unsigned i = 0; i < act_req.size (); i ++) - { + for (unsigned i = 0; i < act_req.size (); i ++) { + + MPI_Status stat ; - MPI_Status stat ; - - MPI_Wait (act_req [i], & stat) ; - - delete act_buf [i] ; - delete act_req [i] ; - } + MPI_Wait (act_req [i], & stat) ; + + delete[] act_buf [i] ; + delete act_req [i] ; + } } -bool probeMessage (int & __src, int & __tag) -{ +bool probeMessage (int & __src, int & __tag) { int flag; @@ -109,188 +103,168 @@ bool probeMessage (int & __src, int & __tag) return flag; } -void waitMessage () -{ +void waitMessage () { - MPI_Status stat; + MPI_Status stat; MPI_Probe (MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, & stat); } -void initMessage () -{ - +void initMessage () { + pos_buf = 0; } -void sendMessage (int __to, int __tag) -{ +void sendMessage (int __to, int __tag) { - cleanBuffers (); + cleanBuffers (); act_buf.push_back (new char [pos_buf]); - act_req.push_back (new MPI_Request); - memcpy (act_buf.back (), mpi_buf, pos_buf); - MPI_Isend (act_buf.back (), pos_buf, MPI_PACKED, __to, __tag, MPI_COMM_WORLD, act_req.back ()); + act_req.push_back (new MPI_Request); + memcpy (act_buf.back (), mpi_buf, pos_buf); + MPI_Isend (act_buf.back (), pos_buf, MPI_PACKED, __to, __tag, MPI_COMM_WORLD, act_req.back ()); } -void sendMessageToAll (int __tag) -{ +void sendMessageToAll (int __tag) { for (int i = 0; i < getNumberOfNodes (); i ++) sendMessage (i, __tag); } -void receiveMessage (int __from, int __tag) -{ - - MPI_Status stat; +void receiveMessage (int __from, int __tag) { + + MPI_Status stat; MPI_Request req; - MPI_Irecv (mpi_buf, MPI_BUF_SIZE, MPI_PACKED, __from, __tag, MPI_COMM_WORLD, & req) ; - MPI_Wait (& req, & stat) ; + MPI_Irecv (mpi_buf, MPI_BUF_SIZE, MPI_PACKED, __from, __tag, MPI_COMM_WORLD, & req); + MPI_Wait (& req, & stat); +} + +void synchronizeNodes () { + + MPI_Barrier ( MPI_COMM_WORLD ); } /* Char */ -void pack (const char & __c) -{ +void pack (const char & __c) { MPI_Pack ((void *) & __c, 1, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Float */ -void pack (const float & __f, int __nitem) -{ +void pack (const float & __f, int __nitem) { MPI_Pack ((void *) & __f, __nitem, MPI_FLOAT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Double */ -void pack (const double & __d, int __nitem) -{ +void pack (const double & __d, int __nitem) { MPI_Pack ((void *) & __d, __nitem, MPI_DOUBLE, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Integer */ -void pack (const int & __i, int __nitem) -{ +void pack (const int & __i, int __nitem) { MPI_Pack ((void *) & __i, __nitem, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Unsigned int. */ -void pack (const unsigned int & __ui, int __nitem) -{ +void pack (const unsigned int & __ui, int __nitem) { MPI_Pack ((void *) & __ui, __nitem, MPI_UNSIGNED, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Short int. */ -void pack (const short & __sh, int __nitem) -{ +void pack (const short & __sh, int __nitem) { MPI_Pack ((void *) & __sh, __nitem, MPI_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Unsigned short */ -void pack (const unsigned short & __ush, int __nitem) -{ +void pack (const unsigned short & __ush, int __nitem) { MPI_Pack ((void *) & __ush, __nitem, MPI_UNSIGNED_SHORT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Long */ -void pack (const long & __l, int __nitem) -{ +void pack (const long & __l, int __nitem) { MPI_Pack ((void *) & __l, __nitem, MPI_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Unsigned long */ -void pack (const unsigned long & __ul, int __nitem) -{ +void pack (const unsigned long & __ul, int __nitem) { MPI_Pack ((void *) & __ul, __nitem, MPI_UNSIGNED_LONG, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* String */ -void pack (const char * __str) -{ - +void pack (const char * __str) { + int len = strlen (__str) + 1; MPI_Pack (& len, 1, MPI_INT, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); MPI_Pack ((void *) __str, len, MPI_CHAR, mpi_buf, MPI_BUF_SIZE, & pos_buf, MPI_COMM_WORLD); } /* Char */ -void unpack (char & __c) -{ +void unpack (char & __c) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __c, 1, MPI_CHAR, MPI_COMM_WORLD); } /* Float */ -void unpack (float & __f, int __nitem) -{ +void unpack (float & __f, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __f, __nitem, MPI_FLOAT, MPI_COMM_WORLD); } /* Double */ -void unpack (double & __d, int __nitem) -{ +void unpack (double & __d, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __d, __nitem, MPI_DOUBLE, MPI_COMM_WORLD); } /* Integer */ -void unpack (int & __i, int __nitem) -{ +void unpack (int & __i, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __i, __nitem, MPI_INT, MPI_COMM_WORLD); } /* Unsigned int. */ -void unpack (unsigned int & __ui, int __nitem) -{ +void unpack (unsigned int & __ui, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ui, __nitem, MPI_UNSIGNED, MPI_COMM_WORLD); } /* Short int. */ -void unpack (short & __sh, int __nitem) -{ +void unpack (short & __sh, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __sh, __nitem, MPI_SHORT, MPI_COMM_WORLD); } /* Unsigned short */ -void unpack (unsigned short & __ush, int __nitem) -{ +void unpack (unsigned short & __ush, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ush, __nitem, MPI_UNSIGNED_SHORT, MPI_COMM_WORLD); } /* Long */ -void unpack (long & __l, int __nitem) -{ +void unpack (long & __l, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __l, __nitem, MPI_LONG, MPI_COMM_WORLD); } /* Unsigned long */ -void unpack (unsigned long & __ul, int __nitem) -{ +void unpack (unsigned long & __ul, int __nitem) { MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & __ul, __nitem, MPI_UNSIGNED_LONG, MPI_COMM_WORLD); } /* String */ -void unpack (char * __str) -{ +void unpack (char * __str) { int len; MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, & len, 1, MPI_INT, MPI_COMM_WORLD); - MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, __str, len, MPI_CHAR, MPI_COMM_WORLD); + MPI_Unpack (mpi_buf, MPI_BUF_SIZE, & pos_buf, __str, len, MPI_CHAR, MPI_COMM_WORLD); } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/mess.h b/trunk/paradiseo-peo/src/rmc/mpi/mess.h index b5eb98990..83ae3998d 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/mess.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/mess.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -55,5 +55,7 @@ extern bool probeMessage (int & __src, int & __tag); extern void waitMessage (); +extern void synchronizeNodes (); + #endif diff --git a/trunk/paradiseo-peo/src/rmc/mpi/node.cpp b/trunk/paradiseo-peo/src/rmc/mpi/node.cpp index 536d0d6f8..dcd156781 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/node.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/node.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -46,46 +46,41 @@ static std :: map name_to_rk; static std :: vector rk_to_name; -int getNodeRank () -{ +int getNodeRank () { return rk; } -int getNumberOfNodes () -{ +int getNumberOfNodes () { return sz; } -int getRankFromName (const std :: string & __name) -{ - - return atoi (__name.c_str ()); +int getRankFromName (const std :: string & __name) { + + return atoi (__name.c_str ()); } -void initNode (int * __argc, char * * * __argv) -{ - +void initNode (int * __argc, char * * * __argv) { + int provided; - MPI_Init_thread (__argc, __argv, MPI_THREAD_FUNNELED, & provided); + MPI_Init_thread (__argc, __argv, MPI_THREAD_FUNNELED, & provided); assert (provided == MPI_THREAD_FUNNELED); /* The MPI implementation must be multi-threaded. - Yet, only one thread performs the comm. - operations */ + Yet, only one thread performs the comm. + operations */ MPI_Comm_rank (MPI_COMM_WORLD, & rk); /* Who ? */ MPI_Comm_size (MPI_COMM_WORLD, & sz); /* How many ? */ char names [sz] [MPI_MAX_PROCESSOR_NAME]; int len; - /* Processor names */ - MPI_Get_processor_name (names [0], & len); /* Me */ + /* Processor names */ + MPI_Get_processor_name (names [0], & len); /* Me */ MPI_Allgather (names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, names, MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD); /* Broadcast */ - - for (int i = 0; i < sz; i ++) - { - rk_to_name.push_back (names [i]); - name_to_rk [names [i]] = i; - } + + for (int i = 0; i < sz; i ++) { + rk_to_name.push_back (names [i]); + name_to_rk [names [i]] = i; + } } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/node.h b/trunk/paradiseo-peo/src/rmc/mpi/node.h index 700706bf6..76babf5b7 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/node.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/node.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 diff --git a/trunk/paradiseo-peo/src/rmc/mpi/param.cpp b/trunk/paradiseo-peo/src/rmc/mpi/param.cpp index c0cb02d9e..821e58179 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/param.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/param.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -38,8 +38,7 @@ #include "schema.h" -void loadRMCParameters (int & __argc, char * * & __argv) -{ +void loadRMCParameters (int & __argc, char * * & __argv) { eoParser parser (__argc, __argv); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/param.h b/trunk/paradiseo-peo/src/rmc/mpi/param.h index 9d36e9241..b868a1db7 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/param.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/param.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 diff --git a/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp b/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp index 251f53e44..5bbf27c05 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/recv.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -44,103 +44,93 @@ #include "../../core/cooperative.h" #include "../../core/peo_debug.h" -void receiveMessages () -{ + +void receiveMessages () { cleanBuffers (); - do - { + do { - if (! atLeastOneActiveThread ()) - { - // printDebugMessage ("debut wait"); - waitMessage (); - //printDebugMessage ("fin wait"); - } - - int src, tag; - - while (probeMessage (src, tag)) - { - - receiveMessage (src, tag); - initMessage (); - /* - char b [1000]; - sprintf (b, "traitement recv %d\n", tag); - printDebugMessage (b); - */ - - switch (tag) - { - - case RUNNER_STOP_TAG: - unpackTerminationOfRunner (); - wakeUpCommunicator (); - break; - - case COOP_TAG: - // printDebugMessage ("reception de message de cooperation"); - COOP_ID coop_id; - unpack (coop_id); - getCooperative (coop_id) -> unpack (); - break; - - case SCHED_REQUEST_TAG: - unpackResourceRequest (); - break; - - case SCHED_RESULT_TAG: - { - /* Unpacking the resource */ - SERVICE_ID serv_id; - unpack (serv_id); - Service * serv = getService (serv_id); - int dest; - unpack (dest); - WORKER_ID worker_id; - unpack (worker_id); - - /* Going back ... */ - initMessage (); - pack (worker_id); - pack (serv_id); - serv -> packData (); - serv -> notifySendingData (); - sendMessage (dest, TASK_DATA_TAG); - break; - } - - case TASK_DATA_TAG: - { - WORKER_ID worker_id; - unpack (worker_id); - Worker * worker = getWorker (worker_id); - worker -> setSource (src); - worker -> unpackData (); - worker -> wakeUp (); - break; - } - - case TASK_RESULT_TAG: - { - SERVICE_ID serv_id; - unpack (serv_id); - Service * serv = getService (serv_id); - serv -> unpackResult (); - break; - } - - case TASK_DONE_TAG: - unpackTaskDone (); - break; - - default: - ; - }; - } + if (! atLeastOneActiveThread ()) { + waitMessage (); } - while (! atLeastOneActiveThread () && atLeastOneActiveRunner () /*&& ! allResourcesFree ()*/); + + int src, tag; + + while (probeMessage (src, tag)) { + + receiveMessage (src, tag); + initMessage (); + + switch (tag) { + + case RUNNER_STOP_TAG: + unpackTerminationOfRunner (); + wakeUpCommunicator (); + break; + + case COOP_TAG: + COOP_ID coop_id; + unpack (coop_id); + getCooperative (coop_id) -> unpack (); + break; + + case SCHED_REQUEST_TAG: + unpackResourceRequest (); + break; + + case SCHED_RESULT_TAG: + { + /* Unpacking the resource */ + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + int dest; + unpack (dest); + WORKER_ID worker_id; + unpack (worker_id); + + /* Going back ... */ + initMessage (); + pack (worker_id); + pack (serv_id); + serv -> packData (); + serv -> notifySendingData (); + sendMessage (dest, TASK_DATA_TAG); + break; + } + + case TASK_DATA_TAG: + { + WORKER_ID worker_id; + unpack (worker_id); + Worker * worker = getWorker (worker_id); + worker -> setSource (src); + worker -> unpackData (); + worker -> wakeUp (); + break; + } + + case TASK_RESULT_TAG: + { + SERVICE_ID serv_id; + unpack (serv_id); + Service * serv = getService (serv_id); + serv -> unpackResult (); + break; + } + + case TASK_DONE_TAG: + unpackTaskDone (); + break; + + default: + ; + }; + } + + } while ( ! atLeastOneActiveThread () && atLeastOneActiveRunner () /*&& ! allResourcesFree ()*/); + + cleanBuffers (); } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/recv.h b/trunk/paradiseo-peo/src/rmc/mpi/recv.h index 80ab6bc95..ad6eec330 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/recv.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/recv.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 diff --git a/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp b/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp index 2bf011d87..21473a057 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/rmc.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -43,18 +43,16 @@ static std :: vector ll_threads; /* Low level threads */ -void runRMC () -{ +void runRMC () { /* Worker(s) ? */ - for (unsigned i = 0; i < my_node -> num_workers; i ++) + for (unsigned i = 0; i < my_node -> num_workers; i ++) addThread (new Worker, ll_threads); wakeUpCommunicator (); } -void initRMC (int & __argc, char * * & __argv) -{ +void initRMC (int & __argc, char * * & __argv) { /* Communication */ initCommunication (); @@ -69,8 +67,7 @@ void initRMC (int & __argc, char * * & __argv) /// } -void finalizeRMC () -{ +void finalizeRMC () { printDebugMessage ("before join threads RMC"); joinThreads (ll_threads); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp b/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp index 8015aeb6b..67fb3e9fe 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/runner.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,28 +37,26 @@ #include "../../core/messaging.h" #include "../../core/runner.h" #include "node.h" +#include "mess.h" #include "send.h" #include "tags.h" #include "schema.h" -bool Runner :: isLocal () -{ + +bool Runner :: isAssignedLocally () { for (unsigned i = 0; i < my_node -> id_run.size (); i ++) - if (my_node -> id_run [i] == id) + if (my_node -> id_run [i] == def_id) return true; return false; } -void Runner :: packTermination () -{ - - pack (id); -} - -void Runner :: terminate () -{ +void Runner :: terminate () { sendToAll (this, RUNNER_STOP_TAG); } +void Runner :: packTermination () { + + pack (def_id); +} diff --git a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp index 1a0d1a0ad..aef662050 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -47,51 +47,45 @@ static std :: queue requests; /* Requests */ static unsigned initNumberOfRes = 0; -void initScheduler () -{ - - for (unsigned i = 0; i < the_schema.size (); i ++) - { - - const Node & node = the_schema [i]; - - if (node.rk_sched == my_node -> rk) - for (unsigned j = 0; j < node.num_workers; j ++) - resources.push (std :: pair (i, j + 1)); - } +void initScheduler () { + + for (unsigned i = 0; i < the_schema.size (); i ++) { + + const Node & node = the_schema [i]; + + if (node.rk_sched == my_node -> rk) + for (unsigned j = 0; j < node.num_workers; j ++) + resources.push (std :: pair (i, j + 1)); + } initNumberOfRes = resources.size (); } -bool allResourcesFree () -{ +bool allResourcesFree () { return resources.size () == initNumberOfRes; } -static void update () -{ +static void update () { unsigned num_alloc = std :: min (resources.size (), requests.size ()); + + for (unsigned i = 0; i < num_alloc; i ++) { + + SCHED_REQUEST req = requests.front (); + requests.pop (); + + SCHED_RESOURCE res = resources.front (); + resources.pop (); - for (unsigned i = 0; i < num_alloc; i ++) - { - - SCHED_REQUEST req = requests.front (); - requests.pop (); - - SCHED_RESOURCE res = resources.front (); - resources.pop (); - - printDebugMessage ("allocating a resource."); - initMessage (); - pack (req.second); - pack (res); - sendMessage (req.first, SCHED_RESULT_TAG); - } + printDebugMessage ("allocating a resource."); + initMessage (); + pack (req.second); + pack (res); + sendMessage (req.first, SCHED_RESULT_TAG); + } } -void unpackResourceRequest () -{ +void unpackResourceRequest () { printDebugMessage ("queuing a resource request."); SCHED_REQUEST req; @@ -100,8 +94,7 @@ void unpackResourceRequest () update (); } -void unpackTaskDone () -{ +void unpackTaskDone () { printDebugMessage ("I'm notified a worker is now idle."); SCHED_RESOURCE res; diff --git a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h index ad95cd552..cbb61891a 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/scheduler.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -53,7 +53,7 @@ extern void initScheduler (); extern void unpackResourceRequest (); /* Being known a worker is now idle :-) */ -extern void unpackTaskDone (); +extern void unpackTaskDone (); extern bool allResourcesFree (); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp b/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp index 4a2f22761..3fc02840e 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/schema.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -35,6 +35,7 @@ */ #include +#include #include #include "schema.h" @@ -43,23 +44,25 @@ #include "node.h" #include "../../core/peo_debug.h" + std :: vector the_schema; Node * my_node; -RANK_ID getRankOfRunner (RUNNER_ID __key) -{ +static unsigned maxSpecifiedRunnerID = 0; + + +RANK_ID getRankOfRunner (RUNNER_ID __key) { for (unsigned i = 0; i < the_schema.size (); i ++) for (unsigned j = 0; j < the_schema [i].id_run.size (); j ++) if (the_schema [i].id_run [j] == __key) return the_schema [i].rk; assert (false); - return 0; + return 0; } -static void loadNode (int __rk_sched) -{ +static void loadNode (int __rk_sched) { Node node; @@ -70,59 +73,55 @@ static void loadNode (int __rk_sched) /* ATT: num_workers */ node.num_workers = atoi (getAttributeValue ("num_workers").c_str ()); - while (true) - { + while (true) { - /* TAG: | */ - std :: string name = getNextNode (); - assert (name == "runner" || name == "node"); - if (name == "runner") - { - /* TAG: */ - node.id_run.push_back (atoi (getNextNode ().c_str ())); - /* TAG: */ - assert (getNextNode () == "runner"); - } - else - { - /* TAG: */ - the_schema.push_back (node); - break; - } + /* TAG: | */ + std :: string name = getNextNode (); + assert (name == "runner" || name == "node"); + if (name == "runner") { + /* TAG: */ + node.id_run.push_back (atoi (getNextNode ().c_str ())); + if ( node.id_run.back() > maxSpecifiedRunnerID ) + maxSpecifiedRunnerID = node.id_run.back(); + /* TAG: */ + assert (getNextNode () == "runner"); } + else { + /* TAG: */ + node.execution_id_run = node.id_run; + the_schema.push_back (node); + break; + } + } } -static void loadGroup () -{ +static void loadGroup () { std :: string name; /* ATT: scheduler*/ int rk_sched = getRankFromName (getAttributeValue ("scheduler")); - while (true) - { + while (true) { - /* TAG: | */ - name = getNextNode (); - assert (name == "node" || name == "group"); - if (name == "node") - /* TAG: */ - loadNode (rk_sched); - else - /* TAG: */ - break; - } + /* TAG: | */ + name = getNextNode (); + assert (name == "node" || name == "group"); + if (name == "node") + /* TAG: */ + loadNode (rk_sched); + else + /* TAG: */ + break; + } } -bool isScheduleNode () -{ +bool isScheduleNode () { return my_node -> rk == my_node -> rk_sched; } -void loadSchema (const char * __filename) -{ +void loadSchema (const char * __filename) { openXMLDocument (__filename); @@ -132,44 +131,61 @@ void loadSchema (const char * __filename) name = getNextNode (); assert (name == "schema"); - while (true) - { + maxSpecifiedRunnerID = 0; - /* TAG: | */ - name = getNextNode (); - assert (name == "group" || name == "schema"); - if (name == "group") - /* TAG: */ - loadGroup (); - else - /* TAG: */ - break; + + while (true) { + + /* TAG: | */ + name = getNextNode (); + assert (name == "group" || name == "schema"); + if (name == "group") + /* TAG: */ + loadGroup (); + else + /* TAG: */ + break; + } + + + std :: set uniqueRunnerIDs; unsigned nbUniqueIDs = 0; + for (unsigned i = 0; i < the_schema.size (); i ++) { + for (unsigned j = 0; j < the_schema [i].id_run.size(); j ++) { + uniqueRunnerIDs.insert( the_schema [i].id_run[j] ); + /* In case a duplicate ID has been found */ + if ( uniqueRunnerIDs.size() == nbUniqueIDs ) { + the_schema [i].execution_id_run[j] = ++maxSpecifiedRunnerID; + } + nbUniqueIDs = uniqueRunnerIDs.size(); } + } /* Looking for my node */ - for (unsigned i = 0; i < the_schema.size (); i ++) + for (unsigned i = 0; i < the_schema.size (); i ++) { if (the_schema [i].rk == getNodeRank ()) my_node = & (the_schema [i]); + } + /* About me */ char mess [1000]; sprintf (mess, "my rank is %d", my_node -> rk); printDebugMessage (mess); - if (isScheduleNode ()) - printDebugMessage ("I'am a scheduler"); - for (unsigned i = 0; i < my_node -> id_run.size (); i ++) - { - sprintf (mess, "I manage the runner %d", my_node -> id_run [i]); - printDebugMessage (mess); - } - if (my_node -> num_workers) - { - sprintf (mess, "I manage %d worker(s)", my_node -> num_workers); - printDebugMessage (mess); - } + if (isScheduleNode ()) + printDebugMessage ("I'am a scheduler"); + + for (unsigned i = 0; i < my_node -> id_run.size (); i ++) { + sprintf (mess, "I manage the runner %d", my_node -> id_run [i]); + printDebugMessage (mess); + } + + if (my_node -> num_workers) { + + sprintf (mess, "I manage %d worker(s)", my_node -> num_workers); + printDebugMessage (mess); + } closeXMLDocument (); } - diff --git a/trunk/paradiseo-peo/src/rmc/mpi/schema.h b/trunk/paradiseo-peo/src/rmc/mpi/schema.h index a67d7e851..57604e876 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/schema.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/schema.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -45,15 +45,15 @@ typedef int RANK_ID; -struct Node - { - - RANK_ID rk; /* Rank */ - std :: string name; /* Host name */ - unsigned num_workers; /* Number of parallel workers */ - int rk_sched; /* rank of the scheduler */ - std :: vector id_run; /* List of runners */ - }; +struct Node { + + RANK_ID rk; /* Rank */ + std :: string name; /* Host name */ + unsigned num_workers; /* Number of parallel workers */ + int rk_sched; /* rank of the scheduler */ + std :: vector id_run; /* List of runner def. IDs */ + std :: vector execution_id_run; /* List of runtime execution runner IDs */ +}; extern std :: vector the_schema; diff --git a/trunk/paradiseo-peo/src/rmc/mpi/send.cpp b/trunk/paradiseo-peo/src/rmc/mpi/send.cpp index 797ccf9f1..303953430 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/send.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/send.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -49,30 +49,26 @@ #define TO_ALL -1 -typedef struct - { +typedef struct { - Communicable * comm; - int to; - int tag; - - } -SEND_REQUEST; + Communicable * comm; + int to; + int tag; +} SEND_REQUEST; + static std :: queue mess; static sem_t sem_send; -void initSending () -{ +void initSending () { sem_init (& sem_send, 0, 1); } -void send (Communicable * __comm, int __to, int __tag) -{ +void send (Communicable * __comm, int __to, int __tag) { - SEND_REQUEST req; + SEND_REQUEST req; req.comm = __comm; req.to = __to; req.tag = __tag; @@ -83,70 +79,70 @@ void send (Communicable * __comm, int __to, int __tag) wakeUpCommunicator (); } -void sendToAll (Communicable * __comm, int __tag) -{ +void sendToAll (Communicable * __comm, int __tag) { send (__comm, TO_ALL, __tag); } -void sendMessages () -{ +extern void initializeContext (); + +void sendMessages () { sem_wait (& sem_send); - while (! mess.empty ()) - { + static bool contextInitialized = false; - SEND_REQUEST req = mess.front (); - /* - char b [1000]; - sprintf (b, "traitement send %d\n", req.tag); - printDebugMessage (b); - */ + if (! contextInitialized) { + contextInitialized = true; + initializeContext(); + } - Communicable * comm = req.comm; + while (! mess.empty ()) { + + SEND_REQUEST req = mess.front (); + + Communicable * comm = req.comm; - initMessage (); + initMessage (); - switch (req.tag) - { + switch (req.tag) { - case RUNNER_STOP_TAG: - dynamic_cast (comm) -> packTermination (); - dynamic_cast (comm) -> notifySendingTermination (); - break; + case RUNNER_STOP_TAG: + dynamic_cast (comm) -> packTermination (); + dynamic_cast (comm) -> notifySendingTermination (); + break; - case COOP_TAG: - dynamic_cast (comm) -> pack (); - dynamic_cast (comm) -> notifySending (); - break; + case COOP_TAG: + dynamic_cast (comm) -> pack (); + dynamic_cast (comm) -> notifySending (); + break; - case SCHED_REQUEST_TAG: - dynamic_cast (comm) -> packResourceRequest (); - dynamic_cast (comm) -> notifySendingResourceRequest (); - break; + case SCHED_REQUEST_TAG: + dynamic_cast (comm) -> packResourceRequest (); + dynamic_cast (comm) -> notifySendingResourceRequest (); + break; - case TASK_RESULT_TAG: - dynamic_cast (comm) -> packResult (); - dynamic_cast (comm) -> notifySendingResult (); - break; + case TASK_RESULT_TAG: + dynamic_cast (comm) -> packResult (); + dynamic_cast (comm) -> notifySendingResult (); + break; - case TASK_DONE_TAG: - dynamic_cast (comm) -> packTaskDone (); - dynamic_cast (comm) -> notifySendingTaskDone (); - break; + case TASK_DONE_TAG: + dynamic_cast (comm) -> packTaskDone (); + dynamic_cast (comm) -> notifySendingTaskDone (); + break; + + default : + break; - default : - break; + }; + + if (req.to == TO_ALL) + sendMessageToAll (req.tag); + else + sendMessage (req.to, req.tag); + mess.pop (); + } - }; - - if (req.to == TO_ALL) - sendMessageToAll (req.tag); - else - sendMessage (req.to, req.tag); - mess.pop (); - } - - sem_post (& sem_send); + sem_post (& sem_send); } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/send.h b/trunk/paradiseo-peo/src/rmc/mpi/send.h index deccf1799..b1bdc2300 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/send.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/send.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 diff --git a/trunk/paradiseo-peo/src/rmc/mpi/service.cpp b/trunk/paradiseo-peo/src/rmc/mpi/service.cpp index 8c7dbfa5d..f26f70b3d 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/service.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/service.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,16 +41,14 @@ #include "send.h" #include "scheduler.h" -void Service :: requestResourceRequest (unsigned __how_many) -{ +void Service :: requestResourceRequest (unsigned __how_many) { num_sent_rr = __how_many; for (unsigned i = 0; i < __how_many; i ++) send (this, my_node -> rk_sched, SCHED_REQUEST_TAG); } -void Service :: packResourceRequest () -{ +void Service :: packResourceRequest () { SCHED_REQUEST req; req.first = getNodeRank (); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/tags.h b/trunk/paradiseo-peo/src/rmc/mpi/tags.h index 419d5bd18..4325e6a51 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/tags.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/tags.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -37,6 +37,8 @@ #ifndef __tags_h #define __tags_h +#define EXECUTION_CONTEXT_TAG 1000 + #define RUNNER_STOP_TAG 13 #define COOP_TAG 14 diff --git a/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp b/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp index bace07829..53ad72925 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/worker.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -46,88 +46,76 @@ static std :: vector key_to_worker (1); /* Vector of registered workers */ -Worker * getWorker (WORKER_ID __key) -{ +Worker * getWorker (WORKER_ID __key) { - return key_to_worker [__key]; + return key_to_worker [__key]; } -Worker :: Worker () -{ - +Worker :: Worker () { + toto = false; id = key_to_worker.size (); key_to_worker.push_back (this); } -void Worker :: packResult () -{ - +void Worker :: packResult () { + pack (serv_id); - serv -> packResult (); + serv -> packResult (); } -void Worker :: unpackData () -{ +void Worker :: unpackData () { printDebugMessage ("unpacking the ID. of the service."); unpack (serv_id); - serv = getService (serv_id); + serv = getService (serv_id); printDebugMessage ("found the service."); - serv -> unpackData (); + serv -> unpackData (); printDebugMessage ("unpacking the data."); setActive (); } -void Worker :: packTaskDone () -{ +void Worker :: packTaskDone () { pack (getNodeRank ()); pack (id); } -void Worker :: notifySendingResult () -{ +void Worker :: notifySendingResult () { /* Notifying the scheduler of the termination */ toto = true; wakeUp (); } -void Worker :: notifySendingTaskDone () -{ +void Worker :: notifySendingTaskDone () { setPassive (); } - -void Worker :: setSource (int __rank) -{ + +void Worker :: setSource (int __rank) { src = __rank; } -void Worker :: start () -{ +void Worker :: start () { - while (true) - { + while (true) { + + sleep (); - sleep (); - - if (! atLeastOneActiveRunner ()) - break; - - if (toto) - { - send (this, my_node -> rk_sched, TASK_DONE_TAG); - toto = false; - } - else - { - - printDebugMessage ("executing the task."); - serv -> execute (); - send (this, src, TASK_RESULT_TAG); - } + if (! atLeastOneActiveRunner ()) + break; + + if (toto) { + send (this, my_node -> rk_sched, TASK_DONE_TAG); + toto = false; } + else { + + printDebugMessage ("executing the task."); + serv -> execute (); + send (this, src, TASK_RESULT_TAG); + } + } } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/worker.h b/trunk/paradiseo-peo/src/rmc/mpi/worker.h index 008812e54..43c4ec62c 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/worker.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/worker.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -41,38 +41,37 @@ #include "../../core/reac_thread.h" #include "../../core/service.h" -typedef unsigned WORKER_ID; +typedef unsigned WORKER_ID; -class Worker : public Communicable, public ReactiveThread - { +class Worker : public Communicable, public ReactiveThread { - public : +public : - Worker (); + Worker (); - void start (); + void start (); - void packResult (); + void packResult (); - void unpackData (); + void unpackData (); - void packTaskDone (); + void packTaskDone (); - void notifySendingResult (); + void notifySendingResult (); - void notifySendingTaskDone (); + void notifySendingTaskDone (); + + void setSource (int __rank); + +private : - void setSource (int __rank); + WORKER_ID id; + SERVICE_ID serv_id; + Service * serv; + int src; - private : - - WORKER_ID id; - SERVICE_ID serv_id; - Service * serv; - int src; - - bool toto; - }; + bool toto; +}; extern Worker * getWorker (WORKER_ID __key); diff --git a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp index ddfd4a770..1f044ba90 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp +++ b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.cpp @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007 @@ -40,59 +40,51 @@ static xmlTextReaderPtr reader; -void openXMLDocument (const char * __filename) -{ - +void openXMLDocument (const char * __filename) { + reader = xmlNewTextReaderFilename (__filename); - - if (! reader) - { - - fprintf (stderr, "unable to open '%s'.\n", __filename); - exit (1); - } + + if (! reader) { + + fprintf (stderr, "unable to open '%s'.\n", __filename); + exit (1); + } } -void closeXMLDocument () -{ +void closeXMLDocument () { xmlFreeTextReader (reader); } -std :: string getAttributeValue (const std :: string & __attr) -{ - +std :: string getAttributeValue (const std :: string & __attr) { + xmlChar * value = xmlTextReaderGetAttribute (reader, (const xmlChar *) __attr.c_str ()); - + std :: string str ((const char *) value); - + xmlFree (value); - + return str; } -static bool isSep (const xmlChar * __text) -{ - +static bool isSep (const xmlChar * __text) { + for (unsigned i = 0; i < strlen ((char *) __text); i ++) if (__text [i] != ' ' && __text [i] != '\t' && __text [i] != '\n') return false; return true; } -std :: string getNextNode () -{ - +std :: string getNextNode () { + xmlChar * name, * value; - do - { - xmlTextReaderRead (reader); - name = xmlTextReaderName (reader); - value = xmlTextReaderValue (reader); - // printf ("value = %s\n", value); - } - while (! strcmp ((char *) name, "#text") && isSep (value)); + do { + xmlTextReaderRead (reader); + name = xmlTextReaderName (reader); + value = xmlTextReaderValue (reader); + // printf ("value = %s\n", value); + } while (! strcmp ((char *) name, "#text") && isSep (value)); std :: string str; @@ -100,12 +92,12 @@ std :: string getNextNode () str.assign ((char *) name); else str.assign ((char *) value); - + if (name) xmlFree (name); if (value) xmlFree (value); - + return str; } diff --git a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h index 89cc7b5be..b54fbeed9 100644 --- a/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h +++ b/trunk/paradiseo-peo/src/rmc/mpi/xml_parser.h @@ -1,4 +1,4 @@ -/* +/* * * Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2006-2007 * (C) OPAC Team, LIFL, 2002-2007