Bug fixes in MGC verison. SPECjbb2005 is now working with 62-core gc.
authorjzhou <jzhou>
Wed, 23 Mar 2011 01:05:04 +0000 (01:05 +0000)
committerjzhou <jzhou>
Wed, 23 Mar 2011 01:05:04 +0000 (01:05 +0000)
Robust/src/IR/Flat/BuildCodeMGC.java
Robust/src/Runtime/bamboo/multicoregarbage.c
Robust/src/Runtime/bamboo/multicoregarbage.h
Robust/src/Runtime/bamboo/multicoreruntime.c

index adbb32258f9a0dec359a9fc6252dc7915912c778..d7b2accdf98500b46a16084bf7e6ef9f0ef5633b 100644 (file)
@@ -209,9 +209,6 @@ public class BuildCodeMGC extends BuildCode {
         } else {
           outmethod.println("    global_defs_p->"+t_cd.getSafeSymbol()+"classobj = allocate_new(" + typeutil.getClass(TypeUtil.ObjectClass).getId() + ");");
         }
-        outmethod.println("    global_defs_p->"+t_cd.getSafeSymbol()+"classobj->type = " + t_cd.getId() + ";");
-        
-        outmethod.println("    initlock((struct ___Object___ *)((global_defs_p->"+t_cd.getSafeSymbol()+"classobj)));");
         outmethod.println(" }");
         
       }
index ff0b2c257d1879d1aa3ea151cefba34ab8ae164f..41c33447ba4a62259d2595e06a0c5a18b067ab3f 100644 (file)
@@ -8,12 +8,6 @@
 #include "ObjectHash.h"
 #include "GCSharedHash.h"
 
-#ifdef TASK
-#define BAMBOOMARKBIT 6
-#elif defined MGC
-#define BAMBOOMARKBIT 4
-#endif // TASK
-
 extern int corenum;
 #ifdef TASK
 extern struct parameterwrapper ** objectqueues[][NUMCLASSES];
@@ -1336,7 +1330,6 @@ inline void mark(bool isfirst,
                send_msg_4(STARTUPCORE, GCFINISHMARK, BAMBOO_NUM_OF_CORE,
                                   gcself_numsendobjs, gcself_numreceiveobjs, false);
                sendStall = true;
-               tprintf("Make finished %x \n", (int)BAMBOO_NUM_OF_CORE);
       }
     }  // if(STARTUPCORE == BAMBOO_NUM_OF_CORE) ...
     GC_BAMBOO_DEBUGPRINT(0xed0a);
