| rev |
line source |
|
seanhalle@0
|
1 /*
|
|
seanhalle@0
|
2 * Copyright 2009 OpenSourceStewardshipFoundation.org
|
|
seanhalle@0
|
3 * Licensed under GNU General Public License version 2
|
|
seanhalle@0
|
4 *
|
|
seanhalle@0
|
5 * Author: seanhalle@yahoo.com
|
|
seanhalle@0
|
6 *
|
|
seanhalle@0
|
7 */
|
|
seanhalle@0
|
8
|
|
seanhalle@2
|
9 #ifndef _VSs_H
|
|
seanhalle@2
|
10 #define _VSs_H
|
|
seanhalle@0
|
11
|
|
seanhalle@0
|
12 #include "Queue_impl/PrivateQueue.h"
|
|
seanhalle@0
|
13 #include "Hash_impl/PrivateHash.h"
|
|
seanhalle@0
|
14 #include "VMS_impl/VMS.h"
|
|
seanhalle@3
|
15 #include "Measurement/dependency.h"
|
|
seanhalle@0
|
16
|
|
nengel@18
|
17 /* Switch for Nexus support
|
|
nengel@18
|
18 * Note: nexus incompatible with holistic recording (constraints not accessible)
|
|
nengel@18
|
19 * But counter recording still functional, can build constraintless display
|
|
nengel@18
|
20 * with wallclock time
|
|
nengel@18
|
21 */
|
|
nengel@20
|
22 //#define EXTERNAL_SCHEDULER
|
|
nengel@20
|
23 //#define SIMULATE_EXTERNAL_SCHEDULER
|
|
seanhalle@0
|
24
|
|
seanhalle@0
|
25 //===========================================================================
|
|
seanhalle@0
|
26 #define NUM_STRUCS_IN_SEM_ENV 1000
|
|
seanhalle@0
|
27
|
|
seanhalle@0
|
28 //This is hardware dependent -- it's the number of cycles of scheduling
|
|
seanhalle@0
|
29 // overhead -- if a work unit is fewer than this, it is better being
|
|
seanhalle@0
|
30 // combined sequentially with other work
|
|
seanhalle@2
|
31 //This value depends on both VMS overhead and VSs's plugin. At some point
|
|
seanhalle@2
|
32 // it will be derived by perf-counter measurements during init of VSs
|
|
seanhalle@0
|
33 #define MIN_WORK_UNIT_CYCLES 20000
|
|
seanhalle@0
|
34
|
|
seanhalle@0
|
35 //===========================================================================
|
|
seanhalle@2
|
36 /*This header defines everything specific to the VSs semantic plug-in
|
|
seanhalle@0
|
37 */
|
|
seanhalle@2
|
38 typedef struct _VSsSemReq VSsSemReq;
|
|
seanhalle@3
|
39 typedef void (*VSsTaskFnPtr ) ( void *, SlaveVP *);
|
|
seanhalle@2
|
40 typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master
|
|
seanhalle@0
|
41 //===========================================================================
|
|
seanhalle@0
|
42
|
|
seanhalle@4
|
43 #define NONCTLD 0
|
|
seanhalle@4
|
44 #define IN 1 /*Trick -- READER same as IN*/
|
|
seanhalle@4
|
45 #define OUT 2 /*Trick -- WRITER same as OUT and INOUT*/
|
|
seanhalle@4
|
46 #define INOUT 2 /*Trick -- WRITER same as OUT and INOUT*/
|
|
seanhalle@2
|
47
|
|
seanhalle@4
|
48 #define READER 1 /*Trick -- READER same as IN*/
|
|
seanhalle@4
|
49 #define WRITER 2 /*Trick -- WRITER same as OUT and INOUT*/
|
|
seanhalle@1
|
50
|
|
seanhalle@8
|
51 #define IS_A_THREAD NULL
|
|
seanhalle@8
|
52 #define IS_ENDED NULL
|
|
seanhalle@8
|
53 #define SEED_SLV NULL
|
|
seanhalle@8
|
54
|
|
seanhalle@1
|
55 typedef struct
|
|
seanhalle@1
|
56 {
|
|
seanhalle@1
|
57 VSsTaskFnPtr fn;
|
|
seanhalle@2
|
58 int32 numTotalArgs;//the number of inputs to function
|
|
seanhalle@2
|
59 int32 numCtldArgs;//how many of args have dependencies
|
|
seanhalle@2
|
60 int32 *argTypes; //says reader, writer, or non-ctld
|
|
seanhalle@2
|
61 int32 *argSizes; //for detecting overlap
|
|
seanhalle@2
|
62 int32 sizeOfArgs; //for memcpy of args struct
|
|
seanhalle@1
|
63 }
|
|
seanhalle@1
|
64 VSsTaskType;
|
|
seanhalle@1
|
65
|
|
seanhalle@1
|
66
|
|
seanhalle@2
|
67 typedef struct
|
|
seanhalle@2
|
68 {
|
|
seanhalle@3
|
69 bool32 hasEnabledNonFinishedWriter;
|
|
seanhalle@3
|
70 int32 numEnabledNonDoneReaders;
|
|
seanhalle@3
|
71 PrivQueueStruc *waitersQ;
|
|
nengel@16
|
72 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
nengel@17
|
73 Unit lastWriter;
|
|
nengel@17
|
74 ListOfArrays* readersSinceLastWriter;
|
|
nengel@16
|
75 #endif
|
|
seanhalle@3
|
76 }
|
|
seanhalle@3
|
77 VSsPointerEntry;
|
|
seanhalle@3
|
78
|
|
seanhalle@6
|
79 typedef struct
|
|
seanhalle@3
|
80 {
|
|
seanhalle@2
|
81 void **args; //ctld args must come first, as ptrs
|
|
seanhalle@2
|
82 VSsTaskType *taskType;
|
|
seanhalle@4
|
83 int32 *taskID;
|
|
seanhalle@2
|
84 int32 numBlockingProp;
|
|
seanhalle@10
|
85 SlaveVP *slaveAssignedTo; //only valid before end task (thread)
|
|
seanhalle@3
|
86 VSsPointerEntry **ptrEntries;
|
|
nengel@11
|
87 void* parentTaskStub;
|
|
seanhalle@8
|
88 int32 numLiveChildTasks;
|
|
seanhalle@8
|
89 int32 numLiveChildThreads;
|
|
seanhalle@8
|
90 bool32 isWaitingForChildTasksToEnd;
|
|
seanhalle@8
|
91 bool32 isWaitingForChildThreadsToEnd;
|
|
seanhalle@8
|
92 bool32 isEnded;
|
|
nengel@17
|
93 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
nengel@17
|
94 Unit parentUnit;
|
|
nengel@21
|
95 Unit firstOfTask;
|
|
nengel@17
|
96 #endif
|
|
seanhalle@2
|
97 }
|
|
seanhalle@6
|
98 VSsTaskStub;
|
|
nengel@5
|
99
|
|
seanhalle@2
|
100
|
|
seanhalle@2
|
101 typedef struct
|
|
seanhalle@2
|
102 {
|
|
seanhalle@2
|
103 VSsTaskStub *taskStub;
|
|
seanhalle@2
|
104 int32 argNum;
|
|
seanhalle@2
|
105 int32 isReader;
|
|
nengel@21
|
106 bool32 isSuspended;
|
|
seanhalle@2
|
107 }
|
|
seanhalle@2
|
108 VSsTaskStubCarrier;
|
|
seanhalle@2
|
109
|
|
seanhalle@2
|
110
|
|
seanhalle@0
|
111 /*Semantic layer-specific data sent inside a request from lib called in app
|
|
seanhalle@0
|
112 * to request handler called in AnimationMaster
|
|
seanhalle@0
|
113 */
|
|
seanhalle@0
|
114
|
|
seanhalle@0
|
115 typedef struct
|
|
seanhalle@0
|
116 {
|
|
seanhalle@0
|
117 SlaveVP *VPCurrentlyExecuting;
|
|
seanhalle@0
|
118 PrivQueueStruc *waitingVPQ;
|
|
seanhalle@0
|
119 }
|
|
seanhalle@2
|
120 VSsTrans;
|
|
seanhalle@0
|
121
|
|
seanhalle@0
|
122 /*WARNING: assembly hard-codes position of endInstrAddr as first field
|
|
seanhalle@0
|
123 */
|
|
seanhalle@0
|
124 typedef struct
|
|
seanhalle@0
|
125 {
|
|
seanhalle@0
|
126 void *endInstrAddr;
|
|
seanhalle@0
|
127 int32 hasBeenStarted;
|
|
seanhalle@0
|
128 int32 hasFinished;
|
|
seanhalle@0
|
129 PrivQueueStruc *waitQ;
|
|
nengel@17
|
130 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
nengel@17
|
131 Unit executingUnit;
|
|
nengel@17
|
132 #endif
|
|
seanhalle@0
|
133 }
|
|
seanhalle@2
|
134 VSsSingleton;
|
|
seanhalle@0
|
135
|
|
nengel@21
|
136 typedef struct
|
|
nengel@21
|
137 {
|
|
nengel@21
|
138 int32 isOccupied;
|
|
nengel@21
|
139 PrivQueueStruc *waitQ;
|
|
nengel@21
|
140 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
nengel@21
|
141 Unit previous;
|
|
nengel@21
|
142 #endif
|
|
nengel@21
|
143 }
|
|
nengel@21
|
144 VSsCritical;
|
|
nengel@21
|
145
|
|
seanhalle@2
|
146 enum VSsReqType
|
|
seanhalle@0
|
147 {
|
|
seanhalle@2
|
148 submit_task = 1,
|
|
seanhalle@2
|
149 end_task,
|
|
seanhalle@2
|
150 create_slave,
|
|
seanhalle@2
|
151 create_slave_w_aff,
|
|
seanhalle@2
|
152 dissipate_slave,
|
|
seanhalle@2
|
153 //===============================
|
|
seanhalle@4
|
154 send_type_to,
|
|
seanhalle@4
|
155 receive_type_to,
|
|
seanhalle@4
|
156 send_from_to,
|
|
seanhalle@4
|
157 receive_from_to,
|
|
seanhalle@4
|
158 //===============================
|
|
nengel@5
|
159 taskwait,
|
|
nengel@21
|
160 taskwait_on,
|
|
nengel@21
|
161 critical_start,
|
|
nengel@21
|
162 critical_end,
|
|
seanhalle@0
|
163 malloc_req,
|
|
seanhalle@0
|
164 free_req,
|
|
seanhalle@0
|
165 singleton_fn_start,
|
|
seanhalle@0
|
166 singleton_fn_end,
|
|
seanhalle@0
|
167 singleton_data_start,
|
|
seanhalle@0
|
168 singleton_data_end,
|
|
seanhalle@0
|
169 atomic,
|
|
seanhalle@0
|
170 trans_start,
|
|
seanhalle@0
|
171 trans_end
|
|
seanhalle@0
|
172 };
|
|
seanhalle@0
|
173
|
|
seanhalle@2
|
174 struct _VSsSemReq
|
|
seanhalle@2
|
175 { enum VSsReqType reqType;
|
|
seanhalle@2
|
176 SlaveVP *callingSlv;
|
|
seanhalle@2
|
177 VSsTaskType *taskType;
|
|
seanhalle@2
|
178 void *args;
|
|
seanhalle@2
|
179 VSsTaskStub *taskStub;
|
|
seanhalle@2
|
180
|
|
seanhalle@4
|
181 SlaveVP *senderSlv;
|
|
seanhalle@4
|
182 SlaveVP *receiverSlv;
|
|
seanhalle@4
|
183 int32 *senderID;
|
|
seanhalle@4
|
184 int32 *receiverID;
|
|
seanhalle@4
|
185 int32 msgType;
|
|
seanhalle@4
|
186 void *msg;
|
|
seanhalle@4
|
187 VSsSemReq *nextReqInHashEntry;
|
|
seanhalle@4
|
188 int32 *taskID;
|
|
seanhalle@4
|
189
|
|
seanhalle@2
|
190 TopLevelFnPtr fnPtr;
|
|
seanhalle@0
|
191 void *initData;
|
|
seanhalle@0
|
192 int32 coreToAssignOnto;
|
|
seanhalle@0
|
193
|
|
seanhalle@0
|
194 int32 sizeToMalloc;
|
|
seanhalle@0
|
195 void *ptrToFree;
|
|
seanhalle@0
|
196
|
|
seanhalle@0
|
197 int32 singletonID;
|
|
seanhalle@2
|
198 VSsSingleton **singletonPtrAddr;
|
|
seanhalle@0
|
199
|
|
seanhalle@0
|
200 PtrToAtomicFn fnToExecInMaster;
|
|
seanhalle@0
|
201 void *dataForFn;
|
|
seanhalle@0
|
202
|
|
seanhalle@0
|
203 int32 transID;
|
|
nengel@21
|
204 int32 criticalID;
|
|
seanhalle@0
|
205 }
|
|
seanhalle@2
|
206 /* VSsSemReq */;
|
|
seanhalle@0
|
207
|
|
seanhalle@0
|
208
|
|
seanhalle@0
|
209 typedef struct
|
|
seanhalle@0
|
210 {
|
|
seanhalle@9
|
211 PrivQueueStruc *slavesReadyToResumeQ; //Shared (slaves not pinned)
|
|
seanhalle@9
|
212 PrivQueueStruc *freeExtraTaskSlvQ; //Shared
|
|
seanhalle@9
|
213 PrivQueueStruc *taskReadyQ; //Shared (tasks not pinned)
|
|
seanhalle@10
|
214 SlaveVP *slotTaskSlvs[NUM_CORES][NUM_ANIM_SLOTS];
|
|
seanhalle@2
|
215 HashTable *argPtrHashTbl;
|
|
seanhalle@4
|
216 HashTable *commHashTbl;
|
|
seanhalle@8
|
217 int32 numLiveExtraTaskSlvs;
|
|
seanhalle@8
|
218 int32 numLiveThreadSlvs;
|
|
seanhalle@3
|
219 int32 nextCoreToGetNewSlv;
|
|
seanhalle@0
|
220 int32 primitiveStartTime;
|
|
seanhalle@0
|
221
|
|
seanhalle@0
|
222 //fix limit on num with dynArray
|
|
seanhalle@2
|
223 VSsSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
|
|
seanhalle@2
|
224 VSsTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
|
|
nengel@21
|
225 VSsCritical criticalSection[NUM_STRUCS_IN_SEM_ENV];
|
|
seanhalle@3
|
226
|
|
seanhalle@3
|
227 bool32 *coreIsDone;
|
|
seanhalle@3
|
228 int32 numCoresDone;
|
|
seanhalle@0
|
229
|
|
seanhalle@0
|
230 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
seanhalle@0
|
231 ListOfArrays* unitList;
|
|
seanhalle@0
|
232 ListOfArrays* ctlDependenciesList;
|
|
seanhalle@0
|
233 ListOfArrays* commDependenciesList;
|
|
nengel@16
|
234 ListOfArrays* dataDependenciesList;
|
|
nengel@17
|
235 ListOfArrays* warDependenciesList;
|
|
seanhalle@0
|
236 NtoN** ntonGroups;
|
|
seanhalle@0
|
237 PrivDynArrayInfo* ntonGroupsInfo;
|
|
seanhalle@0
|
238 ListOfArrays* dynDependenciesList;
|
|
nengel@16
|
239 ListOfArrays* singletonDependenciesList;
|
|
seanhalle@0
|
240 Unit last_in_slot[NUM_CORES * NUM_ANIM_SLOTS];
|
|
seanhalle@0
|
241 ListOfArrays* hwArcs;
|
|
seanhalle@0
|
242 #endif
|
|
seanhalle@0
|
243
|
|
seanhalle@0
|
244 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
|
|
seanhalle@0
|
245 ListOfArrays* counterList[NUM_CORES];
|
|
seanhalle@0
|
246 #endif
|
|
seanhalle@3
|
247 SlaveVP* idleSlv[NUM_CORES][NUM_ANIM_SLOTS];
|
|
seanhalle@0
|
248 int shutdownInitiated;
|
|
seanhalle@0
|
249 }
|
|
seanhalle@2
|
250 VSsSemEnv;
|
|
seanhalle@0
|
251
|
|
seanhalle@0
|
252
|
|
seanhalle@0
|
253 typedef struct _TransListElem TransListElem;
|
|
seanhalle@0
|
254 struct _TransListElem
|
|
seanhalle@0
|
255 {
|
|
seanhalle@0
|
256 int32 transID;
|
|
seanhalle@0
|
257 TransListElem *nextTrans;
|
|
seanhalle@0
|
258 };
|
|
seanhalle@0
|
259 //TransListElem
|
|
seanhalle@0
|
260
|
|
seanhalle@8
|
261 enum VSsSlvType
|
|
seanhalle@10
|
262 { ExtraTaskSlv = 1,
|
|
seanhalle@10
|
263 SlotTaskSlv,
|
|
seanhalle@10
|
264 ThreadSlv
|
|
seanhalle@8
|
265 };
|
|
nengel@5
|
266
|
|
seanhalle@0
|
267 typedef struct
|
|
seanhalle@0
|
268 {
|
|
seanhalle@14
|
269 int32 highestTransEntered;
|
|
seanhalle@14
|
270 TransListElem *lastTransEntered;
|
|
seanhalle@14
|
271 bool32 needsTaskAssigned;
|
|
seanhalle@14
|
272 VSsTaskStub *taskStub;
|
|
seanhalle@14
|
273 enum VSsSlvType slaveType;
|
|
seanhalle@0
|
274 }
|
|
seanhalle@2
|
275 VSsSemData;
|
|
seanhalle@0
|
276
|
|
seanhalle@0
|
277 //===========================================================================
|
|
seanhalle@0
|
278
|
|
seanhalle@0
|
279 void
|
|
seanhalle@2
|
280 VSs__create_seed_slave_and_do_work( TopLevelFnPtr fn, void *initData );
|
|
seanhalle@0
|
281
|
|
seanhalle@0
|
282 int32
|
|
seanhalle@2
|
283 VSs__giveMinWorkUnitCycles( float32 percentOverhead );
|
|
seanhalle@0
|
284
|
|
seanhalle@0
|
285 void
|
|
seanhalle@2
|
286 VSs__start_primitive();
|
|
seanhalle@0
|
287
|
|
seanhalle@0
|
288 int32
|
|
seanhalle@2
|
289 VSs__end_primitive_and_give_cycles();
|
|
seanhalle@0
|
290
|
|
seanhalle@0
|
291 int32
|
|
seanhalle@2
|
292 VSs__giveIdealNumWorkUnits();
|
|
seanhalle@0
|
293
|
|
seanhalle@0
|
294 int32
|
|
seanhalle@2
|
295 VSs__give_number_of_cores_to_schedule_onto();
|
|
seanhalle@0
|
296
|
|
seanhalle@0
|
297 //=======================
|
|
seanhalle@0
|
298
|
|
seanhalle@0
|
299 void
|
|
seanhalle@2
|
300 VSs__init();
|
|
seanhalle@0
|
301
|
|
seanhalle@0
|
302 void
|
|
seanhalle@2
|
303 VSs__cleanup_after_shutdown();
|
|
seanhalle@0
|
304
|
|
seanhalle@0
|
305 //=======================
|
|
seanhalle@0
|
306
|
|
seanhalle@4
|
307 SlaveVP *
|
|
seanhalle@7
|
308 VSs__create_thread( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@7
|
309 SlaveVP *creatingThd );
|
|
seanhalle@0
|
310
|
|
seanhalle@0
|
311 void
|
|
seanhalle@7
|
312 VSs__end_thread( SlaveVP *thdToEnd );
|
|
seanhalle@0
|
313
|
|
seanhalle@0
|
314 //=======================
|
|
seanhalle@2
|
315
|
|
seanhalle@2
|
316 #define VSs__malloc( numBytes, callingSlave ) VMS_App__malloc( numBytes, callingSlave)
|
|
seanhalle@2
|
317
|
|
seanhalle@2
|
318 #define VSs__free(ptrToFree, callingSlave ) VMS_App__free( ptrToFree, callingSlave )
|
|
seanhalle@2
|
319
|
|
seanhalle@2
|
320
|
|
seanhalle@2
|
321 //=======================
|
|
seanhalle@4
|
322 void
|
|
seanhalle@3
|
323 VSs__submit_task( VSsTaskType *taskType, void *args, SlaveVP *animSlv);
|
|
seanhalle@2
|
324
|
|
nengel@20
|
325 int32 *
|
|
seanhalle@4
|
326 VSs__create_taskID_of_size( int32 numInts, SlaveVP *animSlv );
|
|
seanhalle@4
|
327
|
|
seanhalle@4
|
328 void
|
|
seanhalle@4
|
329 VSs__submit_task_with_ID( VSsTaskType *taskType, void *args, int32 *taskID,
|
|
seanhalle@4
|
330 SlaveVP *animSlv);
|
|
seanhalle@0
|
331
|
|
seanhalle@0
|
332 void
|
|
seanhalle@2
|
333 VSs__end_task( SlaveVP *animSlv );
|
|
seanhalle@0
|
334
|
|
seanhalle@4
|
335 //=========================
|
|
nengel@5
|
336 void
|
|
nengel@5
|
337 VSs__taskwait(SlaveVP *animSlv);
|
|
nengel@5
|
338
|
|
nengel@21
|
339 void
|
|
nengel@21
|
340 VSs__taskwait_on(SlaveVP *animSlv,void* ptr);
|
|
nengel@21
|
341
|
|
nengel@21
|
342 void
|
|
nengel@21
|
343 VSs__start_critical(SlaveVP *animSlv,int32 name);
|
|
nengel@21
|
344
|
|
nengel@21
|
345 void
|
|
nengel@21
|
346 VSs__end_critical(SlaveVP *animSlv,int32 name);
|
|
seanhalle@4
|
347
|
|
nengel@20
|
348 int32 *
|
|
seanhalle@4
|
349 VSs__give_self_taskID( SlaveVP *animSlv );
|
|
seanhalle@4
|
350
|
|
seanhalle@4
|
351 void
|
|
seanhalle@4
|
352 VSs__send_of_type_to( void *msg, const int32 type, int32 *receiverID,
|
|
seanhalle@4
|
353 SlaveVP *senderSlv );
|
|
seanhalle@4
|
354
|
|
seanhalle@4
|
355 void
|
|
seanhalle@4
|
356 VSs__send_from_to( void *msg, int32 *senderID, int32 *receiverID, SlaveVP *senderSlv );
|
|
seanhalle@4
|
357
|
|
seanhalle@4
|
358 void *
|
|
seanhalle@4
|
359 VSs__receive_type_to( const int32 type, int32* receiverID, SlaveVP *receiverSlv );
|
|
seanhalle@4
|
360
|
|
seanhalle@4
|
361 void *
|
|
seanhalle@4
|
362 VSs__receive_from_to( int32 *senderID, int32 *receiverID, SlaveVP *receiverSlv );
|
|
seanhalle@0
|
363
|
|
seanhalle@0
|
364 //======================= Concurrency Stuff ======================
|
|
seanhalle@0
|
365 void
|
|
seanhalle@2
|
366 VSs__start_fn_singleton( int32 singletonID, SlaveVP *animSlv );
|
|
seanhalle@0
|
367
|
|
seanhalle@0
|
368 void
|
|
seanhalle@2
|
369 VSs__end_fn_singleton( int32 singletonID, SlaveVP *animSlv );
|
|
seanhalle@0
|
370
|
|
seanhalle@0
|
371 void
|
|
seanhalle@2
|
372 VSs__start_data_singleton( VSsSingleton **singeltonAddr, SlaveVP *animSlv );
|
|
seanhalle@0
|
373
|
|
seanhalle@0
|
374 void
|
|
seanhalle@2
|
375 VSs__end_data_singleton( VSsSingleton **singletonAddr, SlaveVP *animSlv );
|
|
seanhalle@0
|
376
|
|
seanhalle@0
|
377 void
|
|
seanhalle@2
|
378 VSs__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
|
|
seanhalle@0
|
379 void *data, SlaveVP *animSlv );
|
|
seanhalle@0
|
380
|
|
seanhalle@0
|
381 void
|
|
seanhalle@2
|
382 VSs__start_transaction( int32 transactionID, SlaveVP *animSlv );
|
|
seanhalle@0
|
383
|
|
seanhalle@0
|
384 void
|
|
seanhalle@2
|
385 VSs__end_transaction( int32 transactionID, SlaveVP *animSlv );
|
|
seanhalle@0
|
386
|
|
seanhalle@0
|
387
|
|
seanhalle@0
|
388 //========================= Internal use only =============================
|
|
seanhalle@0
|
389 void
|
|
seanhalle@3
|
390 VSs__Request_Handler( SlaveVP *requestingSlv, void *_semEnv );
|
|
seanhalle@0
|
391
|
|
seanhalle@0
|
392 SlaveVP *
|
|
seanhalle@2
|
393 VSs__assign_slaveVP_to_slot( void *_semEnv, AnimSlot *slot );
|
|
seanhalle@0
|
394
|
|
seanhalle@0
|
395 SlaveVP*
|
|
seanhalle@2
|
396 VSs__create_slave_helper( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@2
|
397 VSsSemEnv *semEnv, int32 coreToAssignOnto );
|
|
seanhalle@0
|
398
|
|
seanhalle@7
|
399 VSsTaskStub *
|
|
seanhalle@8
|
400 create_thread_task_stub( void *initData );
|
|
seanhalle@7
|
401
|
|
seanhalle@7
|
402
|
|
seanhalle@7
|
403 SlaveVP *
|
|
seanhalle@7
|
404 VSs__create_slave_with( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@7
|
405 SlaveVP *creatingSlv );
|
|
seanhalle@7
|
406
|
|
seanhalle@7
|
407 SlaveVP *
|
|
seanhalle@7
|
408 VSs__create_slave_with_affinity( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@7
|
409 SlaveVP *creatingSlv, int32 coreToAssignOnto);
|
|
seanhalle@7
|
410
|
|
seanhalle@9
|
411 void
|
|
seanhalle@9
|
412 idle_fn(void* data, SlaveVP *animatingSlv);
|
|
seanhalle@7
|
413
|
|
nengel@20
|
414 void
|
|
nengel@20
|
415 resume_slaveVP(SlaveVP *slave, VSsSemEnv *semEnv);
|
|
nengel@20
|
416
|
|
seanhalle@0
|
417 //===================== Measurement of Lang Overheads =====================
|
|
seanhalle@3
|
418 #include "Measurement/VSs_Measurement.h"
|
|
seanhalle@0
|
419
|
|
seanhalle@0
|
420 //===========================================================================
|
|
seanhalle@2
|
421 #endif /* _VSs_H */
|
|
seanhalle@0
|
422
|