#endif // GC_CACHE_ADAPT
nextBlock(to);
#ifdef GC_CACHE_ADAPT
- if((to->base+to->bound) >= gc_cache_revise_infomation.to_page_end_va) {
+ if((to->ptr) >= gc_cache_revise_infomation.to_page_end_va) {
// end of an to page, wrap up its information
int tmp_factor = tmp_ptr-gc_cache_revise_infomation.to_page_start_va;
int topage=gc_cache_revise_infomation.to_page_index;
to->ptr += isize;
to->offset += isize;
to->top += isize;
-#if 0
#ifdef GC_CACHE_ADAPT
int tmp_ptr = to->ptr;
#endif // GC_CACHE_ADAPT
BAMBOO_MEMSET_WH(to->base, '\0', BAMBOO_CACHE_LINE_SIZE);
(*((int*)(to->base))) = to->offset;
nextBlock(to);
+#if 0
#ifdef GC_CACHE_ADAPT
if((to->base+to->bound) >= gc_cache_revise_infomation.to_page_end_va) {
// end of an to page, wrap up its information
(to->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE);
}
#endif // GC_CACHE_ADAPT
- }
#endif
+ }
+#ifdef GC_CACHE_ADAPT
+ if((to->ptr) >= gc_cache_revise_infomation.to_page_end_va) {
+ // end of an to page, wrap up its information
+ int tmp_factor = tmp_ptr-gc_cache_revise_infomation.to_page_start_va;
+ int topage=gc_cache_revise_infomation.to_page_index;
+ int oldpage = gc_cache_revise_infomation.orig_page_index;
+ int * newtable=&gccachesamplingtbl_r[topage];
+ int * oldtable=&gccachesamplingtbl[oldpage];
+
+ for(int tt = 0; tt < NUMCORESACTIVE; tt++) {
+ (*newtable)=((*newtable)+(*oldtable)*tmp_factor);
+ newtable=(int*) (((char *)newtable)+size_cachesamplingtbl_local_r);
+ oldtable=(int*) (((char *)oldtable)+size_cachesamplingtbl_local);
+ }
+ // prepare for an new to page
+ int tmp_index = (orig->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE);
+ gc_cache_revise_infomation.orig_page_start_va = orig->ptr;
+ gc_cache_revise_infomation.orig_page_end_va = gcbaseva +
+ (BAMBOO_PAGE_SIZE)*((orig->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE)+1);
+ gc_cache_revise_infomation.orig_page_index =
+ (orig->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE);
+ gc_cache_revise_infomation.to_page_start_va = to->ptr;
+ gc_cache_revise_infomation.to_page_end_va = gcbaseva +
+ (BAMBOO_PAGE_SIZE)*((to->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE)+1);
+ gc_cache_revise_infomation.to_page_index =
+ (to->ptr-gcbaseva)/(BAMBOO_PAGE_SIZE);
+ }
+#endif // GC_CACHE_ADAPT
} // if(mark == 1)
#ifdef DEBUG
BAMBOO_DEBUGPRINT(0xe205);
int numchanged = 0;
// check the statistic data
// for each page, decide the new cache strategy
+#ifdef GC_CACHE_ADAPT_POLICY1
numchanged = cacheAdapt_policy_h4h();
- //numchanged = cacheAdapt_policy_local();
- //numchanged = cacheAdapt_policy_hotest();
- //numchanged = cacheAdapt_policy_dominate();
- //numchanged = cacheAdapt_policy_overload();
- //numchanged = cacheAdapt_policy_crowd();
+#elif defined GC_CACHE_ADAPT_POLICY2
+ numchanged = cacheAdapt_policy_local();
+#elif defined GC_CACHE_ADAPT_POLICY3
+ numchanged = cacheAdapt_policy_hotest();
+#elif defined GC_CACHE_ADAPT_POLICY4
+ numchanged = cacheAdapt_policy_dominate();
+#elif defined GC_CACHE_ADAPT_POLICY5
+ numchanged = cacheAdapt_policy_overload();
+#elif defined GC_CACHE_ADAPT_POLICY6
+ numchanged = cacheAdapt_policy_crowd();
+#endif
*gccachepolicytbl = numchanged;
// TODO
//if(numchanged > 0) tprintf("=================\n");
#endif
// flush phase
flush(stackptr);
+#ifdef GC_CACHE_ADAPT
+ // now the master core need to decide the new cache strategy
+ cacheAdapt_master();
+#endif // GC_CACHE_ADAPT
+
gccorestatus[BAMBOO_NUM_OF_CORE] = 0;
while(FLUSHPHASE == gcphase) {
// check the status of all cores
#endif
#ifdef GC_CACHE_ADAPT
- // now the master core need to decide the new cache strategy
- cacheAdapt_master();
-
+#ifdef GC_PROFILE
+ gc_profileItem();
+#endif
gcphase = PREFINISHPHASE;
gccorestatus[BAMBOO_NUM_OF_CORE] = 1;
// Note: all cores should flush their runtime data including non-gc
gccorestatus[i] = 1;
send_msg_1(i, GCSTARTPREF, false);
}
-#ifdef GC_PROFILE
- gc_profileItem();
-#endif
#ifdef RAWPATH // TODO GC_DEBUG
printf("(%x,%x) Start prefinish phase \n", udn_tile_coord_x(),
udn_tile_coord_y());
#define BAMBOO_NUM_BLOCKS ((GC_BAMBOO_NUMCORES)*(2+14))
#define BAMBOO_PAGE_SIZE (64 * 1024) // 64K
#ifdef GC_LARGEPAGESIZE
-#define BAMBOO_SMEM_SIZE (16 * (BAMBOO_PAGE_SIZE))
+#define BAMBOO_PAGE_SIZE (4 * 64 * 1024)
+#define BAMBOO_SMEM_SIZE (4 * (BAMBOO_PAGE_SIZE))
#elif defined GC_SMALLPAGESIZE
#define BAMBOO_SMEM_SIZE (BAMBOO_PAGE_SIZE)
#elif defined GC_SMALLPAGESIZE2
#define BAMBOO_PAGE_SIZE (16 * 1024) // (4096)
#define BAMBOO_SMEM_SIZE (BAMBOO_PAGE_SIZE)
+#elif defined GC_LARGEPAGESIZE2
+#define BAMBOO_PAGE_SIZE (4 * 64 * 1024) // 64K
+#define BAMBOO_SMEM_SIZE ((BAMBOO_PAGE_SIZE))
#else
#define BAMBOO_SMEM_SIZE (4 * (BAMBOO_PAGE_SIZE))
#endif // GC_LARGEPAGESIZE
gc_localheap_s = false;
#ifdef GC_CACHE_ADAPT
gccachestage = false;
- // enable the timer interrupt
-#ifdef GC_CACHE_SAMPLING
- bamboo_tile_timer_set_next_event(GC_TILE_TIMER_EVENT_SETTING); // TODO
- bamboo_unmask_timer_intr();
- bamboo_dtlb_sampling_process();
-#endif // GC_CACHE_SAMPLING
#endif // GC_CACHE_ADAPT
#else
// create the lock table, lockresult table and obj queue
initialization();
initCommunication();
+#ifdef GC_CACHE_ADAPT
+// enable the timer interrupt
+#ifdef GC_CACHE_SAMPLING
+ bamboo_tile_timer_set_next_event(GC_TILE_TIMER_EVENT_SETTING); // TODO
+ bamboo_unmask_timer_intr();
+ bamboo_dtlb_sampling_process();
+#endif // GC_CACHE_SAMPLING
+#endif // GC_CACHE_ADAPT
+
initializeexithandler();
// main process of the execution module
#endif
{ // nonfixed size
if(size > 1) {
- msglength = msgdata[(msgdataindex+1)%(BAMBOO_MSG_BUF_LENGTH)];
+ msglength = msgdata[(msgdataindex+1)&(BAMBOO_MSG_BUF_MASK)/*%(BAMBOO_MSG_BUF_LENGTH)*/];
} else {
return -1;
}
GCCONTROLLERREMOTEFLAG=false;
GCSMALLPAGESIZEFLAG=false;
GCLARGEPAGESIZEFLAG=false;
+GCLARGEPAGESIZE2FLAG=false;
GCLARGESHAREDHEAPFLAG=false;
GCSMALLPAGESIZEFLAG2=false;
GCLARGESHAREDHEAPFLAG2=false;
GCCACHEADAPTFLAG=false
+GCCACHEADAPTPOLICYFLAG=false
+GCCACHEADAPTPOLICY=''
GCCACHESAMPLINGFLAG=false
USEDMALLOC=false
THREADFLAG=false
elif [[ $1 = '-gclargepagesize' ]]
then
GCLARGEPAGESIZEFLAG=true
+elif [[ $1 = '-gclargepagesize2' ]]
+then
+GCLARGEPAGESIZE2FLAG=true
elif [[ $1 = '-gclargesharedheap' ]]
then
GCLARGESHAREDHEAPFLAG=true
elif [[ $1 = '-gccacheadapt' ]]
then
GCCACHEADAPTFLAG=true
+elif [[ $1 = '-gccacheadaptpolicy' ]]
+then
+GCCACHEADAPTPOLICYFLAG=true
+GCCACHEADAPTPOLICY="$2"
+shift
elif [[ $1 = '-gccachesampling' ]]
then
GCCACHESAMPLINGFLAG=true
TILERACFLAGS="${TILERACFLAGS} -DGC_LARGEPAGESIZE"
fi
+if $GCLARGEPAGESIZE2FLAG
+then # GC_LARGEPAGESIZE2 version
+TILERACFLAGS="${TILERACFLAGS} -DGC_LARGEPAGESIZE2"
+fi
+
if $GCLARGESHAREDHEAPFLAG
then # GC_LARGESHAREDHEAP version
TILERACFLAGS="${TILERACFLAGS} -DGC_LARGESHAREDHEAP"
TILERACFLAGS="${TILERACFLAGS} -DGC_CACHE_ADAPT"
fi
+if $GCCACHEADAPTPOLICYFLAG
+then # GC_CACHE_ADAPT version
+TILERACFLAGS="${TILERACFLAGS} -DGC_CACHE_ADAPT_POLICY${GCCACHEADAPTPOLICY}"
+fi
+
if $GCCACHESAMPLINGFLAG
then # GC_CACHE_ADAPT version
TILERACFLAGS="${TILERACFLAGS} -DGC_CACHE_SAMPLING"