modified the registration of the converse handlers for propagate and propagate_frag.
[charm.git] / src / conv-com / gridrouter.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #ifndef _GRIDROUTER_H
9 #define _GRIDROUTER_H
10
11 #include <math.h>
12 #include <converse.h>
13 #include "comlib.h"
14 #include "petable.h"
15
16 #define ROWLEN COLLEN
17 #define RowLen(pe) ColLen(pe)
18 #define PELISTSIZE ((ROWLEN-1)/sizeof(int)+1)
19
20 inline int ColLen(int npes)
21 {
22   int len= (int)sqrt((double)npes);
23   if (npes > (len*len)) len++;
24   return(len);
25 }
26
27 inline int Expect(int pe, int npes)
28 {
29   int i, len=ColLen(npes);
30   for (i=len-1;i>=0;i--) {
31         int myrow=pe/len;
32         int toprep=i*len;
33         int offset=pe-myrow*len;
34         if ((toprep+offset) <= (npes-1)) return(i+1);
35   }
36   return(len);
37 }
38
39 #include "persistent.h"
40
41 //Grid based router
42 class GridRouter : public Router
43 {
44  private:
45     PeTable *PeMesh, *PeMesh1, *PeMesh2;
46     int *onerow, *gpes, 
47         *rowVector, *colVector, 
48         *growVector, *gcolVector;
49
50     int myrow, mycol;
51     int rvecSize, cvecSize;
52     int MyPe, NumPes, COLLEN;
53     int LPMsgCount, LPMsgExpected;
54     int recvExpected, recvCount;
55     void InitVars();
56     void LocalProcMsg(comID id); 
57     void sendRow(comID id);
58     
59  public:
60     GridRouter(int, int);
61     ~GridRouter();
62     void NumDeposits(comID, int);
63     
64     void EachToAllMulticast(comID , int , void *, int);
65     void EachToManyMulticast(comID , int , void *, int, int *, int);
66     void EachToManyMulticastQ(comID id, CkQ<MessageHolder *> &msgq);
67         
68     void RecvManyMsg(comID, char *);
69     void ProcManyMsg(comID, char *);
70     void DummyEP(comID id, int);
71     void ProcMsg(int, msgstruct **) {;}
72     void SetMap(int *);
73 };
74
75 #endif