bug fix
authorjzhou <jzhou>
Wed, 22 Sep 2010 18:55:18 +0000 (18:55 +0000)
committerjzhou <jzhou>
Wed, 22 Sep 2010 18:55:18 +0000 (18:55 +0000)
Robust/src/Runtime/bamboo/multicoregarbage.c
Robust/src/Runtime/bamboo/multicoregarbage.h
Robust/src/Runtime/bamboo/multicoreruntime.h
Robust/src/Runtime/bamboo/multicoretask.c
Robust/src/buildscript

index 381083a365c76d08cd073c22fa597b6faae0d03f..5a92e4702914f96f7a7c4195c0213666067324b3 100644 (file)
@@ -2043,7 +2043,7 @@ innermoveobj:
 #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;
@@ -2114,7 +2114,6 @@ innermoveobj:
     to->ptr += isize;
     to->offset += isize;
     to->top += isize;
-#if 0
 #ifdef GC_CACHE_ADAPT
        int tmp_ptr = to->ptr;
 #endif // GC_CACHE_ADAPT
@@ -2123,6 +2122,7 @@ innermoveobj:
       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
@@ -2151,8 +2151,36 @@ innermoveobj:
                  (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);
@@ -3344,12 +3372,19 @@ void cacheAdapt_master() {
   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");
@@ -3941,6 +3976,11 @@ inline void gc_master(struct garbagelist * stackptr) {
 #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
@@ -3957,9 +3997,9 @@ inline void gc_master(struct garbagelist * stackptr) {
 #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
@@ -3969,9 +4009,6 @@ inline void gc_master(struct garbagelist * stackptr) {
        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());
index 1189f38650a653a0345962246c5a801e7785e364..5977e47a33f773681faba772cfc2dbc4c17cc9e7 100644 (file)
@@ -151,7 +151,7 @@ void * gcmappingtbl[NUMCORESACTIVE][NUM_MAPPING];*/
 #ifdef GC_SMALLPAGESIZE
 #define BAMBOO_RMSP_SIZE (1024 * 1024)
 #else
-#define BAMBOO_RMSP_SIZE (BAMBOO_SMEM_SIZE) // (45 * 16 * 1024)
+#define BAMBOO_RMSP_SIZE (BAMBOO_SMEM_SIZE*2) // (45 * 16 * 1024)
 #endif
 mspace bamboo_rmsp;
 // shared pointer mapping tbl
index 0651c7c60e4f42c958f4227423e9e8f3476008a7..e4e6615f856c90c1ff03724e57c4c9bd0783ceea 100644 (file)
@@ -306,12 +306,16 @@ struct Queue * totransobjqueue; // queue to hold objs to be transferred
 #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
index 9a40381f6eb901fba4910a532748f2b07e1c55ce..c56bf727b0b2a81aac646c7b6e2376f0732a1162 100644 (file)
@@ -377,12 +377,6 @@ void initruntimedata() {
   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
@@ -793,6 +787,15 @@ inline void run(void * arg) {
   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
@@ -2064,7 +2067,7 @@ INLINE int checkMsgLength_I(int size) {
 #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;
        }
index e5a5984fbfc22f6fdbd431a6f247384d07095cba..1ffb3f5d7258aeaf5bc5248721b184b14ae074ac 100755 (executable)
@@ -187,10 +187,13 @@ GCCONTROLLERNEARFLAG=false;
 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
@@ -467,6 +470,9 @@ GCSMALLPAGESIZEFLAG2=true
 elif [[ $1 = '-gclargepagesize' ]]
 then
 GCLARGEPAGESIZEFLAG=true
+elif [[ $1 = '-gclargepagesize2' ]]
+then
+GCLARGEPAGESIZE2FLAG=true
 elif [[ $1 = '-gclargesharedheap' ]]
 then
 GCLARGESHAREDHEAPFLAG=true
@@ -476,6 +482,11 @@ GCLARGESHAREDHEAPFLAG2=true
 elif [[ $1 = '-gccacheadapt' ]]
 then
 GCCACHEADAPTFLAG=true
+elif [[ $1 = '-gccacheadaptpolicy' ]]
+then
+GCCACHEADAPTPOLICYFLAG=true
+GCCACHEADAPTPOLICY="$2"
+shift
 elif [[ $1 = '-gccachesampling' ]]
 then
 GCCACHESAMPLINGFLAG=true
@@ -963,6 +974,11 @@ then # GC_LARGEPAGESIZE version
 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"
@@ -983,6 +999,11 @@ then # GC_CACHE_ADAPT version
 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"