PaCO++
0.05
|
00001 #ifndef LIBGRAPH_COMSCHEDULE_IS_DEFINED 00002 #define LIBGRAPH_COMSCHEDULE_IS_DEFINED 00003 00004 #include <kbps.h> 00005 #include <CommunicationScheduling.h> 00006 00007 class paco_comSchedule_libgraph : public paco_comSchedule 00008 { 00009 protected: 00010 kbps_approximation* _kbps; 00011 00012 unsigned int* _tmp_idx; // helper array for phase,id -> k 00013 inline unsigned int _idx(const unsigned phase, const unsigned id) 00014 { 00015 return _tmp_idx[phase]+id; 00016 } 00017 00018 public: 00019 paco_comSchedule_libgraph(kbps_approximation* k) : _kbps(k), _tmp_idx(NULL) {} 00020 00021 kbps_approximation* get_kbps() const { return _kbps; } 00022 00023 void build_idx() 00024 { 00025 if (_tmp_idx) { 00026 delete[] _tmp_idx; 00027 } 00028 00029 _tmp_idx = new unsigned int[this->getNbPhases()]; 00030 _tmp_idx[0]=0; 00031 for(unsigned i=1;i<getNbPhases(); i++) 00032 _tmp_idx[i]=_tmp_idx[i-1]+getElementPhase(i-1); 00033 } 00034 00035 unsigned int getNbPhases() { 00036 return _kbps->infophases[0]; 00037 } 00038 unsigned int getElementPhase(const unsigned phase) 00039 { 00040 return _kbps->infophases[phase+1]; 00041 } 00042 unsigned int getSrc(const unsigned phase, const unsigned id) 00043 { 00044 return _kbps->comms[_idx(phase, id)].src; 00045 } 00046 unsigned int getDst(const unsigned phase, const unsigned id) 00047 { 00048 return _kbps->comms[_idx(phase, id)].dst; 00049 } 00050 unsigned int getSize(const unsigned phase, const unsigned id) 00051 { 00052 return _kbps->comms[_idx(phase, id)].weight; 00053 } 00054 00055 void* getInfo(const unsigned phase, const unsigned id) 00056 { 00057 return _kbps->comms[_idx(phase, id)].info; 00058 } 00059 00060 }; 00061 00062 class paco_comScheduling_libgraph : public paco_comScheduling 00063 { 00064 public: 00065 00066 paco_comScheduling_libgraph(); 00067 virtual ~paco_comScheduling_libgraph(); 00068 00069 void set_beta(unsigned int beta); // reset all schedule memory (but no communication memory) 00070 void set_k(unsigned int k); // reset all schedule memory (but no communication memory) 00071 00072 unsigned int get_beta(); 00073 unsigned int get_k(); 00074 00075 paco_comSchedule* computeScheduling(unsigned rank, 00076 PaCO::PacoTopology_t* srctopo, PaCO::PacoTopology_t* dsttopo, 00077 unsigned **com_matrix, void** info_vector[]); 00078 00079 protected: 00081 virtual void initializeBigraph(PaCO::PacoTopology_t* srctopo, PaCO::PacoTopology_t* dsttopo); 00082 00083 unsigned int _beta; 00084 unsigned int _k; 00085 00086 bigraph * _g; // MUST be configured only by configureLibGraph 00087 node ** _client_nodes; 00088 node ** _server_nodes; 00089 00090 }; 00091 00092 class paco_libgraph_fabrique : virtual public paco_fabrique_comScheduling 00093 { 00094 public: 00095 paco_comScheduling *create_comScheduling() { 00096 return new paco_comScheduling_libgraph(); 00097 } 00098 }; 00099 00100 #endif