# HG changeset patch # User Some Random Person # Date 1331440538 28800 # Node ID 33b2eb9af81a3cd640c36e39d351c44075ad0cce # Parent 3c9ed64db705f1e851800a6c9081530eafc09dd5 more changes to vms_impl and ssr_impl diff -r 3c9ed64db705 -r 33b2eb9af81a DESIGN_NOTES.txt --- a/DESIGN_NOTES.txt Fri Mar 09 22:28:08 2012 -0800 +++ b/DESIGN_NOTES.txt Sat Mar 10 20:35:38 2012 -0800 @@ -23,7 +23,7 @@ { AVProcr newSlv = malloc( sizeof(AVProcr) ); newSlv->jmpPtr = fnPtr; -newSlv->coreLoopDonePt = &CoreLoopDonePt; //label is in coreLoop +newSlv->coreCtlrDonePt = &CoreCtlrDonePt; //label is in coreCtlr newSlv->data = initialData; newSlv->stackPtr = createNewStack(); return newSlv; @@ -38,19 +38,19 @@ MasterLoop: -- puts AVProcr structures onto the workQ -CoreLoop: +CoreCtlr: -- gets stack-ptr out of AVProcr and sets the core's stack-ptr to that -- gets data-ptr out of AVProcr and puts it into reg GCC uses for that param -- puts AVProcr's addr into reg GCC uses for the AVProcr-pointer param -- jumps to the addr in AVProcr's jmp-ptr field -CoreLoop() +CoreCtlr() { while( FOREVER ) { nextSlv = readQ( workQ ); //workQ is static (global) var declared volatile = nextSlv->data; = nextSlv; = nextSlv->stackPtr; jmp nextSlv->jmpPtr; -CoreLoopDonePt: //label's addr put into AVProcr when create new one +CoreCtlrDonePt: //label's addr put into AVProcr when create new one } } (Note, for suspendable processors coming back from suspension, there is no @@ -62,12 +62,12 @@ pr->jmpPtr = &ResumePt; //label defined a few lines below pr->slave->doneFlag = TRUE; pr->stackPtr = ; -jmp pr->coreLoopDonePt; +jmp pr->coreCtlrDonePt; ResumePt: return; } -This works because the core loop will have switched back to this stack - before jumping to ResumePt.. also, the core loop never modifies the +This works because the core controller will have switched back to this stack + before jumping to ResumePt.. also, the core controller never modifies the stack pointer, it simply switches to whatever stack pointer is in the next AVProcr it gets off the workQ. @@ -171,7 +171,7 @@ goto *labelAddr; --2 -In CoreLoop, will check whether VirtProc just born, or was suspended. +In CoreCtlr, will check whether VirtProc just born, or was suspended. If just born, do bit of code that sets up the virtual processor's stack and frame according to the __cdecl convention for the standard virt proc fn typedef -- save the pointer to data and pointer to virt proc struc into diff -r 3c9ed64db705 -r 33b2eb9af81a SSR_PluginFns.c --- a/SSR_PluginFns.c Fri Mar 09 22:28:08 2012 -0800 +++ b/SSR_PluginFns.c Sat Mar 10 20:35:38 2012 -0800 @@ -176,7 +176,7 @@ void handleDissipate( SlaveVP *requestingPr, SSRSemEnv *semEnv ) { - DEBUG1(dbgRqstHdlr,"Dissipate request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"Dissipate request from processor %d\n",requestingPr->slaveID) //free any semantic data allocated to the virt procr VMS_PI__free( requestingPr->semanticData ); @@ -238,14 +238,14 @@ { SSRSemReq *semReq; SlaveVP *newPr; - DEBUG1(dbgRqstHdlr,"Create request from processor %d ",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"Create request from processor %d ",requestingPr->slaveID) semReq = VMS_PI__take_sem_reqst_from( req ); newPr = SSR__create_procr_helper( semReq->fnPtr, semReq->initData, semEnv, semReq->coreToScheduleOnto ); - DEBUG1(dbgRqstHdlr,"(new VP: %d)\n",newPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"(new VP: %d)\n",newPr->slaveID) #ifdef HOLISTIC__TURN_ON_OBSERVE_UCC Dependency newd; diff -r 3c9ed64db705 -r 33b2eb9af81a SSR_Request_Handlers.c --- a/SSR_Request_Handlers.c Fri Mar 09 22:28:08 2012 -0800 +++ b/SSR_Request_Handlers.c Sat Mar 10 20:35:38 2012 -0800 @@ -89,7 +89,7 @@ HashEntry *entry; HashTable *commHashTbl = semEnv->commHashTbl; - DEBUG1(dbgRqstHdlr,"SendType request from processor %d\n",semReq->sendPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"SendType request from processor %d\n",semReq->sendPr->slaveID) receivePr = semReq->receivePr; //For "send", know both send & recv procrs sendPr = semReq->sendPr; @@ -120,7 +120,7 @@ SSRSemReq *clonedReq = cloneReq( semReq ); clonedReq-> nextReqInHashEntry = waitingReq->nextReqInHashEntry; waitingReq->nextReqInHashEntry = clonedReq; - DEBUG2( dbgRqstHdlr, "linked requests: %p, %p | ", clonedReq,\ + DEBUG_Print2( dbgRqstHdlr, "linked requests: %p, %p | ", clonedReq,\ waitingReq ) return; } @@ -185,7 +185,7 @@ HashEntry *entry; HashTable *commHashTbl = semEnv->commHashTbl; - DEBUG2(dbgRqstHdlr,"SendFromTo request from processor %d to %d\n",semReq->sendPr->slaveID,semReq->receivePr->slaveID) + DEBUG_Print2(dbgRqstHdlr,"SendFromTo request from processor %d to %d\n",semReq->sendPr->slaveID,semReq->receivePr->slaveID) receivePr = semReq->receivePr; //For "send", know both send & recv procrs sendPr = semReq->sendPr; @@ -285,7 +285,7 @@ receivePr = semReq->receivePr; - DEBUG1(dbgRqstHdlr,"ReceiveType request from processor %d\n",receivePr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"ReceiveType request from processor %d\n",receivePr->slaveID) key[0] = (int)receivePr->slaveID; key[1] = (int)(semReq->msgType); @@ -358,7 +358,7 @@ HashEntry *entry; HashTable *commHashTbl = semEnv->commHashTbl; - DEBUG2(dbgRqstHdlr,"ReceiveFromTo request from processor %d to %d\n",semReq->sendPr->slaveID,semReq->receivePr->slaveID) + DEBUG_Print2(dbgRqstHdlr,"ReceiveFromTo request from processor %d to %d\n",semReq->sendPr->slaveID,semReq->receivePr->slaveID) receivePr = semReq->receivePr; sendPr = semReq->sendPr; //for receive from-to, know send procr @@ -427,7 +427,7 @@ handleMalloc( SSRSemReq *semReq, SlaveVP *requestingPr, SSRSemEnv *semEnv ) { void *ptr; - DEBUG1(dbgRqstHdlr,"Malloc request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"Malloc request from processor %d\n",requestingPr->slaveID) ptr = VMS_PI__malloc( semReq->sizeToMalloc ); requestingPr->dataRetFromReq = ptr; @@ -439,7 +439,7 @@ void handleFree( SSRSemReq *semReq, SlaveVP *requestingPr, SSRSemEnv *semEnv ) { - DEBUG1(dbgRqstHdlr,"Free request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"Free request from processor %d\n",requestingPr->slaveID) VMS_PI__free( semReq->ptrToFree ); resume_slaveVP( requestingPr, semEnv ); } @@ -477,7 +477,7 @@ handleStartFnSingleton( SSRSemReq *semReq, SlaveVP *requestingPr, SSRSemEnv *semEnv ) { SSRSingleton *singleton; - DEBUG1(dbgRqstHdlr,"StartFnSingleton request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"StartFnSingleton request from processor %d\n",requestingPr->slaveID) singleton = &(semEnv->fnSingletons[ semReq->singletonID ]); handleStartSingleton_helper( singleton, requestingPr, semEnv ); @@ -487,7 +487,7 @@ SSRSemEnv *semEnv ) { SSRSingleton *singleton; - DEBUG1(dbgRqstHdlr,"StartDataSingleton request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"StartDataSingleton request from processor %d\n",requestingPr->slaveID) if( *(semReq->singletonPtrAddr) == NULL ) { singleton = VMS_PI__malloc( sizeof(SSRSingleton) ); singleton->waitQ = makeVMSQ(); @@ -534,7 +534,7 @@ { SSRSingleton *singleton; - DEBUG1(dbgRqstHdlr,"EndFnSingleton request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"EndFnSingleton request from processor %d\n",requestingPr->slaveID) singleton = &(semEnv->fnSingletons[ semReq->singletonID ]); handleEndSingleton_helper( singleton, requestingPr, semEnv ); @@ -545,7 +545,7 @@ { SSRSingleton *singleton; - DEBUG1(dbgRqstHdlr,"EndDataSingleton request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"EndDataSingleton request from processor %d\n",requestingPr->slaveID) singleton = *(semReq->singletonPtrAddr); handleEndSingleton_helper( singleton, requestingPr, semEnv ); @@ -558,7 +558,7 @@ void handleAtomic( SSRSemReq *semReq, SlaveVP *requestingPr, SSRSemEnv *semEnv ) { - DEBUG1(dbgRqstHdlr,"Atomic request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"Atomic request from processor %d\n",requestingPr->slaveID) semReq->fnToExecInMaster( semReq->dataForFn ); resume_slaveVP( requestingPr, semEnv ); } @@ -583,7 +583,7 @@ { SSRSemData *semData; TransListElem *nextTransElem; - DEBUG1(dbgRqstHdlr,"TransStart request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"TransStart request from processor %d\n",requestingPr->slaveID) //check ordering of entering transactions is correct semData = requestingPr->semanticData; @@ -637,7 +637,7 @@ SSRTrans *transStruc; TransListElem *lastTrans; - DEBUG1(dbgRqstHdlr,"TransEnd request from processor %d\n",requestingPr->slaveID) + DEBUG_Print1(dbgRqstHdlr,"TransEnd request from processor %d\n",requestingPr->slaveID) transStruc = &(semEnv->transactionStrucs[ semReq->transID ]); diff -r 3c9ed64db705 -r 33b2eb9af81a SSR_lib.c --- a/SSR_lib.c Fri Mar 09 22:28:08 2012 -0800 +++ b/SSR_lib.c Sat Mar 10 20:35:38 2012 -0800 @@ -30,7 +30,7 @@ /*TODO: Q: dealing with library f()s and DKU vs WT vs FoR * (still want to do FoR, with time-lines as syntax, could be super cool) - * A: thinking pin the coreLoops for all of BLIS -- let Master arbitrate + * A: thinking pin the coreCtlrs for all of BLIS -- let Master arbitrate * among library, DKU, WT, FoR -- all the patterns in terms of virtual * processors (or equivalently work-units), so Master picks which virt procr * from which portions of app (DKU, WT, FoR) onto which sched slots