annotate VSs.h @ 0:67a3a05a39c0

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