Remove archaic CVS keyword header comment blocks
[charm.git] / src / conv-ldb / cldb.rand.c
1 #include "converse.h"
2 #include "queueing.h"
3 #include "cldb.h"
4 #include <stdlib.h>
5
6 void LoadNotifyFn(int l)
7 {
8 }
9
10 char *CldGetStrategy(void)
11 {
12   return "rand";
13 }
14
15 void CldHandler(char *msg)
16 {
17   int len, queueing, priobits;
18   unsigned int *prioptr; CldInfoFn ifn; CldPackFn pfn;
19   CldRestoreHandler(msg);
20   ifn = (CldInfoFn)CmiHandlerToFunction(CmiGetInfo(msg));
21   ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
22   CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
23 }
24
25 void CldEnqueueGroup(CmiGroup grp, void *msg, int infofn)
26 {
27   int len, queueing, priobits,i; unsigned int *prioptr;
28   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
29   CldPackFn pfn;
30   ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
31   if (pfn) {
32     pfn(&msg);
33     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
34   }
35   CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
36   CmiSetInfo(msg,infofn);
37
38   CmiSyncMulticastAndFree(grp, len, msg);
39 }
40
41 void CldEnqueueMulti(int npes, int *pes, void *msg, int infofn)
42 {
43   int len, queueing, priobits,i; unsigned int *prioptr;
44   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
45   CldPackFn pfn;
46   ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
47   if (pfn) {
48     pfn(&msg);
49     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
50   }
51   CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
52   CmiSetInfo(msg,infofn);
53
54   /*
55   for(i=0;i<npes;i++) {
56     CmiSyncSend(pes[i], len, msg);
57   }
58   CmiFree(msg);
59   */
60
61   CmiSyncListSendAndFree(npes, pes, len, msg);
62 }
63
64 void CldEnqueue(int pe, void *msg, int infofn)
65 {
66   int len, queueing, priobits; unsigned int *prioptr;
67   CldInfoFn ifn;
68   CldPackFn pfn;
69   if (pe == CLD_ANYWHERE) {
70     pe = (((CrnRand()+CmiMyPe())&0x7FFFFFFF)%CmiNumPes());
71       /* optimizationfor SMP */
72 #if CMK_NODE_QUEUE_AVAILABLE
73     if (CmiNodeOf(pe) == CmiMyNode()) {
74       CldNodeEnqueue(CmiMyNode(), msg, infofn);
75       return;
76     }
77 #endif
78     if (pe != CmiMyPe())
79       CpvAccess(CldRelocatedMessages)++;
80   }
81   ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
82   if (pe == CmiMyPe() && !CmiImmIsRunning()) {
83     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
84     /* CsdEnqueueGeneral is not thread or SIGIO safe */
85     //CmiPrintf("   myself processor %d ==> %d, length=%d Timer:%f , priori=%d \n", CmiMyPe(), pe, len, CmiWallTimer(), *prioptr);
86     CsdEnqueueGeneral(msg, queueing, priobits, prioptr);
87   } else {
88     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
89     if (pfn && CmiNodeOf(pe) != CmiMyNode()) {
90       pfn(&msg);
91       ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
92     }
93     CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
94     CmiSetInfo(msg,infofn);
95     if (pe==CLD_BROADCAST) { CmiSyncBroadcastAndFree(len, msg); }
96     else if (pe==CLD_BROADCAST_ALL) { CmiSyncBroadcastAllAndFree(len, msg); }
97     else {
98         //CmiPrintf("   processor %d ==> %d, length=%d Timer:%f , priori=%d \n", CmiMyPe(), pe, len, CmiWallTimer(), *prioptr);
99         CmiSyncSendAndFree(pe, len, msg);
100     }
101   }
102 }
103
104 void CldNodeEnqueue(int node, void *msg, int infofn)
105 {
106   int len, queueing, priobits; unsigned int *prioptr;
107   CldInfoFn ifn = (CldInfoFn)CmiHandlerToFunction(infofn);
108   CldPackFn pfn;
109   if (node == CLD_ANYWHERE) {
110     node = (((CrnRand()+CmiMyNode())&0x7FFFFFFF)%CmiNumNodes());
111     if (node != CmiMyNode())
112       CpvAccess(CldRelocatedMessages)++;
113   }
114   if (node == CmiMyNode() && !CmiImmIsRunning()) {
115     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
116     CsdNodeEnqueueGeneral(msg, queueing, priobits, prioptr);
117   } else {
118     ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
119     if (pfn) {
120       pfn(&msg);
121       ifn(msg, &pfn, &len, &queueing, &priobits, &prioptr);
122     }
123     CldSwitchHandler(msg, CpvAccess(CldHandlerIndex));
124     CmiSetInfo(msg,infofn);
125     if (node==CLD_BROADCAST) { CmiSyncNodeBroadcastAndFree(len, msg); }
126     else if (node==CLD_BROADCAST_ALL){CmiSyncNodeBroadcastAllAndFree(len,msg);}
127     else CmiSyncNodeSendAndFree(node, len, msg);
128   }
129 }
130
131 void CldModuleInit(char **argv)
132 {
133   CpvInitialize(int, CldHandlerIndex);
134   CpvAccess(CldHandlerIndex) = CmiRegisterHandler((CmiHandler)CldHandler);
135   CpvInitialize(int, CldRelocatedMessages);
136   CpvInitialize(int, CldLoadBalanceMessages);
137   CpvInitialize(int, CldMessageChunks);
138   CpvAccess(CldRelocatedMessages) = CpvAccess(CldLoadBalanceMessages) = 
139     CpvAccess(CldMessageChunks) = 0;
140   CldModuleGeneralInit(argv);
141 }
142
143 void CldCallback()
144 {}