annotate VOMP.h @ 0:b311282ec174

Initial add -- copies of code from SSR
author Some Random Person <seanhalle@yahoo.com>
date Sun, 20 May 2012 22:07:52 -0700
parents
children 21cf36019f0d
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 _SSR_H
seanhalle@0 10 #define _SSR_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 SSR's plugin. At some point
seanhalle@0 25 // it will be derived by perf-counter measurements during init of SSR
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 SSR semantic plug-in
seanhalle@0 30 */
seanhalle@0 31 typedef struct _SSRSemReq SSRSemReq;
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 SSRTrans;
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 SSRSingleton;
seanhalle@0 56
seanhalle@0 57 enum SSRReqType
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 _SSRSemReq
seanhalle@0 78 { enum SSRReqType reqType;
seanhalle@0 79 SlaveVP *sendPr;
seanhalle@0 80 SlaveVP *receivePr;
seanhalle@0 81 int32 msgType;
seanhalle@0 82 void *msg;
seanhalle@0 83 SSRSemReq *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 SSRSingleton **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 /* SSRSemReq */;
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 SSRSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
seanhalle@0 113 SSRTrans 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 SSRSemEnv;
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 SSRSemData;
seanhalle@0 149
seanhalle@0 150 //===========================================================================
seanhalle@0 151
seanhalle@0 152 void
seanhalle@0 153 SSR__create_seed_procr_and_do_work( TopLevelFnPtr fn, void *initData );
seanhalle@0 154
seanhalle@0 155 int32
seanhalle@0 156 SSR__giveMinWorkUnitCycles( float32 percentOverhead );
seanhalle@0 157
seanhalle@0 158 void
seanhalle@0 159 SSR__start_primitive();
seanhalle@0 160
seanhalle@0 161 int32
seanhalle@0 162 SSR__end_primitive_and_give_cycles();
seanhalle@0 163
seanhalle@0 164 int32
seanhalle@0 165 SSR__giveIdealNumWorkUnits();
seanhalle@0 166
seanhalle@0 167 int32
seanhalle@0 168 SSR__give_number_of_cores_to_schedule_onto();
seanhalle@0 169
seanhalle@0 170 //=======================
seanhalle@0 171
seanhalle@0 172 void
seanhalle@0 173 SSR__init();
seanhalle@0 174
seanhalle@0 175 void
seanhalle@0 176 SSR__cleanup_after_shutdown();
seanhalle@0 177
seanhalle@0 178 //=======================
seanhalle@0 179
seanhalle@0 180 SlaveVP *
seanhalle@0 181 SSR__create_procr_with( TopLevelFnPtr fnPtr, void *initData,
seanhalle@0 182 SlaveVP *creatingSlv );
seanhalle@0 183
seanhalle@0 184 SlaveVP *
seanhalle@0 185 SSR__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 SSR__dissipate_procr( SlaveVP *procrToDissipate );
seanhalle@0 190
seanhalle@0 191 //=======================
seanhalle@0 192 void *
seanhalle@0 193 SSR__malloc_to( int numBytes, SlaveVP *ownerSlv );
seanhalle@0 194
seanhalle@0 195 void
seanhalle@0 196 SSR__free( void *ptrToFree, SlaveVP *owningSlv );
seanhalle@0 197
seanhalle@0 198 void
seanhalle@0 199 SSR__transfer_ownership_of_from_to( void *data, SlaveVP *oldOwnerPr,
seanhalle@0 200 SlaveVP *newOwnerSlv );
seanhalle@0 201
seanhalle@0 202 void
seanhalle@0 203 SSR__add_ownership_by_to( SlaveVP *newOwnerPr, void *data );
seanhalle@0 204
seanhalle@0 205 void
seanhalle@0 206 SSR__remove_ownership_by_from( SlaveVP *loserPr, void *dataLosing );
seanhalle@0 207
seanhalle@0 208 void
seanhalle@0 209 SSR__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 SSR__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 SSR__send_from_to( void *msg, SlaveVP *sendPr, SlaveVP *receivePr);
seanhalle@0 220
seanhalle@0 221 void *
seanhalle@0 222 SSR__receive_type_to( const int type, SlaveVP *receiveSlv );
seanhalle@0 223
seanhalle@0 224 void *
seanhalle@0 225 SSR__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 SSR__start_fn_singleton( int32 singletonID, SlaveVP *animSlv );
seanhalle@0 231
seanhalle@0 232 void
seanhalle@0 233 SSR__end_fn_singleton( int32 singletonID, SlaveVP *animSlv );
seanhalle@0 234
seanhalle@0 235 void
seanhalle@0 236 SSR__start_data_singleton( SSRSingleton **singeltonAddr, SlaveVP *animSlv );
seanhalle@0 237
seanhalle@0 238 void
seanhalle@0 239 SSR__end_data_singleton( SSRSingleton **singletonAddr, SlaveVP *animSlv );
seanhalle@0 240
seanhalle@0 241 void
seanhalle@0 242 SSR__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
seanhalle@0 243 void *data, SlaveVP *animSlv );
seanhalle@0 244
seanhalle@0 245 void
seanhalle@0 246 SSR__start_transaction( int32 transactionID, SlaveVP *animSlv );
seanhalle@0 247
seanhalle@0 248 void
seanhalle@0 249 SSR__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 SSR__Request_Handler( SlaveVP *requestingPr, void *_semEnv );
seanhalle@0 255
seanhalle@0 256 SlaveVP *
seanhalle@0 257 SSR__assign_slaveVP_to_slot( void *_semEnv, AnimSlot *slot );
seanhalle@0 258
seanhalle@0 259 SlaveVP*
seanhalle@0 260 SSR__create_procr_helper( TopLevelFnPtr fnPtr, void *initData,
seanhalle@0 261 SSRSemEnv *semEnv, int32 coreToAssignOnto );
seanhalle@0 262
seanhalle@0 263 //===================== Measurement of Lang Overheads =====================
seanhalle@0 264 #include "SSR_Measurement.h"
seanhalle@0 265
seanhalle@0 266 //===========================================================================
seanhalle@0 267 #endif /* _SSR_H */
seanhalle@0 268