@@ -1765,8 +1758,8 @@ inline bool moveobj(struct moveHelper * orig,
   int mark = 0;
   int isize = 0;
 innermoveobj:
-  while((char)(*((int*)(orig->ptr))) == (char)(-2)) {
-    orig->ptr = (int*)(orig->ptr) + 1;
+  while((*((char*)(orig->ptr))) == (char)(-2)) {
+       orig->ptr = (void*)(orig->ptr) + 1;
   }
 #ifdef GC_CACHE_ADAPT
   completePageConvert(orig, to, to->ptr, false);
@@ -1788,7 +1781,7 @@ innermoveobj:
   type = ((int *)(origptr))[0];
   size = 0;
   if(type == 0) {
-    // end of this block, go to next one
+       // end of this block, go to next one
     if(!nextSBlock(orig)) {
       // finished, no more data
       return true;
@@ -1866,7 +1859,7 @@ innermoveobj:
          }
        }
     BAMBOO_ENTER_CLIENT_MODE_FROM_RUNTIME();
-    GC_BAMBOO_DEBUGPRINT(0xcdce);
+       GC_BAMBOO_DEBUGPRINT(0xcdce);
     GC_BAMBOO_DEBUGPRINT_REG(origptr);
     GC_BAMBOO_DEBUGPRINT_REG(toptr);
     GC_BAMBOO_DEBUGPRINT_REG(isize);
@@ -2097,7 +2090,6 @@ inline void compact() {
     (struct moveHelper *)RUNMALLOC(sizeof(struct moveHelper));
   struct moveHelper * to =
     (struct moveHelper *)RUNMALLOC(sizeof(struct moveHelper));
-
   if(!initOrig_Dst(orig, to)) {
     // no available data to compact
     // send compact finish msg to STARTUP core
@@ -2121,7 +2113,6 @@ inline void compact() {
   INTPTR heaptopptr = 0;
   bool localcompact = true;
   compacthelper(orig, to, &filledblocks, &heaptopptr, &localcompact);
-
   RUNFREE(orig);
   RUNFREE(to);
 } // compact()
@@ -3286,6 +3277,7 @@ inline void gc_master(struct garbagelist * stackptr) {
   bool isfirst = true;
   bool allStall = false;
 
+
 #ifdef GC_CACHE_ADAPT
   // prepare for cache adaption:
   cacheAdapt_gc(true);
@@ -3668,8 +3660,6 @@ inline bool gc(struct garbagelist * stackptr) {
     return false;
   }
 
-  if(BAMBOO_NUM_OF_CORE==0) tprintf("GC starts!\n"); // TODO
-
 #ifdef GC_CACHE_ADAPT
 #ifdef GC_CACHE_SAMPLING
     // disable the timer interrupt
@@ -3679,7 +3669,7 @@ inline bool gc(struct garbagelist * stackptr) {
   // core coordinator routine
   if(0 == BAMBOO_NUM_OF_CORE) {
 #ifdef GC_DEBUG
-    printf("(%x,%X) Check if can do gc or not\n", udn_tile_coord_x(),
+    printf("(%x,%x) Check if can do gc or not\n", udn_tile_coord_x(),
                   udn_tile_coord_y());
 #endif
        bool isallstall = true;
index 5bce35db0e848c84c360e5e1917e815871c9f527..92528b2fdad7ce59fb1ed23da17a347e6482e07e 100644 (file)
 #define bool int
 #endif
 
+#ifdef TASK
+#define BAMBOOMARKBIT 6
+#elif defined MGC
+#define BAMBOOMARKBIT 4
+#endif // TASK
+
 // data structures for GC
 #define BAMBOO_SMEM_SIZE_L (BAMBOO_SMEM_SIZE * 2)
 #define BAMBOO_LARGE_SMEM_BOUND (BAMBOO_SMEM_SIZE_L*NUMCORES4GC)
index 9b3eb1a3dad313c335fd4f265b94fb8a1d923f96..496fc086bc14d43c33df6bbfb534ec17276438b9 100644 (file)
@@ -516,9 +516,6 @@ INLINE void initruntimedata() {
   gctomove = false;
   gcmovepending = 0;
   gcblock2fill = 0;
-  gcsbstarttbl = BAMBOO_BASE_VA;
-  bamboo_smemtbl = (void *)gcsbstarttbl
-               + (BAMBOO_SHARED_MEM_SIZE/BAMBOO_SMEM_SIZE)*sizeof(INTPTR);
   if(BAMBOO_NUM_OF_CORE < NUMCORES4GC) {
        int t_size = ((BAMBOO_RMSP_SIZE)-sizeof(mgcsharedhashtbl_t)*2
                -128*sizeof(size_t))/sizeof(mgcsharedhashlistnode_t)-2;
@@ -1441,14 +1438,14 @@ INLINE void processmsg_gcmarkedobj_I() {
   int data1 = msgdata[msgdataindex];
   MSG_INDEXINC_I();
   // received a markedObj msg
-  if(((int *)data1)[6] == INIT) {
+  if(((int *)data1)[BAMBOOMARKBIT] == INIT) {
     // this is the first time that this object is discovered,
     // set the flag as DISCOVERED
-    ((int *)data1)[6] = DISCOVERED;
+    ((int *)data1)[BAMBOOMARKBIT] = DISCOVERED;
     gc_enqueue_I(data1);
   } 
   // set the remote flag
-  ((int *)data1)[6] |= REMOTEM;
+  ((int *)data1)[BAMBOOMARKBIT] |= REMOTEM;
   gcself_numreceiveobjs++;
   gcbusystatus = true;
 }