annotate VSs.h @ 1:5ed4d833506e

Started putting in some VSs impl -- still mostly SSR copy
author Some Random Person <seanhalle@yahoo.com>
date Thu, 24 May 2012 07:34:21 -0700
parents 67a3a05a39c0
children f2ed1c379fe7
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