PaCO++  0.05
CommunicationScheduling.h
Go to the documentation of this file.
00001 #ifndef COMMUNICATION_SCHEDULING_IS_DEFINED
00002 #define COMMUNICATION_SCHEDULING_IS_DEFINED
00003 
00004 #include "FabriqueManagerTpl.h"
00005 #include "PaCO++_types.h"
00006 #include "PaCO++_operation.h"
00007 #include "com/paco_com.h"
00008 
00009 // Abstract class to be implemeted by each scheduling lib
00010 
00012 class paco_comSchedule
00013 {
00014 public:
00015 
00016   virtual unsigned int getNbPhases()=0;
00017   virtual unsigned int getElementPhase(const unsigned phase)=0;
00018   virtual unsigned int getSrc(const unsigned phase, const unsigned id)=0;
00019   virtual unsigned int getDst(const unsigned phase, const unsigned id)=0;
00020   virtual unsigned int getSize(const unsigned phase, const unsigned id)=0;
00021   virtual        void* getInfo(const unsigned phase, const unsigned id)=0;
00022 
00023 };
00024 
00025 // Abstract class to be implemeted by each scheduling lib
00027 class paco_comScheduling
00028 {
00029 
00030 public:
00031   paco_comScheduling();
00032   virtual ~paco_comScheduling();
00033 
00034   virtual paco_comSchedule* computeScheduling(unsigned rank, 
00035                      PaCO::PacoTopology_t* srctopo, PaCO::PacoTopology_t* dsttopo,
00036                      unsigned **com_matrix, void** info_vector[])=0;
00037 
00039   paco_comSchedule* getSchedule(long id);
00040 
00041   virtual void setSchedule(long id, paco_comSchedule* cs);
00042 
00043   virtual void clearScheduleId(long id) throw (InvalidArgument);
00044 
00045   virtual void clearAllSchedules();
00046 
00047   virtual void propageComMatrix(PaCO_operation* op, unsigned **comMatrix);
00048   
00049   virtual void displayStatus();
00050 
00051 protected:
00052   PaCO::PacoTopology_t* _client_topo;
00053   PaCO::PacoTopology_t* _server_topo;
00054 
00055   // Save scheduling 
00056   typedef map<long, paco_comSchedule*> _schedule_info_map_t;
00057   _schedule_info_map_t _schedule_info_map;    // the map of predefined schedules
00058 
00059 };
00060 
00061 // Abstract fabrique class for communication scheduling
00062 class paco_fabrique_comScheduling
00063 {
00064 public:
00065   virtual ~paco_fabrique_comScheduling() {}
00066   virtual paco_comScheduling* create_comScheduling()=0;
00067 };
00068 
00069 // The scheduling fabrique
00070 typedef paco_fabrique_manager_tpl<paco_fabrique_comScheduling> paco_fabrique_manager_comScheduling;
00071 
00072 #endif