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