PaCO++
0.05
|
00001 #ifndef DIRECT_COMSCHEDULE_IS_DEFINED 00002 #define DIRECT_COMSCHEDULE_IS_DEFINED 00003 00004 #include <CommunicationScheduling.h> 00005 00006 class paco_comSchedule_direct : public paco_comSchedule 00007 { 00008 protected: 00009 unsigned _myrank; 00010 unsigned _nbelement; 00011 unsigned *_dst; 00012 unsigned *_len; 00013 void* *_inf; 00014 00015 public: 00016 paco_comSchedule_direct(int rank, int max, unsigned *loca_com_vector, void** info_vector[]); 00017 virtual ~paco_comSchedule_direct(); 00018 00019 unsigned int getNbPhases() { return 1; } 00020 unsigned int getElementPhase(const unsigned phase) { return _nbelement; } 00021 unsigned int getSrc(const unsigned phase, const unsigned id) { return _myrank; } 00022 unsigned int getDst(const unsigned phase, const unsigned id) { return _dst[id]; } 00023 unsigned int getSize(const unsigned phase, const unsigned id) { return _len[id]; } 00024 void* getInfo(const unsigned phase, const unsigned id) { return _inf[id]; } 00025 }; 00026 00027 class paco_comScheduling_direct : public paco_comScheduling 00028 { 00029 00030 public: 00031 paco_comScheduling_direct() {}; 00032 virtual ~paco_comScheduling_direct(); 00033 00034 paco_comSchedule* computeScheduling(unsigned rank, 00035 PaCO::PacoTopology_t* srctopo, PaCO::PacoTopology_t* dsttopo, 00036 unsigned **com_matrix, void** info_vector[]); 00037 00038 void propageComMatrix(PaCO_operation* op, unsigned **comMatrix) { /* overloading all-2-all: no propagation needed for direct */} 00039 00040 }; 00041 00042 class paco_direct_fabrique : public paco_fabrique_comScheduling 00043 { 00044 public: 00045 paco_comScheduling *create_comScheduling() { 00046 return new paco_comScheduling_direct(); 00047 } 00048 }; 00049 00050 #endif