towards fixing bugs...
[IRC.git] / Robust / src / Runtime / bamboo / multicoregarbage.c
index 05bb2d8cba1054074ee31d0d0341622a284a071e..3a42576892a38f6d8cbd0a2f52f5cc265fa8bd56 100644 (file)
@@ -9,6 +9,9 @@
 #include "gcqueue.h"
 #include "multicoremem_helper.h"
 #include "bambooalign.h"
+#ifdef PERFCOUNT
+#include "bme_perf_counter.h"
+#endif
 
 volatile bool gcflag;
 gc_status_t gc_status_info;
@@ -114,9 +117,6 @@ void initmulticoregcdata() {
 #ifdef MGC_SPEC
   gc_profile_flag = false;
 #endif
-#ifdef GC_CACHE_ADAPT
-  gccachestage = false;
-#endif 
 
   if(STARTUPCORE == BAMBOO_NUM_OF_CORE) {
     allocationinfo.blocktable=RUNMALLOC(sizeof(struct blockrecord)*GCNUMBLOCK);
@@ -296,6 +296,8 @@ void gc_collect(struct garbagelist * stackptr) {
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n");
+  GCPROFILE_ITEM();
+
   mark(stackptr);
   GC_PRINTF("Finish mark phase, start compact phase\n");
   compact();
@@ -332,12 +334,15 @@ void gc_nocollect(struct garbagelist * stackptr) {
   GC_PRINTF("Do initGC\n");
   initGC();
   CACHEADAPT_GC(true);
+
   //send init finish msg to core coordinator
   send_msg_2(STARTUPCORE,GCFINISHINIT,BAMBOO_NUM_OF_CORE);
 
+
   WAITFORGCPHASE(MARKPHASE);
 
   GC_PRINTF("Start mark phase\n"); 
+  GCPROFILE_ITEM();
   mark(stackptr);
   GC_PRINTF("Finish mark phase, wait for update\n");
 
@@ -449,6 +454,7 @@ void gc_master(struct garbagelist * stackptr) {
   unsigned long long tmpt = BAMBOO_GET_EXE_TIME();
   CACHEADAPT_OUTPUT_CACHE_SAMPLING();
   gc_output_cache_policy_time += (BAMBOO_GET_EXE_TIME()-tmpt);
+  GCPROFILE_ITEM();
   //tprintf("start mark phase\n");
   // do mark phase
   master_mark(stackptr);
@@ -475,7 +481,7 @@ void gc_master(struct garbagelist * stackptr) {
 
   master_finish();
 
-  //tprintf("finish GC ! %d \n",gcflag);
+  tprintf("finish GC ! %d \n",gcflag);
 } 
 
 void pregccheck() {
@@ -508,8 +514,6 @@ void pregcprocessing() {
 #if defined(GC_CACHE_ADAPT)&&defined(GC_CACHE_SAMPLING)
   // disable the timer interrupt
   bamboo_mask_timer_intr();
-#endif
-#if defined(GC_CACHE_ADAPT)&&defined(GC_CACHE_SAMPLING)
   // get the sampling data 
   bamboo_output_dtlb_sampling();
 #endif
@@ -520,6 +524,8 @@ void postgcprocessing() {
   // enable the timer interrupt
   bamboo_tile_timer_set_next_event(GC_TILE_TIMER_EVENT_SETTING); 
   bamboo_unmask_timer_intr();
+  //turn on sampling again
+  bamboo_dtlb_sampling_init();
 #endif
 }
 
@@ -529,6 +535,9 @@ bool gc(struct garbagelist * stackptr) {
     gc_status_info.gcprocessing = false;
     return false;
   }
+#ifdef PERFCOUNT
+  profile_start(GC_REGION);
+#endif
 
   // core coordinator routine
   if(0 == BAMBOO_NUM_OF_CORE) {
@@ -553,6 +562,9 @@ bool gc(struct garbagelist * stackptr) {
     gc_nocollect(stackptr);
   }
   postgcprocessing();
+#ifdef PERFCOUNT
+  profile_start(APP_REGION);
+#endif
   return true;
 }