00001
00009 #ifndef _GRAPHROUTER_H
00010 #define _GRAPHROUTER_H
00011
00012 #include <math.h>
00013
00014 #include "petable.h"
00015
00016 #include "persistent.h"
00017
00018 class TopologyDescriptor {
00019 public:
00020
00021
00022 virtual void getNeighbors(int &npes, int *pelist) = 0;
00023 virtual int getNumStages() = 0;
00024 virtual int getNumSteps(int stage) = 0;
00025 virtual void getPesToSend(int step, int stage, int &npesToSend,
00026 int *pelist, int &nextpe) = 0;
00027 virtual int getNumMessagesExpected(int stage) = 0;
00028 };
00029
00032
00034 class GraphRouter : public Router
00035 {
00036 PeTable *PeGraph;
00037 TopologyDescriptor *tp;
00038
00039 int *pesToSend, *gpes;
00040 int numNeighbors, *neighborPeList, nstages;
00041
00042 int MyPe, NumPes, currentIteration;
00043 int *recvExpected, *recvCount;
00044 int curStage, *stageComplete;
00045
00046 void sendMessages(comID id, int stage);
00047 void init(int numPes, int myPe, TopologyDescriptor *tp);
00048
00049 #if CMK_PERSISTENT_COM
00050 PersistentHandle *handlerArrayOdd, *handlerArrayEven;
00051 #endif
00052
00053 public:
00054 GraphRouter(int numPes, int myPe, Strategy*);
00055
00056 ~GraphRouter();
00057
00058
00059
00060 void NumDeposits(comID, int);
00061 void EachToAllMulticast(comID , int , void *, int);
00062 void EachToManyMulticast(comID , int , void *, int, int *, int);
00063 void RecvManyMsg(comID, char *);
00064 void ProcManyMsg(comID, char *);
00065 void DummyEP(comID id, int);
00066
00067 void SetMap(int *);
00068 };
00069
00070 #endif
00071