PaCO++  0.05
paco_direct_comScheduling.h
Go to the documentation of this file.
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