PaCO++
0.05
|
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