
00001 00010 #ifndef ROUTER_STRATEGY 00011 #define ROUTER_STRATEGY 00012 00013 #include "convcomlibmanager.h" 00014 #include "router.h" 00015 00016 void routerProcManyCombinedMsg(char *msg); 00017 void routerRecvManyCombinedMsg(char *msg); 00018 void routerDummyMsg(DummyMsg *msg); 00019 00033 class RouterStrategy : public Strategy { 00034 00035 Router * router; 00036 CkQ<MessageHolder *> msgQ; 00037 CkQ<char *> recvQ, procQ; 00038 CkQ<DummyMsg *> dummyQ; 00039 00040 comID id; 00043 int *pelist; 00045 int npes; 00047 int *srcPelist; 00049 int nsrcPes; 00051 int *destPelist; 00053 int ndestPes; 00054 00057 int *procMap; 00059 int *bcast_pemap; 00062 int myPe; 00064 int routerID; 00065 00066 int doneHandle; //Array strategy done handle 00067 //int myDoneHandle; //my own done handle, which will inturn call 00068 //array strategy done handle 00069 00070 int doneFlag, bufferedDoneInserting; 00071 00076 int *newKnowledge; 00078 int newKnowledgeSize; 00080 int *newKnowledgeSrc; 00082 int newKnowledgeSrcSize; 00084 int *newKnowledgeDest; 00086 int newKnowledgeDestSize; 00087 00088 void setReverseMap(); 00089 00090 protected: 00094 RouterStrategy(int stratid); 00095 00099 int routerIDsaved; 00100 00101 char isAllToAll() {return id.isAllToAll;} 00102 public: 00112 RouterStrategy(int stratid, int handle, int nsrc, int *srclist, int ndest=0, int *destlist=0); 00113 RouterStrategy(CkMigrateMessage *m): Strategy(m) { 00114 ComlibPrintf("[%d] RouterStrategy migration constructor\n",CkMyPe()); 00115 } 00116 void setupRouter(); 00117 00118 ~RouterStrategy(); 00119 00120 Router *getRouter() {return router;} 00121 comID &getComID() {return id;} 00122 00123 //Insert messages 00124 virtual void insertMessage(MessageHolder *msg); 00125 //Finished inserting 00126 virtual void doneInserting(); 00127 00129 virtual void handleMessage(void *m) { 00130 CmiAbort("No message should go through RoutingStrategy::handleMessage\n"); 00131 } 00132 00133 // In converse simply call CmiSyncSendAndFree 00134 virtual void deliver(char *, int); 00135 //{ CmiAbort("No message should go through RoutingStrategy::deliver\n"); 00136 //} 00137 00138 void bracketedUpdatePeKnowledge(int *count); 00139 00140 00141 virtual void notifyDone(); 00142 00143 int * getProcMap() {return procMap;} 00144 00145 virtual void pup(PUP::er &p); 00146 PUPable_decl(RouterStrategy); 00147 }; 00148 00149 00150 00151 #endif 00152
1.5.5