#else
// defaultly using local mode
bamboo_smem_mode = SMEMLOCAL;
- //bamboo_smem_mode = SMEMGLOBAL;
- //bamboo_smem_mode = SMEMFIXED;
#endif
} // void setupsmemmode(void)
#endif
outmsglast = 0;
outmsgleft = 0;
isMsgHanging = false;
- //isMsgSending = false;
smemflag = true;
bamboo_cur_msp = NULL;
gcflag = false;
gcprocessing = false;
gcphase = FINISHPHASE;
- //gcnumpre = 0;
gcprecheck = true;
gccurr_heaptop = 0;
gcself_numsendobjs = 0;
#else
gcpointertbl = mgchashCreate_I(2000, 0.75);
#endif
- //gcpointertbl = allocateMGCHash_I(20);
gcforwardobjtbl = allocateMGCHash_I(20, 3);
gcobj2map = 0;
gcmappedobj = 0;
- //gcismapped = false;
gcnumlobjs = 0;
gcheaptop = 0;
gctopcore = 0;
kk++;
}
t_size = tmp_k >> kk;
- gcsharedptbl = mgcsharedhashCreate_I(t_size,0.30);//allocateGCSharedHash_I(20);
+ gcsharedptbl = mgcsharedhashCreate_I(t_size,0.30);
} else {
gcsharedptbl = NULL;
}
BAMBOO_MEMSET_WH(gcrpointertbls, 0,
sizeof(mgcsharedhashtbl_t *)*NUMCORES4GC);
- //sizeof(struct RuntimeHash *)*NUMCORES4GC);
#ifdef SMEMM
gcmem_mixed_threshold = (unsigned int)((BAMBOO_SHARED_MEM_SIZE
-bamboo_reserved_smem*BAMBOO_SMEM_SIZE)*0.8);
#ifdef PROFILE
stall = false;
- //isInterrupt = true;
totalexetime = -1;
- //interrupttime = 0;
taskInfoIndex = 0;
taskInfoOverflow = false;
#ifdef PROFILE_INTERRUPT
#else
mgchashDelete(gcpointertbl);
#endif
- //freeMGCHash(gcpointertbl);
freeMGCHash(gcforwardobjtbl);
- // for mapping info structures
- //freeRuntimeHash(gcrcoretbl);
#else
freeRuntimeHash(lockRedirectTbl);
freeRuntimeHash(objRedirectLockTbl);
if(!isEmpty(&objqueue)) {
profileTaskStart("objqueue checking");
isChecking = true;
- } // if(!isEmpty(&objqueue))
+ } // if(!isEmpty(&objqueue))
#endif
#endif
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xf001);
#endif
-#ifdef PROFILE
- //isInterrupt = false;
-#endif
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xeee1);
#endif
} // while(qitem != NULL)
// try to execute active tasks already enqueued first
addNewItem_I(&objqueue, objInfo);
-#ifdef PROFILE
- //isInterrupt = true;
-#endif
objqueuebreak:
BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
#ifdef DEBUG
#ifdef USEIO
totalexetime = BAMBOO_GET_EXE_TIME() - bamboo_start_time;
#else
-#ifdef PROFILE
- //BAMBOO_DEBUGPRINT_REG(interrupttime);
-#endif
BAMBOO_DEBUGPRINT(BAMBOO_GET_EXE_TIME() - bamboo_start_time);
//BAMBOO_DEBUGPRINT_REG(total_num_t6); // TODO for test
BAMBOO_DEBUGPRINT_REG(corenum);
BAMBOO_DEBUGPRINT(STARTUPCORE);
#endif
- //BAMBOO_DEBUGPRINT(BAMBOO_GET_EXE_TIME()); // TODO
// initialize runtime data structures
initruntimedata();
if(BAMBOO_NUM_OF_CORE > NUMCORESACTIVE - 1) {
// non-executing cores, only processing communications
activetasks = NULL;
-#ifdef PROFILE
- //isInterrupt = false;
-#endif
fakeExecution();
} else {
/* Create queue of active tasks */
return v;
}
-
-
/* This function updates the flag for object ptr. It or's the flag
with the or mask and and's it with the andmask. */
struct ___Object___ *ptr = (struct ___Object___ *)vptr;
{
- //struct QueueItem *tmpptr;
struct parameterwrapper * parameter=NULL;
int j;
int i;
goto nextloop; //that means the object has no tag
//but that param needs tag
else if(tagptr->type==TAGTYPE) { //one tag
- //struct ___TagDescriptor___ * tag=
- //(struct ___TagDescriptor___*) tagptr;
for(i=0; i<parameter->numbertags; i++) {
//slotid is parameter->tagarray[2*i];
int tagid=parameter->tagarray[2*i+1];
if (tagid!=tagptr->flag)
goto nextloop; /*We don't have this tag */
}
- } else { //multiple tags
+ } else { //multiple tags
struct ArrayObject * ao=(struct ArrayObject *) tagptr;
for(i=0; i<parameter->numbertags; i++) {
//slotid is parameter->tagarray[2*i];
struct ___Object___ *ptr = (struct ___Object___ *)vptr;
{
- //struct QueueItem *tmpptr;
struct parameterwrapper * parameter=NULL;
int j;
int i;
goto nextloop; //that means the object has no tag
//but that param needs tag
else if(tagptr->type==TAGTYPE) { //one tag
- //struct ___TagDescriptor___*tag=(struct ___TagDescriptor___*)tagptr;
for(i=0; i<parameter->numbertags; i++) {
//slotid is parameter->tagarray[2*i];
int tagid=parameter->tagarray[2*i+1];
#endif
{ // nonfixed size
if(size > 1) {
- msglength = msgdata[(msgdataindex+1)&(BAMBOO_MSG_BUF_MASK)/*%(BAMBOO_MSG_BUF_LENGTH)*/];
+ msglength = msgdata[(msgdataindex+1)&(BAMBOO_MSG_BUF_MASK)];
} else {
return -1;
}
}
INLINE void processmsg_transobj_I() {
-#ifdef PROFILE_INTERRUPT
- /*if(!interruptInfoOverflow) {
- InterruptInfo* intInfo = RUNMALLOC_I(sizeof(struct interrupt_info));
- interruptInfoArray[interruptInfoIndex] = intInfo;
- intInfo->startTime = BAMBOO_GET_EXE_TIME();
- intInfo->endTime = -1;
- }*/
-#endif
MSG_INDEXINC_I();
struct transObjInfo * transObj=RUNMALLOC_I(sizeof(struct transObjInfo));
int k = 0;
for(k = 0; k < transObj->length; ++k) {
transObj->queues[2*k] = msgdata[msgdataindex]; //[3+2*k];
MSG_INDEXINC_I();
-#ifdef DEBUG
-#ifndef CLOSE_PRINT
- //BAMBOO_DEBUGPRINT_REG(transObj->queues[2*k]);
-#endif
-#endif
transObj->queues[2*k+1] = msgdata[msgdataindex]; //[3+2*k+1];
MSG_INDEXINC_I();
-#ifdef DEBUG
-#ifndef CLOSE_PRINT
- //BAMBOO_DEBUGPRINT_REG(transObj->queues[2*k+1]);
-#endif
-#endif
}
// check if there is an existing duplicate item
{
}
}
#endif
-#ifdef PROFILE_INTERRUPT
- /*if(!interruptInfoOverflow) {
- interruptInfoArray[interruptInfoIndex]->endTime=BAMBOO_GET_EXE_TIME();
- interruptInfoIndex++;
- if(interruptInfoIndex == INTERRUPTINFOLENGTH) {
- interruptInfoOverflow = true;
- }
- }*/
-#endif
}
INLINE void processmsg_transtall_I() {
}
INLINE void processmsg_memrequest_I() {
-#ifdef PROFILE_INTERRUPT
- /*if(!interruptInfoOverflow) {
- InterruptInfo* intInfo = RUNMALLOC_I(sizeof(struct interrupt_info));
- interruptInfoArray[interruptInfoIndex] = intInfo;
- intInfo->startTime = BAMBOO_GET_EXE_TIME();
- intInfo->endTime = -1;
- }*/
-#endif
int data1 = msgdata[msgdataindex];
MSG_INDEXINC_I();
int data2 = msgdata[msgdataindex];
}
#endif
}
-#ifdef PROFILE_INTERRUPT
- /*if(!interruptInfoOverflow) {
- interruptInfoArray[interruptInfoIndex]->endTime=BAMBOO_GET_EXE_TIME();
- interruptInfoIndex++;
- if(interruptInfoIndex == INTERRUPTINFOLENGTH) {
- interruptInfoOverflow = true;
- }
- }*/
-#endif
}
INLINE void processmsg_memresponse_I() {
#ifdef MULTICORE_GC
// fill header to store the size of this mem block
BAMBOO_MEMSET_WH(data1, '\0', BAMBOO_CACHE_LINE_SIZE);
- //memset(data1, 0, BAMBOO_CACHE_LINE_SIZE);
(*((int*)data1)) = data2;
bamboo_smem_size = data2 - BAMBOO_CACHE_LINE_SIZE;
bamboo_cur_msp = data1 + BAMBOO_CACHE_LINE_SIZE;
}
INLINE void processmsg_gcmaprequest_I() {
-#ifdef GC_PROFILE
- //unsigned long long ttime = BAMBOO_GET_EXE_TIME();
-#endif
void * dstptr = NULL;
int data1 = msgdata[msgdataindex];
MSG_INDEXINC_I();
int data2 = msgdata[msgdataindex];
MSG_INDEXINC_I();
-#ifdef GC_PROFILE
- // TODO unsigned long long ttime = BAMBOO_GET_EXE_TIME();
-#endif
#ifdef LOCALHASHTBL_TEST
RuntimeHashget(gcpointertbl, data1, &dstptr);
#else
dstptr = mgchashSearch(gcpointertbl, data1);
-#endif
- //MGCHashget(gcpointertbl, data1, &dstptr);
-#ifdef GC_PROFILE
- // TODO flushstalltime += BAMBOO_GET_EXE_TIME() - ttime;
-#endif
-#ifdef GC_PROFILE
- // TODO unsigned long long ttimei = BAMBOO_GET_EXE_TIME();
#endif
if(NULL == dstptr) {
// no such pointer in this core, something is wrong
BAMBOO_DEBUGPRINT_REG(data2);
#endif
BAMBOO_EXIT(0xe01c);
- //assume that the object was not moved, use the original address
- /*if(isMsgSending) {
- cache_msg_3(msgdata[2], GCMAPINFO, msgdata[1], msgdata[1]);
- } else {
- send_msg_3(msgdata[2], GCMAPINFO, msgdata[1], msgdata[1]);
- }*/
} else {
// send back the mapping info, cache the msg first
if(BAMBOO_CHECK_SEND_MODE()) {
send_msg_3(data2, GCMAPINFO, data1, (int)dstptr, true);
}
}
-#ifdef GC_PROFILE
- // TODO flushstalltime_i += BAMBOO_GET_EXE_TIME()-ttimei;
- //num_mapinforequest_i++;
-#endif
}
INLINE void processmsg_gcmapinfo_I() {
-#ifdef GC_PROFILE
- //unsigned long long ttime = BAMBOO_GET_EXE_TIME();
-#endif
int data1 = msgdata[msgdataindex];
MSG_INDEXINC_I();
gcmappedobj = msgdata[msgdataindex]; // [2]
#else
mgchashInsert_I(gcpointertbl, data1, gcmappedobj);
#endif
- //MGCHashadd_I(gcpointertbl, data1, gcmappedobj);
if(data1 == gcobj2map) {
gcismapped = true;
}
-#ifdef GC_PROFILE
- //flushstalltime += BAMBOO_GET_EXE_TIME() - ttime;
-#endif
}
INLINE void processmsg_gcmaptbl_I() {
MSG_INDEXINC_I();
int data2 = msgdata[msgdataindex];
MSG_INDEXINC_I();
- gcrpointertbls[data2] = (mgcsharedhashtbl_t *)data1; //(struct GCSharedHash *)data1;
+ gcrpointertbls[data2] = (mgcsharedhashtbl_t *)data1;
}
INLINE void processmsg_gclobjinfo_I() {
#else
mgchashInsert_I(gcpointertbl, data1, data2);
#endif
- //MGCHashadd_I(gcpointertbl, data1, data2);
mgcsharedhashInsert_I(gcsharedptbl, data1, data2);
}
type = msgdata[msgdataindex]; //[0]
MSG_INDEXINC_I();
msgdatafull = false;
- // TODO
- //tprintf("msg type: %x\n", type);
switch(type) {
case TRANSOBJ: {
// receive a object transfer msg
break;
} // switch(type)
msglength = BAMBOO_MSG_BUF_LENGTH;
- // TODO
- //printf("++ msg: %x \n", type);
if((msgdataindex != msgdatalast) || (msgdatafull)) {
// still have available msg
int numenterflags) {
void * taskpointerarray[MAXTASKPARAMS];
int j;
- //int numparams=parameter->task->numParameters;
int numiterators=parameter->task->numTotal-1;
int retval=1;
tpd->parameterArray[j]=taskpointerarray[j];
}
/* Enqueue task */
- if (( /*!gencontains(failedtasks, tpd)&&*/
- !gencontains(activetasks,tpd))) {
+ if (!gencontains(activetasks,tpd)) {
genputtable(activetasks, tpd, tpd);
} else {
RUNFREE(tpd->parameterArray);
int numenterflags) {
void * taskpointerarray[MAXTASKPARAMS];
int j;
- //int numparams=parameter->task->numParameters;
int numiterators=parameter->task->numTotal-1;
int retval=1;
- //int addnormal=1;
- //int adderror=1;
struct taskdescriptor * task=parameter->task;
tpd->parameterArray[j]=taskpointerarray[j];
}
/* Enqueue task */
- if (( /*!gencontains(failedtasks, tpd)&&*/
- !gencontains(activetasks,tpd))) {
+ if (!gencontains(activetasks,tpd)) {
genputtable_I(activetasks, tpd, tpd);
} else {
RUNFREE(tpd->parameterArray);
#endif
/* See if there are any active tasks */
- //if (hashsize(activetasks)>0) {
int i;
#ifdef PROFILE
#ifdef ACCURATEPROFILE
profileTaskStart("tpd checking");
#endif
#endif
- //long clock1;
- //clock1 = BAMBOO_GET_EXE_TIME();
busystatus = true;
currtpd=(struct taskparamdescriptor *) getfirstkey(activetasks);
numparams=currtpd->task->numParameters;
numtotal=currtpd->task->numTotal;
- // clear the lockRedirectTbl
// (TODO, this table should be empty after all locks are released)
// reset all locks
- /*for(j = 0; j < MAXTASKPARAMS; j++) {
- runtime_locks[j].redirectlock = 0;
- runtime_locks[j].value = 0;
- }*/
// get all required locks
runtime_locklen = 0;
// check which locks are needed
runtime_locklen++;
}
} // line 2713: for(i = 0; i < numparams; i++)
- // grab these required locks
+ // grab these required locks
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xe991);
#endif
- //long clock2;
- //clock2 = BAMBOO_GET_EXE_TIME();
for(i = 0; i < runtime_locklen; i++) {
int * lock = (int *)(runtime_locks[i].redirectlock);
BAMBOO_ENTER_RUNTIME_MODE_FROM_CLIENT();
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xf001);
-#endif
-#ifdef PROFILE
- //isInterrupt = false;
#endif
while(!lockflag) {
BAMBOO_WAITING_FOR_LOCK(0);
lockflag = false;
#ifndef INTERRUPT
reside = false;
-#endif
-#ifdef PROFILE
- //isInterrupt = true;
#endif
BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
#ifdef DEBUG
#endif
#endif
goto newtask;
- //}
}
} // line 2752: for(i = 0; i < runtime_locklen; i++)
- /*long clock3;
- clock3 = BAMBOO_GET_EXE_TIME();
- //tprintf("sort: %d, grab: %d \n", clock2-clock1, clock3-clock2);*/
-
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xe993);
#endif
goto newtask;
}
} // line2865
- /* Check if the object's flags still meets requirements */
+ /* Check if the object's flags still meets requirements */
{
int tmpi = 0;
bool ismet = false;
taskpointerarray[i+OFFSET]=parameter;
} // line 2824: for(i=0; i<numparams; i++)
- /* Copy the tags */
+ /* Copy the tags */
for(; i<numtotal; i++) {
taskpointerarray[i+OFFSET]=currtpd->parameterArray[i];
}
#endif
profileTaskStart(currtpd->task->name);
#endif
- // TODO
- //long clock4;
- //clock4 = BAMBOO_GET_EXE_TIME();
- //tprintf("sort: %d, grab: %d, check: %d \n", (int)(clock2-clock1), (int)(clock3-clock2), (int)(clock4-clock3));
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xe997);
#endif
((void (*)(void **))currtpd->task->taskptr)(taskpointerarray);
- // TODO
- //long clock5;
- //clock5 = BAMBOO_GET_EXE_TIME();
- // tprintf("sort: %d, grab: %d, check: %d \n", (int)(clock2-clock1), (int)(clock3-clock2), (int)(clock4-clock3));
#ifdef PROFILE
#ifdef ACCURATEPROFILE
}
} // line 3015: if(islock)
- //long clock6;
- //clock6 = BAMBOO_GET_EXE_TIME();
- //tprintf("sort: %d, grab: %d, check: %d \n", (int)(clock2-clock1), (int)(clock3-clock2), (int)(clock4-clock3));
-
#ifdef PROFILE
// post task execution finish, set the end of the postTaskInfo
profileTaskEnd();
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xe99a);
#endif
- //long clock7;
- //clock7 = BAMBOO_GET_EXE_TIME();
- //tprintf("sort: %d, grab: %d, check: %d, release: %d, other %d \n", (int)(clock2-clock1), (int)(clock3-clock2), (int)(clock4-clock3), (int)(clock6-clock5), (int)(clock7-clock6));
-
} //
//} // if (hashsize(activetasks)>0)
} // while(hashsize(activetasks)>0)
for(i=0; i<pd->numbertags; i++) {
int slotid=pd->tagarray[2*i];
- //int tagid=pd->tagarray[2*i+1];
if (statusarray[slotid+numparams]!=0) {
/* This tag has already been enqueued, use it to narrow search */
parameter->iterators[*iteratorcount].tagbindings[tagcount]=
taskInfoIndex++;
if(taskInfoIndex == TASKINFOLENGTH) {
taskInfoOverflow = true;
- //taskInfoIndex = 0;
}
}
}
unsigned long long preprocessingtime = 0;
unsigned long long objqueuecheckingtime = 0;
unsigned long long postprocessingtime = 0;
- //int interruptiontime = 0;
unsigned long long other = 0;
unsigned long long averagetasktime = 0;
int tasknum = 0;
printf("\nAverage task execution time: %lld\n", averagetasktime);
- //printf("\nTotal time spent for interruptions: %lld\n", interrupttime);
#else
int i = 0;
int j = 0;