| 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@0
|
9 #ifndef _VOMP_H
|
|
seanhalle@0
|
10 #define _VOMP_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@0
|
15 #include "dependency.h"
|
|
seanhalle@0
|
16
|
|
seanhalle@0
|
17
|
|
seanhalle@0
|
18 //===========================================================================
|
|
seanhalle@0
|
19 #define NUM_STRUCS_IN_SEM_ENV 1000
|
|
seanhalle@0
|
20
|
|
seanhalle@0
|
21 //This is hardware dependent -- it's the number of cycles of scheduling
|
|
seanhalle@0
|
22 // overhead -- if a work unit is fewer than this, it is better being
|
|
seanhalle@0
|
23 // combined sequentially with other work
|
|
seanhalle@0
|
24 //This value depends on both VMS overhead and VOMP's plugin. At some point
|
|
seanhalle@0
|
25 // it will be derived by perf-counter measurements during init of VOMP
|
|
seanhalle@0
|
26 #define MIN_WORK_UNIT_CYCLES 20000
|
|
seanhalle@0
|
27
|
|
seanhalle@0
|
28 //===========================================================================
|
|
seanhalle@0
|
29 /*This header defines everything specific to the VOMP semantic plug-in
|
|
seanhalle@0
|
30 */
|
|
seanhalle@0
|
31 typedef struct _VOMPSemReq VOMPSemReq;
|
|
seanhalle@1
|
32 typedef void (*VSsTaskFnPtr ) ( void * ); //executed atomically in master
|
|
seanhalle@0
|
33 //===========================================================================
|
|
seanhalle@0
|
34
|
|
seanhalle@1
|
35 #define IN 1;
|
|
seanhalle@1
|
36 #define OUT 2;
|
|
seanhalle@1
|
37 #define INOUT 3;
|
|
seanhalle@1
|
38
|
|
seanhalle@1
|
39 typedef struct
|
|
seanhalle@1
|
40 {
|
|
seanhalle@1
|
41 VSsTaskFnPtr fn;
|
|
seanhalle@1
|
42 int32 numArgs;
|
|
seanhalle@1
|
43 int32 *argTypes;
|
|
seanhalle@1
|
44 int32 *argSizes;
|
|
seanhalle@1
|
45 }
|
|
seanhalle@1
|
46 VSsTaskType;
|
|
seanhalle@1
|
47
|
|
seanhalle@1
|
48
|
|
seanhalle@1
|
49
|
|
seanhalle@0
|
50 /*Semantic layer-specific data sent inside a request from lib called in app
|
|
seanhalle@0
|
51 * to request handler called in AnimationMaster
|
|
seanhalle@0
|
52 */
|
|
seanhalle@0
|
53
|
|
seanhalle@0
|
54 typedef struct
|
|
seanhalle@0
|
55 {
|
|
seanhalle@0
|
56 SlaveVP *VPCurrentlyExecuting;
|
|
seanhalle@0
|
57 PrivQueueStruc *waitingVPQ;
|
|
seanhalle@0
|
58 }
|
|
seanhalle@0
|
59 VOMPTrans;
|
|
seanhalle@0
|
60
|
|
seanhalle@0
|
61 /*WARNING: assembly hard-codes position of endInstrAddr as first field
|
|
seanhalle@0
|
62 */
|
|
seanhalle@0
|
63 typedef struct
|
|
seanhalle@0
|
64 {
|
|
seanhalle@0
|
65 void *endInstrAddr;
|
|
seanhalle@0
|
66 int32 hasBeenStarted;
|
|
seanhalle@0
|
67 int32 hasFinished;
|
|
seanhalle@0
|
68 PrivQueueStruc *waitQ;
|
|
seanhalle@0
|
69 }
|
|
seanhalle@0
|
70 VOMPSingleton;
|
|
seanhalle@0
|
71
|
|
seanhalle@0
|
72 enum VOMPReqType
|
|
seanhalle@0
|
73 {
|
|
seanhalle@0
|
74 send_type = 1,
|
|
seanhalle@0
|
75 send_from_to,
|
|
seanhalle@0
|
76 receive_any, //order and grouping matter -- send before receive
|
|
seanhalle@0
|
77 receive_type, // and receive_any first of the receives -- Handlers
|
|
seanhalle@0
|
78 receive_from_to,// rely upon this ordering of enum
|
|
seanhalle@0
|
79 transfer_to,
|
|
seanhalle@0
|
80 transfer_out,
|
|
seanhalle@0
|
81 malloc_req,
|
|
seanhalle@0
|
82 free_req,
|
|
seanhalle@0
|
83 singleton_fn_start,
|
|
seanhalle@0
|
84 singleton_fn_end,
|
|
seanhalle@0
|
85 singleton_data_start,
|
|
seanhalle@0
|
86 singleton_data_end,
|
|
seanhalle@0
|
87 atomic,
|
|
seanhalle@0
|
88 trans_start,
|
|
seanhalle@0
|
89 trans_end
|
|
seanhalle@0
|
90 };
|
|
seanhalle@0
|
91
|
|
seanhalle@0
|
92 struct _VOMPSemReq
|
|
seanhalle@0
|
93 { enum VOMPReqType reqType;
|
|
seanhalle@0
|
94 SlaveVP *sendPr;
|
|
seanhalle@0
|
95 SlaveVP *receivePr;
|
|
seanhalle@0
|
96 int32 msgType;
|
|
seanhalle@0
|
97 void *msg;
|
|
seanhalle@0
|
98 VOMPSemReq *nextReqInHashEntry;
|
|
seanhalle@0
|
99
|
|
seanhalle@0
|
100 void *initData;
|
|
seanhalle@0
|
101 TopLevelFnPtr fnPtr;
|
|
seanhalle@0
|
102 int32 coreToAssignOnto;
|
|
seanhalle@0
|
103
|
|
seanhalle@0
|
104 int32 sizeToMalloc;
|
|
seanhalle@0
|
105 void *ptrToFree;
|
|
seanhalle@0
|
106
|
|
seanhalle@0
|
107 int32 singletonID;
|
|
seanhalle@0
|
108 VOMPSingleton **singletonPtrAddr;
|
|
seanhalle@0
|
109
|
|
seanhalle@0
|
110 PtrToAtomicFn fnToExecInMaster;
|
|
seanhalle@0
|
111 void *dataForFn;
|
|
seanhalle@0
|
112
|
|
seanhalle@0
|
113 int32 transID;
|
|
seanhalle@0
|
114 }
|
|
seanhalle@0
|
115 /* VOMPSemReq */;
|
|
seanhalle@0
|
116
|
|
seanhalle@0
|
117
|
|
seanhalle@0
|
118 typedef struct
|
|
seanhalle@0
|
119 {
|
|
seanhalle@0
|
120 PrivQueueStruc **readyVPQs;
|
|
seanhalle@0
|
121 HashTable *commHashTbl;
|
|
seanhalle@0
|
122 int32 numSlaveVP;
|
|
seanhalle@0
|
123 int32 nextCoreToGetNewPr;
|
|
seanhalle@0
|
124 int32 primitiveStartTime;
|
|
seanhalle@0
|
125
|
|
seanhalle@0
|
126 //fix limit on num with dynArray
|
|
seanhalle@0
|
127 VOMPSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
|
|
seanhalle@0
|
128 VOMPTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
|
|
seanhalle@0
|
129
|
|
seanhalle@0
|
130 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
|
|
seanhalle@0
|
131 ListOfArrays* unitList;
|
|
seanhalle@0
|
132 ListOfArrays* ctlDependenciesList;
|
|
seanhalle@0
|
133 ListOfArrays* commDependenciesList;
|
|
seanhalle@0
|
134 NtoN** ntonGroups;
|
|
seanhalle@0
|
135 PrivDynArrayInfo* ntonGroupsInfo;
|
|
seanhalle@0
|
136 ListOfArrays* dynDependenciesList;
|
|
seanhalle@0
|
137 Unit last_in_slot[NUM_CORES * NUM_ANIM_SLOTS];
|
|
seanhalle@0
|
138 ListOfArrays* hwArcs;
|
|
seanhalle@0
|
139 #endif
|
|
seanhalle@0
|
140
|
|
seanhalle@0
|
141 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
|
|
seanhalle@0
|
142 ListOfArrays* counterList[NUM_CORES];
|
|
seanhalle@0
|
143 #endif
|
|
seanhalle@0
|
144 SlaveVP* idlePr[NUM_CORES][NUM_ANIM_SLOTS];
|
|
seanhalle@0
|
145 int shutdownInitiated;
|
|
seanhalle@0
|
146 }
|
|
seanhalle@0
|
147 VOMPSemEnv;
|
|
seanhalle@0
|
148
|
|
seanhalle@0
|
149
|
|
seanhalle@0
|
150 typedef struct _TransListElem TransListElem;
|
|
seanhalle@0
|
151 struct _TransListElem
|
|
seanhalle@0
|
152 {
|
|
seanhalle@0
|
153 int32 transID;
|
|
seanhalle@0
|
154 TransListElem *nextTrans;
|
|
seanhalle@0
|
155 };
|
|
seanhalle@0
|
156 //TransListElem
|
|
seanhalle@0
|
157
|
|
seanhalle@0
|
158 typedef struct
|
|
seanhalle@0
|
159 {
|
|
seanhalle@0
|
160 int32 highestTransEntered;
|
|
seanhalle@0
|
161 TransListElem *lastTransEntered;
|
|
seanhalle@0
|
162 }
|
|
seanhalle@0
|
163 VOMPSemData;
|
|
seanhalle@0
|
164
|
|
seanhalle@0
|
165 //===========================================================================
|
|
seanhalle@0
|
166
|
|
seanhalle@0
|
167 void
|
|
seanhalle@0
|
168 VOMP__create_seed_procr_and_do_work( TopLevelFnPtr fn, void *initData );
|
|
seanhalle@0
|
169
|
|
seanhalle@0
|
170 int32
|
|
seanhalle@0
|
171 VOMP__giveMinWorkUnitCycles( float32 percentOverhead );
|
|
seanhalle@0
|
172
|
|
seanhalle@0
|
173 void
|
|
seanhalle@0
|
174 VOMP__start_primitive();
|
|
seanhalle@0
|
175
|
|
seanhalle@0
|
176 int32
|
|
seanhalle@0
|
177 VOMP__end_primitive_and_give_cycles();
|
|
seanhalle@0
|
178
|
|
seanhalle@0
|
179 int32
|
|
seanhalle@0
|
180 VOMP__giveIdealNumWorkUnits();
|
|
seanhalle@0
|
181
|
|
seanhalle@0
|
182 int32
|
|
seanhalle@0
|
183 VOMP__give_number_of_cores_to_schedule_onto();
|
|
seanhalle@0
|
184
|
|
seanhalle@0
|
185 //=======================
|
|
seanhalle@0
|
186
|
|
seanhalle@0
|
187 void
|
|
seanhalle@0
|
188 VOMP__init();
|
|
seanhalle@0
|
189
|
|
seanhalle@0
|
190 void
|
|
seanhalle@0
|
191 VOMP__cleanup_after_shutdown();
|
|
seanhalle@0
|
192
|
|
seanhalle@0
|
193 //=======================
|
|
seanhalle@0
|
194
|
|
seanhalle@0
|
195 SlaveVP *
|
|
seanhalle@0
|
196 VOMP__create_procr_with( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@0
|
197 SlaveVP *creatingSlv );
|
|
seanhalle@0
|
198
|
|
seanhalle@0
|
199 SlaveVP *
|
|
seanhalle@0
|
200 VOMP__create_procr_with_affinity( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@0
|
201 SlaveVP *creatingPr, int32 coreToAssignOnto);
|
|
seanhalle@0
|
202
|
|
seanhalle@0
|
203 void
|
|
seanhalle@0
|
204 VOMP__dissipate_procr( SlaveVP *procrToDissipate );
|
|
seanhalle@0
|
205
|
|
seanhalle@0
|
206 //=======================
|
|
seanhalle@0
|
207 void *
|
|
seanhalle@0
|
208 VOMP__malloc_to( int numBytes, SlaveVP *ownerSlv );
|
|
seanhalle@0
|
209
|
|
seanhalle@0
|
210 void
|
|
seanhalle@0
|
211 VOMP__free( void *ptrToFree, SlaveVP *owningSlv );
|
|
seanhalle@0
|
212
|
|
seanhalle@0
|
213 void
|
|
seanhalle@0
|
214 VOMP__transfer_ownership_of_from_to( void *data, SlaveVP *oldOwnerPr,
|
|
seanhalle@0
|
215 SlaveVP *newOwnerSlv );
|
|
seanhalle@0
|
216
|
|
seanhalle@0
|
217 void
|
|
seanhalle@0
|
218 VOMP__add_ownership_by_to( SlaveVP *newOwnerPr, void *data );
|
|
seanhalle@0
|
219
|
|
seanhalle@0
|
220 void
|
|
seanhalle@0
|
221 VOMP__remove_ownership_by_from( SlaveVP *loserPr, void *dataLosing );
|
|
seanhalle@0
|
222
|
|
seanhalle@0
|
223 void
|
|
seanhalle@0
|
224 VOMP__transfer_ownership_to_outside( void *dataToTransferOwnershipOf );
|
|
seanhalle@0
|
225
|
|
seanhalle@0
|
226
|
|
seanhalle@0
|
227
|
|
seanhalle@0
|
228 //=======================
|
|
seanhalle@0
|
229 void
|
|
seanhalle@0
|
230 VOMP__send_of_type_to( SlaveVP *sendPr, void *msg, const int type,
|
|
seanhalle@0
|
231 SlaveVP *receivePr);
|
|
seanhalle@0
|
232
|
|
seanhalle@0
|
233 void
|
|
seanhalle@0
|
234 VOMP__send_from_to( void *msg, SlaveVP *sendPr, SlaveVP *receivePr);
|
|
seanhalle@0
|
235
|
|
seanhalle@0
|
236 void *
|
|
seanhalle@0
|
237 VOMP__receive_type_to( const int type, SlaveVP *receiveSlv );
|
|
seanhalle@0
|
238
|
|
seanhalle@0
|
239 void *
|
|
seanhalle@0
|
240 VOMP__receive_from_to( SlaveVP *sendPr, SlaveVP *receiveSlv );
|
|
seanhalle@0
|
241
|
|
seanhalle@0
|
242
|
|
seanhalle@0
|
243 //======================= Concurrency Stuff ======================
|
|
seanhalle@0
|
244 void
|
|
seanhalle@0
|
245 VOMP__start_fn_singleton( int32 singletonID, SlaveVP *animSlv );
|
|
seanhalle@0
|
246
|
|
seanhalle@0
|
247 void
|
|
seanhalle@0
|
248 VOMP__end_fn_singleton( int32 singletonID, SlaveVP *animSlv );
|
|
seanhalle@0
|
249
|
|
seanhalle@0
|
250 void
|
|
seanhalle@0
|
251 VOMP__start_data_singleton( VOMPSingleton **singeltonAddr, SlaveVP *animSlv );
|
|
seanhalle@0
|
252
|
|
seanhalle@0
|
253 void
|
|
seanhalle@0
|
254 VOMP__end_data_singleton( VOMPSingleton **singletonAddr, SlaveVP *animSlv );
|
|
seanhalle@0
|
255
|
|
seanhalle@0
|
256 void
|
|
seanhalle@0
|
257 VOMP__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
|
|
seanhalle@0
|
258 void *data, SlaveVP *animSlv );
|
|
seanhalle@0
|
259
|
|
seanhalle@0
|
260 void
|
|
seanhalle@0
|
261 VOMP__start_transaction( int32 transactionID, SlaveVP *animSlv );
|
|
seanhalle@0
|
262
|
|
seanhalle@0
|
263 void
|
|
seanhalle@0
|
264 VOMP__end_transaction( int32 transactionID, SlaveVP *animSlv );
|
|
seanhalle@0
|
265
|
|
seanhalle@0
|
266
|
|
seanhalle@0
|
267 //========================= Internal use only =============================
|
|
seanhalle@0
|
268 void
|
|
seanhalle@0
|
269 VOMP__Request_Handler( SlaveVP *requestingPr, void *_semEnv );
|
|
seanhalle@0
|
270
|
|
seanhalle@0
|
271 SlaveVP *
|
|
seanhalle@0
|
272 VOMP__assign_slaveVP_to_slot( void *_semEnv, AnimSlot *slot );
|
|
seanhalle@0
|
273
|
|
seanhalle@0
|
274 SlaveVP*
|
|
seanhalle@0
|
275 VOMP__create_procr_helper( TopLevelFnPtr fnPtr, void *initData,
|
|
seanhalle@0
|
276 VOMPSemEnv *semEnv, int32 coreToAssignOnto );
|
|
seanhalle@0
|
277
|
|
seanhalle@0
|
278 //===================== Measurement of Lang Overheads =====================
|
|
seanhalle@0
|
279 #include "VOMP_Measurement.h"
|
|
seanhalle@0
|
280
|
|
seanhalle@0
|
281 //===========================================================================
|
|
seanhalle@0
|
282 #endif /* _VOMP_H */
|
|
seanhalle@0
|
283
|