annotate SSR.h @ 60:3c9ed64db705

chgd brch name to Holistic_Model, from perf_ctrs, and Updated to compatibility with common_ancestor brch
author Some Random Person <seanhalle@yahoo.com>
date Fri, 09 Mar 2012 22:28:08 -0800
parents e11ba112a0c7
children 64bacf647af9
rev   line source
Me@6 1 /*
Me@6 2 * Copyright 2009 OpenSourceStewardshipFoundation.org
Me@6 3 * Licensed under GNU General Public License version 2
Me@6 4 *
Me@6 5 * Author: seanhalle@yahoo.com
Me@6 6 *
Me@6 7 */
Me@6 8
Me@6 9 #ifndef _SSR_H
Me@6 10 #define _SSR_H
Me@6 11
seanhalle@60 12 #include "Queue_impl/PrivateQueue.h"
seanhalle@60 13 #include "Hash_impl/PrivateHash.h"
seanhalle@60 14 #include "VMS_impl/VMS.h"
Nina@39 15 #include "dependency.h"
Me@6 16
Me@17 17
Me@17 18 //===========================================================================
Me@17 19 #define NUM_STRUCS_IN_SEM_ENV 1000
Me@17 20
Me@17 21 //===========================================================================
Me@6 22 /*This header defines everything specific to the SSR semantic plug-in
Me@6 23 */
Me@6 24 typedef struct _SSRSemReq SSRSemReq;
Me@17 25 typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master
Me@17 26 //===========================================================================
Me@6 27
Me@6 28 /*Semantic layer-specific data sent inside a request from lib called in app
Me@6 29 * to request handler called in MasterLoop
Me@6 30 */
Me@21 31
Me@21 32 typedef struct
Me@21 33 {
seanhalle@60 34 SlaveVP *VPCurrentlyExecuting;
Me@21 35 PrivQueueStruc *waitingVPQ;
Me@21 36 }
Me@21 37 SSRTrans;
Me@21 38
msach@24 39 /*WARNING: assembly hard-codes position of endInstrAddr as first field
msach@24 40 */
Me@21 41 typedef struct
Me@21 42 {
Me@22 43 void *endInstrAddr;
Me@21 44 int32 hasBeenStarted;
Me@21 45 int32 hasFinished;
Me@21 46 PrivQueueStruc *waitQ;
Me@21 47 }
Me@21 48 SSRSingleton;
Me@21 49
Me@6 50 enum SSRReqType
Me@6 51 {
Me@6 52 send_type = 1,
Me@6 53 send_from_to,
Me@6 54 receive_any, //order and grouping matter -- send before receive
Me@6 55 receive_type, // and receive_any first of the receives -- Handlers
Me@6 56 receive_from_to,// rely upon this ordering of enum
Me@6 57 transfer_to,
Me@17 58 transfer_out,
Me@17 59 malloc_req,
Me@17 60 free_req,
Me@21 61 singleton_fn_start,
Me@21 62 singleton_fn_end,
Me@21 63 singleton_data_start,
Me@21 64 singleton_data_end,
Me@17 65 atomic,
Me@17 66 trans_start,
Me@17 67 trans_end
Me@6 68 };
Me@6 69
Me@6 70 struct _SSRSemReq
Me@6 71 { enum SSRReqType reqType;
seanhalle@60 72 SlaveVP *sendPr;
seanhalle@60 73 SlaveVP *receivePr;
Me@17 74 int32 msgType;
Me@17 75 void *msg;
Me@6 76 SSRSemReq *nextReqInHashEntry;
Me@17 77
Me@17 78 void *initData;
seanhalle@60 79 TopLevelFnPtr fnPtr;
Me@17 80 int32 coreToScheduleOnto;
Me@17 81
Me@17 82 int32 sizeToMalloc;
Me@17 83 void *ptrToFree;
Me@17 84
Me@17 85 int32 singletonID;
Me@22 86 SSRSingleton **singletonPtrAddr;
Me@17 87
Me@17 88 PtrToAtomicFn fnToExecInMaster;
Me@17 89 void *dataForFn;
Me@17 90
Me@17 91 int32 transID;
Me@6 92 }
Me@6 93 /* SSRSemReq */;
Me@6 94
Me@17 95
Me@17 96 typedef struct
Me@17 97 {
Me@6 98 PrivQueueStruc **readyVPQs;
Me@14 99 HashTable *commHashTbl;
seanhalle@60 100 int32 numSlaveVP;
Me@14 101 int32 nextCoreToGetNewPr;
Me@14 102 int32 primitiveStartTime;
Me@17 103
Me@17 104 //fix limit on num with dynArray
Me@21 105 SSRSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
Me@17 106 SSRTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
Nina@39 107
seanhalle@60 108 #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC
nengel@47 109 ListOfArrays* unitList;
nengel@46 110 ListOfArrays* ctlDependenciesList;
nengel@46 111 ListOfArrays* commDependenciesList;
nengel@48 112 NtoN** ntonGroups;
nengel@48 113 PrivDynArrayInfo* ntonGroupsInfo;
nengel@49 114 ListOfArrays* dynDependenciesList;
nengel@49 115 Unit last_in_slot[NUM_CORES * NUM_SCHED_SLOTS];
nengel@49 116 ListOfArrays* hwArcs;
Nina@39 117 #endif
nengel@50 118
seanhalle@60 119 #ifdef HOLISTIC__TURN_ON_PERF_COUNTERS
nengel@56 120 ListOfArrays* counterList[NUM_CORES];
nengel@50 121 #endif
seanhalle@60 122 SlaveVP* idlePr[NUM_CORES][NUM_SCHED_SLOTS];
Me@6 123 }
Me@6 124 SSRSemEnv;
Me@6 125
Me@6 126
Me@17 127 typedef struct _TransListElem TransListElem;
Me@17 128 struct _TransListElem
Me@17 129 {
Me@17 130 int32 transID;
Me@17 131 TransListElem *nextTrans;
Me@17 132 };
Me@18 133 //TransListElem
Me@18 134
Me@17 135 typedef struct
Me@17 136 {
Me@17 137 int32 highestTransEntered;
Me@17 138 TransListElem *lastTransEntered;
Me@17 139 }
Me@17 140 SSRSemData;
Me@17 141
Me@6 142 //===========================================================================
Me@6 143
Me@6 144 void
seanhalle@60 145 SSR__create_seed_procr_and_do_work( TopLevelFnPtr fn, void *initData );
Me@6 146
Me@14 147 int32
Me@14 148 SSR__giveMinWorkUnitCycles( float32 percentOverhead );
Me@14 149
Me@20 150 void
Me@14 151 SSR__start_primitive();
Me@14 152
Me@20 153 int32
Me@14 154 SSR__end_primitive_and_give_cycles();
Me@14 155
Me@16 156 int32
Me@16 157 SSR__giveIdealNumWorkUnits();
Me@14 158
Me@17 159 int32
Me@17 160 SSR__give_number_of_cores_to_schedule_onto();
Me@17 161
Me@6 162 //=======================
Me@6 163
Me@6 164 void
Me@6 165 SSR__init();
Me@6 166
Me@6 167 void
Me@6 168 SSR__cleanup_after_shutdown();
Me@6 169
Me@6 170 //=======================
Me@6 171
seanhalle@60 172 SlaveVP *
seanhalle@60 173 SSR__create_procr_with( TopLevelFnPtr fnPtr, void *initData,
seanhalle@60 174 SlaveVP *creatingSlv );
Me@6 175
seanhalle@60 176 SlaveVP *
seanhalle@60 177 SSR__create_procr_with_affinity( TopLevelFnPtr fnPtr, void *initData,
seanhalle@60 178 SlaveVP *creatingPr, int32 coreToScheduleOnto);
Me@17 179
Me@6 180 void
seanhalle@60 181 SSR__dissipate_procr( SlaveVP *procrToDissipate );
Me@6 182
Me@6 183 //=======================
Me@6 184 void *
seanhalle@60 185 SSR__malloc_to( int numBytes, SlaveVP *ownerSlv );
Me@17 186
Me@17 187 void
seanhalle@60 188 SSR__free( void *ptrToFree, SlaveVP *owningSlv );
Me@6 189
Me@6 190 void
seanhalle@60 191 SSR__transfer_ownership_of_from_to( void *data, SlaveVP *oldOwnerPr,
seanhalle@60 192 SlaveVP *newOwnerSlv );
Me@6 193
Me@6 194 void
seanhalle@60 195 SSR__add_ownership_by_to( SlaveVP *newOwnerPr, void *data );
Me@6 196
Me@6 197 void
seanhalle@60 198 SSR__remove_ownership_by_from( SlaveVP *loserPr, void *dataLosing );
Me@6 199
Me@6 200 void
Me@6 201 SSR__transfer_ownership_to_outside( void *dataToTransferOwnershipOf );
Me@6 202
Me@6 203
Me@6 204
Me@6 205 //=======================
Me@6 206 void
seanhalle@60 207 SSR__send_of_type_to( SlaveVP *sendPr, void *msg, const int type,
seanhalle@60 208 SlaveVP *receivePr);
Me@6 209
Me@6 210 void
seanhalle@60 211 SSR__send_from_to( void *msg, SlaveVP *sendPr, SlaveVP *receivePr);
Me@6 212
Me@6 213 void *
seanhalle@60 214 SSR__receive_type_to( const int type, SlaveVP *receiveSlv );
Me@6 215
Me@6 216 void *
seanhalle@60 217 SSR__receive_from_to( SlaveVP *sendPr, SlaveVP *receiveSlv );
Me@6 218
Me@6 219
Me@17 220 //======================= Concurrency Stuff ======================
Me@17 221 void
seanhalle@60 222 SSR__start_fn_singleton( int32 singletonID, SlaveVP *animSlv );
Me@21 223
Me@21 224 void
seanhalle@60 225 SSR__end_fn_singleton( int32 singletonID, SlaveVP *animSlv );
Me@21 226
Me@21 227 void
seanhalle@60 228 SSR__start_data_singleton( SSRSingleton **singeltonAddr, SlaveVP *animSlv );
Me@21 229
Me@21 230 void
seanhalle@60 231 SSR__end_data_singleton( SSRSingleton **singletonAddr, SlaveVP *animSlv );
Me@6 232
Me@6 233 void
Me@17 234 SSR__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
seanhalle@60 235 void *data, SlaveVP *animSlv );
Me@17 236
Me@17 237 void
seanhalle@60 238 SSR__start_transaction( int32 transactionID, SlaveVP *animSlv );
Me@17 239
Me@17 240 void
seanhalle@60 241 SSR__end_transaction( int32 transactionID, SlaveVP *animSlv );
Me@6 242
Me@6 243
Me@6 244 //========================= Internal use only =============================
Me@6 245 void
seanhalle@60 246 SSR__Request_Handler( SlaveVP *requestingPr, void *_semEnv );
Me@6 247
seanhalle@60 248 SlaveVP *
seanhalle@60 249 SSR__schedule_slaveVP( void *_semEnv, int coreNum, int slotNum );
Me@6 250
seanhalle@60 251 SlaveVP*
seanhalle@60 252 SSR__create_procr_helper( TopLevelFnPtr fnPtr, void *initData,
msach@27 253 SSRSemEnv *semEnv, int32 coreToScheduleOnto );
Me@6 254
Me@6 255 #endif /* _SSR_H */
Me@6 256