| rev |
line source |
|
Me@6
|
1 /*
|
|
Me@6
|
2 * Copyright 2009 OpenSourceStewardshipFoundation.org
|
|
Me@6
|
3 * Licensed under GNU General Public License version 2
|
|
Me@6
|
4 *
|
|
Me@6
|
5 * Author: seanhalle@yahoo.com
|
|
Me@6
|
6 *
|
|
Me@6
|
7 */
|
|
Me@6
|
8
|
|
Me@6
|
9 #ifndef _SSR_H
|
|
Me@6
|
10 #define _SSR_H
|
|
Me@6
|
11
|
|
Me@6
|
12 #include "VMS/Queue_impl/PrivateQueue.h"
|
|
Me@6
|
13 #include "VMS/Hash_impl/PrivateHash.h"
|
|
Me@6
|
14 #include "VMS/VMS.h"
|
|
Nina@39
|
15 #include "dependency.h"
|
|
Me@6
|
16
|
|
Me@17
|
17
|
|
Me@17
|
18 //===========================================================================
|
|
Me@17
|
19 #define NUM_STRUCS_IN_SEM_ENV 1000
|
|
Me@17
|
20
|
|
Me@17
|
21 //===========================================================================
|
|
Me@6
|
22 /*This header defines everything specific to the SSR semantic plug-in
|
|
Me@6
|
23 */
|
|
Me@6
|
24 typedef struct _SSRSemReq SSRSemReq;
|
|
Me@17
|
25 typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master
|
|
Me@17
|
26 //===========================================================================
|
|
Me@6
|
27
|
|
Me@6
|
28 /*Semantic layer-specific data sent inside a request from lib called in app
|
|
Me@6
|
29 * to request handler called in MasterLoop
|
|
Me@6
|
30 */
|
|
Me@21
|
31
|
|
Me@21
|
32 typedef struct
|
|
Me@21
|
33 {
|
|
Me@21
|
34 VirtProcr *VPCurrentlyExecuting;
|
|
Me@21
|
35 PrivQueueStruc *waitingVPQ;
|
|
Me@21
|
36 }
|
|
Me@21
|
37 SSRTrans;
|
|
Me@21
|
38
|
|
msach@24
|
39 /*WARNING: assembly hard-codes position of endInstrAddr as first field
|
|
msach@24
|
40 */
|
|
Me@21
|
41 typedef struct
|
|
Me@21
|
42 {
|
|
Me@22
|
43 void *endInstrAddr;
|
|
Me@21
|
44 int32 hasBeenStarted;
|
|
Me@21
|
45 int32 hasFinished;
|
|
Me@21
|
46 PrivQueueStruc *waitQ;
|
|
Me@21
|
47 }
|
|
Me@21
|
48 SSRSingleton;
|
|
Me@21
|
49
|
|
Me@6
|
50 enum SSRReqType
|
|
Me@6
|
51 {
|
|
Me@6
|
52 send_type = 1,
|
|
Me@6
|
53 send_from_to,
|
|
Me@6
|
54 receive_any, //order and grouping matter -- send before receive
|
|
Me@6
|
55 receive_type, // and receive_any first of the receives -- Handlers
|
|
Me@6
|
56 receive_from_to,// rely upon this ordering of enum
|
|
Me@6
|
57 transfer_to,
|
|
Me@17
|
58 transfer_out,
|
|
Me@17
|
59 malloc_req,
|
|
Me@17
|
60 free_req,
|
|
Me@21
|
61 singleton_fn_start,
|
|
Me@21
|
62 singleton_fn_end,
|
|
Me@21
|
63 singleton_data_start,
|
|
Me@21
|
64 singleton_data_end,
|
|
Me@17
|
65 atomic,
|
|
Me@17
|
66 trans_start,
|
|
Me@17
|
67 trans_end
|
|
Me@6
|
68 };
|
|
Me@6
|
69
|
|
Me@6
|
70 struct _SSRSemReq
|
|
Me@6
|
71 { enum SSRReqType reqType;
|
|
Me@17
|
72 VirtProcr *sendPr;
|
|
Me@17
|
73 VirtProcr *receivePr;
|
|
Me@17
|
74 int32 msgType;
|
|
Me@17
|
75 void *msg;
|
|
Me@6
|
76 SSRSemReq *nextReqInHashEntry;
|
|
Me@17
|
77
|
|
Me@17
|
78 void *initData;
|
|
Me@17
|
79 VirtProcrFnPtr fnPtr;
|
|
Me@17
|
80 int32 coreToScheduleOnto;
|
|
Me@17
|
81
|
|
Me@17
|
82 int32 sizeToMalloc;
|
|
Me@17
|
83 void *ptrToFree;
|
|
Me@17
|
84
|
|
Me@17
|
85 int32 singletonID;
|
|
Me@22
|
86 SSRSingleton **singletonPtrAddr;
|
|
Me@17
|
87
|
|
Me@17
|
88 PtrToAtomicFn fnToExecInMaster;
|
|
Me@17
|
89 void *dataForFn;
|
|
Me@17
|
90
|
|
Me@17
|
91 int32 transID;
|
|
Me@6
|
92 }
|
|
Me@6
|
93 /* SSRSemReq */;
|
|
Me@6
|
94
|
|
Me@17
|
95
|
|
Me@17
|
96 typedef struct
|
|
Me@17
|
97 {
|
|
Me@6
|
98 PrivQueueStruc **readyVPQs;
|
|
Me@14
|
99 HashTable *commHashTbl;
|
|
Me@14
|
100 int32 numVirtPr;
|
|
Me@14
|
101 int32 nextCoreToGetNewPr;
|
|
Me@14
|
102 int32 primitiveStartTime;
|
|
Me@17
|
103
|
|
Me@17
|
104 //fix limit on num with dynArray
|
|
Me@21
|
105 SSRSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
|
|
Me@17
|
106 SSRTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
|
|
Nina@39
|
107
|
|
Nina@39
|
108 #ifdef OBSERVE_UCC
|
|
nengel@47
|
109 ListOfArrays* unitList;
|
|
nengel@46
|
110 ListOfArrays* ctlDependenciesList;
|
|
nengel@46
|
111 ListOfArrays* commDependenciesList;
|
|
nengel@48
|
112 NtoN** ntonGroups;
|
|
nengel@48
|
113 PrivDynArrayInfo* ntonGroupsInfo;
|
|
nengel@49
|
114 ListOfArrays* dynDependenciesList;
|
|
nengel@49
|
115 Unit last_in_slot[NUM_CORES * NUM_SCHED_SLOTS];
|
|
nengel@49
|
116 ListOfArrays* hwArcs;
|
|
Nina@39
|
117 #endif
|
|
nengel@50
|
118
|
|
nengel@50
|
119 #ifdef MEAS__PERF_COUNTERS
|
|
nengel@50
|
120 ListOfArrays* counterList;
|
|
nengel@50
|
121 #endif
|
|
Me@6
|
122 }
|
|
Me@6
|
123 SSRSemEnv;
|
|
Me@6
|
124
|
|
Me@6
|
125
|
|
Me@17
|
126 typedef struct _TransListElem TransListElem;
|
|
Me@17
|
127 struct _TransListElem
|
|
Me@17
|
128 {
|
|
Me@17
|
129 int32 transID;
|
|
Me@17
|
130 TransListElem *nextTrans;
|
|
Me@17
|
131 };
|
|
Me@18
|
132 //TransListElem
|
|
Me@18
|
133
|
|
Me@17
|
134 typedef struct
|
|
Me@17
|
135 {
|
|
Me@17
|
136 int32 highestTransEntered;
|
|
Me@17
|
137 TransListElem *lastTransEntered;
|
|
Me@17
|
138 }
|
|
Me@17
|
139 SSRSemData;
|
|
Me@17
|
140
|
|
Me@6
|
141 //===========================================================================
|
|
Me@6
|
142
|
|
Me@6
|
143 void
|
|
Me@6
|
144 SSR__create_seed_procr_and_do_work( VirtProcrFnPtr fn, void *initData );
|
|
Me@6
|
145
|
|
Me@14
|
146 int32
|
|
Me@14
|
147 SSR__giveMinWorkUnitCycles( float32 percentOverhead );
|
|
Me@14
|
148
|
|
Me@20
|
149 void
|
|
Me@14
|
150 SSR__start_primitive();
|
|
Me@14
|
151
|
|
Me@20
|
152 int32
|
|
Me@14
|
153 SSR__end_primitive_and_give_cycles();
|
|
Me@14
|
154
|
|
Me@16
|
155 int32
|
|
Me@16
|
156 SSR__giveIdealNumWorkUnits();
|
|
Me@14
|
157
|
|
Me@17
|
158 int32
|
|
Me@17
|
159 SSR__give_number_of_cores_to_schedule_onto();
|
|
Me@17
|
160
|
|
Me@6
|
161 //=======================
|
|
Me@6
|
162
|
|
Me@6
|
163 void
|
|
Me@6
|
164 SSR__init();
|
|
Me@6
|
165
|
|
Me@6
|
166 void
|
|
Me@6
|
167 SSR__cleanup_after_shutdown();
|
|
Me@6
|
168
|
|
Me@6
|
169 //=======================
|
|
Me@6
|
170
|
|
Me@20
|
171 VirtProcr *
|
|
Me@6
|
172 SSR__create_procr_with( VirtProcrFnPtr fnPtr, void *initData,
|
|
Me@6
|
173 VirtProcr *creatingPr );
|
|
Me@6
|
174
|
|
Me@20
|
175 VirtProcr *
|
|
Me@17
|
176 SSR__create_procr_with_affinity( VirtProcrFnPtr fnPtr, void *initData,
|
|
Me@17
|
177 VirtProcr *creatingPr, int32 coreToScheduleOnto);
|
|
Me@17
|
178
|
|
Me@6
|
179 void
|
|
Me@6
|
180 SSR__dissipate_procr( VirtProcr *procrToDissipate );
|
|
Me@6
|
181
|
|
Me@6
|
182 //=======================
|
|
Me@6
|
183 void *
|
|
Me@17
|
184 SSR__malloc_to( int numBytes, VirtProcr *ownerPr );
|
|
Me@17
|
185
|
|
Me@17
|
186 void
|
|
Me@17
|
187 SSR__free( void *ptrToFree, VirtProcr *owningPr );
|
|
Me@6
|
188
|
|
Me@6
|
189 void
|
|
Me@6
|
190 SSR__transfer_ownership_of_from_to( void *data, VirtProcr *oldOwnerPr,
|
|
Me@6
|
191 VirtProcr *newOwnerPr );
|
|
Me@6
|
192
|
|
Me@6
|
193 void
|
|
Me@6
|
194 SSR__add_ownership_by_to( VirtProcr *newOwnerPr, void *data );
|
|
Me@6
|
195
|
|
Me@6
|
196 void
|
|
Me@6
|
197 SSR__remove_ownership_by_from( VirtProcr *loserPr, void *dataLosing );
|
|
Me@6
|
198
|
|
Me@6
|
199 void
|
|
Me@6
|
200 SSR__transfer_ownership_to_outside( void *dataToTransferOwnershipOf );
|
|
Me@6
|
201
|
|
Me@6
|
202
|
|
Me@6
|
203
|
|
Me@6
|
204 //=======================
|
|
Me@6
|
205 void
|
|
Me@6
|
206 SSR__send_of_type_to( VirtProcr *sendPr, void *msg, const int type,
|
|
Me@6
|
207 VirtProcr *receivePr);
|
|
Me@6
|
208
|
|
Me@6
|
209 void
|
|
Me@6
|
210 SSR__send_from_to( void *msg, VirtProcr *sendPr, VirtProcr *receivePr);
|
|
Me@6
|
211
|
|
Me@6
|
212 void *
|
|
Me@6
|
213 SSR__receive_type_to( const int type, VirtProcr *receivePr );
|
|
Me@6
|
214
|
|
Me@6
|
215 void *
|
|
Me@6
|
216 SSR__receive_from_to( VirtProcr *sendPr, VirtProcr *receivePr );
|
|
Me@6
|
217
|
|
Me@6
|
218
|
|
Me@17
|
219 //======================= Concurrency Stuff ======================
|
|
Me@17
|
220 void
|
|
Me@21
|
221 SSR__start_fn_singleton( int32 singletonID, VirtProcr *animPr );
|
|
Me@21
|
222
|
|
Me@21
|
223 void
|
|
Me@21
|
224 SSR__end_fn_singleton( int32 singletonID, VirtProcr *animPr );
|
|
Me@21
|
225
|
|
Me@21
|
226 void
|
|
Me@21
|
227 SSR__start_data_singleton( SSRSingleton **singeltonAddr, VirtProcr *animPr );
|
|
Me@21
|
228
|
|
Me@21
|
229 void
|
|
Me@21
|
230 SSR__end_data_singleton( SSRSingleton **singletonAddr, VirtProcr *animPr );
|
|
Me@6
|
231
|
|
Me@6
|
232 void
|
|
Me@17
|
233 SSR__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
|
|
Me@17
|
234 void *data, VirtProcr *animPr );
|
|
Me@17
|
235
|
|
Me@17
|
236 void
|
|
Me@17
|
237 SSR__start_transaction( int32 transactionID, VirtProcr *animPr );
|
|
Me@17
|
238
|
|
Me@17
|
239 void
|
|
Me@17
|
240 SSR__end_transaction( int32 transactionID, VirtProcr *animPr );
|
|
Me@6
|
241
|
|
Me@6
|
242
|
|
Me@6
|
243 //========================= Internal use only =============================
|
|
Me@6
|
244 void
|
|
Me@6
|
245 SSR__Request_Handler( VirtProcr *requestingPr, void *_semEnv );
|
|
Me@6
|
246
|
|
Me@6
|
247 VirtProcr *
|
|
nengel@49
|
248 SSR__schedule_virt_procr( void *_semEnv, int coreNum, int slotNum );
|
|
Me@6
|
249
|
|
msach@27
|
250 VirtProcr*
|
|
msach@27
|
251 SSR__create_procr_helper( VirtProcrFnPtr fnPtr, void *initData,
|
|
msach@27
|
252 SSRSemEnv *semEnv, int32 coreToScheduleOnto );
|
|
Me@6
|
253
|
|
Me@6
|
254 #endif /* _SSR_H */
|
|
Me@6
|
255
|