Configure the workloads of the benchmarks and the size of the shared heap to increase...
authorjzhou <jzhou>
Mon, 19 Jul 2010 00:53:32 +0000 (00:53 +0000)
committerjzhou <jzhou>
Mon, 19 Jul 2010 00:53:32 +0000 (00:53 +0000)
12 files changed:
Robust/src/Benchmarks/Scheduling/GC/Fibheaps/TestRunner.java
Robust/src/Benchmarks/Scheduling/GC/GCBench/GCBench.java
Robust/src/Benchmarks/Scheduling/GC/MTree/macrotest_tree.java
Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracer.java
Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracerBench.java
Robust/src/Benchmarks/Scheduling/GC/RayTracer/TestRunner.java
Robust/src/Main/Main.java
Robust/src/Runtime/multicoregarbage.c
Robust/src/Runtime/multicoregarbage.h
Robust/src/Runtime/multicoreruntime.h
Robust/src/Runtime/multicoretask.c
Robust/src/buildscript

index eec6f631f7f6df468cb650217858eb354f6f7bb2..bd096662ec0105d26ac6212d051003e3496d6b0f 100644 (file)
@@ -7,7 +7,7 @@ public class TestRunner {
   
   public void run() {
     // generate test data
-    int iter = 1000; //200;
+    int iter = 1200; //200;
     int seed = 1967;
     //Vector testdata = new Vector(iter);
     FibHeap fh = new FibHeap();
index 2d8aa5be0431c08e5bd93e1f1108daa859c3cdb1..52376d3c0178b713b7c301a3126f6b7818861149 100644 (file)
@@ -83,9 +83,9 @@ public class TestRunner {
   public static final int kMaxTreeDepth;// = 16;
   
   public TestRunner() {
-    kStretchTreeDepth    = 13;// 1Mb 18;  // about 16Mb
-    kLongLivedTreeDepth  = 11; // 1/4Mb 16;  // about 4Mb
-    kArraySize  = 125000/8; // 1/4Mb 500000;  // about 4Mb
+    kStretchTreeDepth    = 15;// 1Mb 18;  // about 16Mb
+    kLongLivedTreeDepth  = 14; // 1/4Mb 16;  // about 4Mb
+    kArraySize  = 125000; // 1/4Mb 500000;  // about 4Mb
     kMinTreeDepth = 4;
     kMaxTreeDepth = 16;
   }
index 4a5bec80f74c78b2fd840aad4e88d167122c0e4d..aeee23539c7f7b08d93fd0f2d1efcda6ad203df3 100644 (file)
@@ -2,7 +2,7 @@ task t1(StartupObject s{initialstate}) {
        //System.printString("task t1\n");
        
        int threadnum = 62;
-    int size = 30000;
+    int size = 20000;
     int nodenum = size*10;
        for(int i = 0; i < threadnum; ++i) {
                TestRunner tr = new TestRunner(i, size, nodenum){run};
index 04d49cf15c61099736db46a9ae1da82983531c58..c457ec74c7c934f081499e3900284c5e163f46c5 100644 (file)
@@ -99,7 +99,7 @@ public class RayTracer {
    * @return The scene just created
    */
 
-  Scene createScene() {
+  public Scene createScene() {
     int x = 0;
     int y = 0;
 
index a19f88920107d85c240c44b38778812620efce08..82b5ee7482d32c1fce62d708b605367b6aeaa382 100644 (file)
@@ -2,10 +2,12 @@ task t1(StartupObject s{initialstate}) {
   //System.printString("task t1\n");
 
   int threadnum = 62;
-  int size = threadnum * 25;
+  int size = threadnum * 30;
   Composer comp = new Composer(threadnum, size){compose};
+  RayTracer rt = new RayTracer();
+  Scene scene = rt.createScene();
   for(int i = 0; i < threadnum; ++i) {
-    TestRunner tr = new TestRunner(i, threadnum, size){run};
+    TestRunner tr = new TestRunner(i, threadnum, size, scene){run};
   }
 
   taskexit(s{!initialstate});
index 0bfa6240639f6cd1295ee55649410c0669882dd7..fd54ffd0deeff10f2915ad1fa957ce724b8396fc 100644 (file)
@@ -15,26 +15,35 @@ public class TestRunner extends RayTracer {
 
   public TestRunner(int id, 
                     int numCore,
-                    int size) {
+                    int size,
+                    Scene scene) {
     super();
     this.id = id;
     this.numCore = numCore;
     this.size = size;
 
+    // create the objects to be rendered
+    this.scene = scene; //createScene();
+    
     // set image size
     width=size;
     height=size;
-    this.image=new int[size][];
+    // get lights, objects etc. from scene.
+    setScene(this.scene);
 
-    // create the objects to be rendered
-    scene = createScene();
+    numobjects = this.scene.getObjects();
+    /*this.image=new int[size][];
 
     // get lights, objects etc. from scene.
     setScene(scene);
 
-    numobjects = scene.getObjects();
+    numobjects = scene.getObjects();*/
   }
 
+  public void init() {
+    this.image=new int[this.size][];
+  }
+  
   public void JGFvalidate() {
     // long refval[] = {2676692,29827635};
 //  long refval[] = new long[2];
@@ -58,6 +67,7 @@ public class TestRunner extends RayTracer {
   }
 
   public void run() {
+    this.init();
 
     int heightPerCore=height/numCore;
     int startidx=heightPerCore * this.id;
index 1e4d3ed6bbf73863ca2439f54382c6356d05456d..d81a1ee3fa8cf157f3d221c8ac7a18deee2155f3 100644 (file)
@@ -556,7 +556,7 @@ public class Main {
        CallGraph callGraph = new CallGraph(state);
        Liveness liveness = new Liveness();
         ArrayReferencees ar = new ArrayReferencees(state);
-       OwnershipAnalysis oa = new OwnershipAnalysis(state,
+       OwnershipAnalysis oa = null; /*new OwnershipAnalysis(state,
                                                     tu,
                                                     callGraph,
                                                     liveness,
@@ -564,7 +564,7 @@ public class Main {
                                                     state.OWNERSHIPALLOCDEPTH,
                                                     state.OWNERSHIPWRITEDOTS,
                                                     state.OWNERSHIPWRITEALL,
-                                                    state.OWNERSHIPALIASFILE);
+                                                    state.OWNERSHIPALIASFILE);*/
        
        // synthesis a layout according to target multicore processor
        MCImplSynthesis mcImplSynthesis = new MCImplSynthesis(state,
index eb24999483513fefa62199df0c421264ef2bb283..59525ed07f5ef8dae5c38e6ccffd74f73b7e7315 100644 (file)
@@ -686,13 +686,20 @@ inline void initGC() {
        *((int *)bamboo_cur_msp) = 0;
   }
 #ifdef GC_PROFILE
-       // TODO
-       /*num_mapinforequest = 0;
-       num_mapinforequest_i = 0;
-       flushstalltime = 0;
-       flushstalltime_i = 0;
-       num_markrequest = 0;
-       marktime = 0;*/
+  // TODO
+  /*num_mapinforequest = 0;
+  num_mapinforequest_i = 0;
+  flushstalltime = 0;
+  flushstalltime_i = 0;
+  num_markrequest = 0;
+  marktime = 0;*/
+  gc_num_livespace = 0;
+  gc_num_freespace = 0;
+  gc_num_lobj = 0;
+  gc_num_lobjspace = 0;
+#endif
+#ifdef GC_PROFILE_S
+  gc_num_profiles = NUMCORESACTIVE - 1;
 #endif
 } // void initGC()
 
@@ -729,7 +736,7 @@ inline int loadbalance(int * heaptop) {
 
 inline bool cacheLObjs() {
   // check the total mem size need for large objs
-  int sumsize = 0;
+  unsigned long long sumsize = 0;
   int size = 0;
 #ifdef DEBUG
   BAMBOO_DEBUGPRINT(0xe801);
@@ -746,6 +753,9 @@ inline bool cacheLObjs() {
     tmp_host = gclobjtail2->hosts[gclobjtailindex2-1];
     tmp_len = gclobjtail2->lengths[gclobjtailindex2 - 1];
     sumsize += tmp_len;
+#ifdef GC_PROFILE
+       gc_num_lobj++;
+#endif
 #ifdef DEBUG
     BAMBOO_DEBUGPRINT_REG(gclobjtail2->lobjs[gclobjtailindex2-1]);
     BAMBOO_DEBUGPRINT_REG(tmp_len);
@@ -787,6 +797,9 @@ inline bool cacheLObjs() {
     }
   }  // while(gc_lobjmoreItems2())
 
+#ifdef GC_PROFILE
+  gc_num_lobjspace = sumsize;
+#endif
   // check if there are enough space to cache these large objs
   INTPTR dst = gcbaseva + (BAMBOO_SHARED_MEM_SIZE) -sumsize;
   if(gcheaptop > dst) {
@@ -1170,6 +1183,15 @@ inline void moveLObjs() {
       break;
     }
   } while(true);
+
+#ifdef GC_PROFILE
+  // check how many live space there are
+  gc_num_livespace = 0;
+  for(int tmpi = 0; tmpi < gcnumblock; tmpi++) {
+       gc_num_livespace += bamboo_smemtbl[tmpi];
+  }
+  gc_num_freespace = (BAMBOO_SHARED_MEM_SIZE) - gc_num_livespace;
+#endif
 #ifdef DEBUG
   BAMBOO_DEBUGPRINT(0xea08);
   BAMBOO_DEBUGPRINT_REG(gcheaptop);
@@ -2805,6 +2827,18 @@ inline void gc_collect(struct garbagelist * stackptr) {
   printf("(%x,%x) Start flush phase\n", udn_tile_coord_x(), 
             udn_tile_coord_y());
 #endif
+#ifdef GC_PROFILE_S
+  /*BAMBOO_DEBUGPRINT(0xaaaa);
+  BAMBOO_DEBUGPRINT_REG(gc_num_obj);
+  BAMBOO_DEBUGPRINT_REG(gc_num_liveobj);
+  BAMBOO_DEBUGPRINT_REG(gc_num_forwardobj);
+  BAMBOO_DEBUGPRINT(0xaaab);*/
+  // send the num of obj/liveobj/forwardobj to the startupcore
+  if(STARTUPCORE != BAMBOO_NUM_OF_CORE) {
+       send_msg_4(STARTUPCORE, GCPROFILES, gc_num_obj, 
+               gc_num_liveobj, gc_num_forwardobj, false);
+  }
+#endif // GC_PROFLIE_S
   flush(stackptr);
 #ifdef RAWPATH // TODO GC_DEBUG
   printf("(%x,%x) Finish flush phase\n", udn_tile_coord_x(),
@@ -2819,13 +2853,6 @@ inline void gc_collect(struct garbagelist * stackptr) {
 #ifdef RAWPATH // TODO GC_DEBUG
   printf("(%x,%x) Finish gc!\n", udn_tile_coord_x(), udn_tile_coord_y());
 #endif
-#ifdef GC_PROFILE_S
-  BAMBOO_DEBUGPRINT(0xaaaa);
-  BAMBOO_DEBUGPRINT_REG(gc_num_obj);
-  BAMBOO_DEBUGPRINT_REG(gc_num_liveobj);
-  BAMBOO_DEBUGPRINT_REG(gc_num_forwardobj);
-  BAMBOO_DEBUGPRINT(0xaaab);
-#endif // GC_PROFLIE_S
 } // void gc_collect(struct garbagelist * stackptr)
 
 inline void gc_nocollect(struct garbagelist * stackptr) {
@@ -2864,6 +2891,17 @@ inline void gc_nocollect(struct garbagelist * stackptr) {
   printf("(%x,%x) Start flush phase\n", udn_tile_coord_x(), 
             udn_tile_coord_y());
 #endif
+#ifdef GC_PROFILE_S
+  /*BAMBOO_DEBUGPRINT(0xaaaa);
+  BAMBOO_DEBUGPRINT_REG(gc_num_obj);
+  BAMBOO_DEBUGPRINT_REG(gc_num_liveobj);
+  BAMBOO_DEBUGPRINT_REG(gc_num_forwardobj);
+  BAMBOO_DEBUGPRINT(0xaaab);*/
+  if(STARTUPCORE != BAMBOO_NUM_OF_CORE) {
+       send_msg_4(STARTUPCORE, GCPROFILES, gc_num_obj, 
+               gc_num_liveobj, gc_num_forwardobj, false);
+  }
+#endif // GC_PROFLIE_S
   flush(stackptr);
 #ifdef RAWPATH // TODO GC_DEBUG
   printf("(%x,%x) Finish flush phase\n", udn_tile_coord_x(), 
@@ -2878,13 +2916,6 @@ inline void gc_nocollect(struct garbagelist * stackptr) {
 #ifdef RAWPATH // TODO GC_DEBUG
   printf("(%x,%x) Finish gc!\n", udn_tile_coord_x(), udn_tile_coord_y());
 #endif
-#ifdef GC_PROFILE_S
-  BAMBOO_DEBUGPRINT(0xaaaa);
-  BAMBOO_DEBUGPRINT_REG(gc_num_obj);
-  BAMBOO_DEBUGPRINT_REG(gc_num_liveobj);
-  BAMBOO_DEBUGPRINT_REG(gc_num_forwardobj);
-  BAMBOO_DEBUGPRINT(0xaaab);
-#endif // GC_PROFLIE_S
 } // void gc_collect(struct garbagelist * stackptr)
 
 inline void gc(struct garbagelist * stackptr) {
@@ -3264,7 +3295,14 @@ inline void gc(struct garbagelist * stackptr) {
   BAMBOO_DEBUGPRINT_REG(gc_num_obj);
   BAMBOO_DEBUGPRINT_REG(gc_num_liveobj);
   BAMBOO_DEBUGPRINT_REG(gc_num_forwardobj);
+  BAMBOO_DEBUGPRINT_REG(gc_num_profiles);
   BAMBOO_DEBUGPRINT(0xaaab);
+  if(STARTUPCORE == BAMBOO_NUM_OF_CORE) {
+       BAMBOO_DEBUGPRINT(0xaaac);
+       BAMBOO_DEBUGPRINT_REG(gc_num_livespace);
+       BAMBOO_DEBUGPRINT_REG(gc_num_freespace);
+       BAMBOO_DEBUGPRINT(0xaaad);
+  }
 #endif // GC_PROFLIE_S
   } else if(BAMBOO_NUM_OF_CORE < NUMCORES4GC) {
     gcprocessing = true;
@@ -3311,6 +3349,10 @@ inline void gc_profileEnd(void) {
   if(!gc_infoOverflow) {
     GCInfo* gcInfo = gc_infoArray[gc_infoIndex];
     gcInfo->time[gcInfo->index++] = BAMBOO_GET_EXE_TIME();
+       gcInfo->time[gcInfo->index++] = gc_num_livespace;
+       gcInfo->time[gcInfo->index++] = gc_num_freespace;
+       gcInfo->time[gcInfo->index++] = gc_num_lobj;
+       gcInfo->time[gcInfo->index++] = gc_num_lobjspace;
     gc_infoIndex++;
     if(gc_infoIndex == GCINFOLENGTH) {
       gc_infoOverflow = true;
@@ -3355,7 +3397,7 @@ void gc_outputProfileData() {
     GCInfo * gcInfo = gc_infoArray[i];
     unsigned long long tmp = 0;
     BAMBOO_DEBUGPRINT(0xddda);
-    for(j = 0; j < gcInfo->index; j++) {
+    for(j = 0; j < gcInfo->index - 4; j++) {
       BAMBOO_DEBUGPRINT(gcInfo->time[j]);
       BAMBOO_DEBUGPRINT(gcInfo->time[j]-tmp);
       BAMBOO_DEBUGPRINT(0xdddb);
@@ -3363,10 +3405,15 @@ void gc_outputProfileData() {
     }
     tmp = (tmp-gcInfo->time[0]);
     BAMBOO_DEBUGPRINT_REG(tmp);
-    BAMBOO_DEBUGPRINT(0xdddc);
+       BAMBOO_DEBUGPRINT(0xdddc);
+       BAMBOO_DEBUGPRINT(gcInfo->time[gcInfo->index - 4]);
+       BAMBOO_DEBUGPRINT(gcInfo->time[gcInfo->index - 3]);
+       BAMBOO_DEBUGPRINT(gcInfo->time[gcInfo->index - 2]);
+       BAMBOO_DEBUGPRINT(gcInfo->time[gcInfo->index - 1]);
+    BAMBOO_DEBUGPRINT(0xddde);
     totalgc += tmp;
   }
-  BAMBOO_DEBUGPRINT(0xdddd);
+  BAMBOO_DEBUGPRINT(0xdddf);
   BAMBOO_DEBUGPRINT_REG(totalgc);
 
   if(gc_infoOverflow) {
index 32889e6012f14dec0fba69beecc2eec1c13cc76c..5e5849f8d88df5166480f266af791d1ce777cd83 100644 (file)
 #define GCINFOLENGTH 100
 
 typedef struct gc_info {
-  unsigned long long time[8];
+  unsigned long long time[12];
   int index;
 } GCInfo;
 
 GCInfo * gc_infoArray[GCINFOLENGTH];
 int gc_infoIndex;
 bool gc_infoOverflow;
+unsigned long long gc_num_livespace;
+unsigned long long gc_num_freespace;
+unsigned long long gc_num_lobjspace;
+unsigned int gc_num_lobj;
 
 // TODO
 /*unsigned long long flushstalltime;
@@ -43,6 +47,7 @@ int num_mapinforequest_i;*/
 unsigned int gc_num_liveobj;
 unsigned int gc_num_obj;
 unsigned int gc_num_forwardobj;
+int gc_num_profiles;
 #endif // GC_PROFILE_S
 
 #endif // GC_PROFILE
@@ -125,7 +130,11 @@ void * gcmappingtbl[NUMCORESACTIVE][NUM_MAPPING];*/
 //                                  + NUMCORES4GC bamboo_rmsp
 // These three types of table are always reside at the bottom of the shared 
 // memory and will never be moved or garbage collected
+#ifdef GC_SMALLPAGESIZE
+#define BAMBOO_RMSP_SIZE (1024 * 1024)
+#else
 #define BAMBOO_RMSP_SIZE (BAMBOO_SMEM_SIZE) // (45 * 16 * 1024)
+#endif
 mspace bamboo_rmsp;
 // shared pointer mapping tbl
 //volatile struct GCSharedHash * gcsharedptbl;
index f78f487cfd206cc2e346355bb7025a4157daca7a..304f2ced4f15c3d6abea8c508483f85cf2fed4e0 100644 (file)
@@ -213,6 +213,9 @@ typedef enum {
   GCLOBJREQUEST,         // 0xF4
   GCLOBJINFO,            // 0xF5
   GCLOBJMAPPING,         // 0xF6
+#ifdef GC_PROFILE_S
+  GCPROFILES,            // 0xF7
+#endif
 #endif
   MSGEND
 } MSGTYPE;
@@ -282,9 +285,21 @@ struct Queue * totransobjqueue; // queue to hold objs to be transferred
 #define BAMBOO_SMEM_SIZE (64 * 64) // (BAMBOO_PAGE_SIZE)
 #define BAMBOO_SHARED_MEM_SIZE ((BAMBOO_PAGE_SIZE) *(BAMBOO_NUM_PAGES))
 #else
+#ifdef GC_LARGESHAREDHEAP
+#define BAMBOO_NUM_PAGES (62*(2+7))
+#else
 #define BAMBOO_NUM_PAGES (62*(2+3)) //(15 * 1024) //(64 * 4 * 0.75) //(1024 * 1024 * 3.5)  3G
+#endif
+#ifdef GC_LARGEPAGESIZE
 #define BAMBOO_PAGE_SIZE (4 * 1024 * 1024)  // (4096)
 #define BAMBOO_SMEM_SIZE (4 * 1024 * 1024)
+#elif defined GC_SMALLPAGESIZE
+#define BAMBOO_PAGE_SIZE (256 * 1024)  // (4096)
+#define BAMBOO_SMEM_SIZE (256 * 1024)
+#else
+#define BAMBOO_PAGE_SIZE (1024 * 1024)  // (4096)
+#define BAMBOO_SMEM_SIZE (1024 * 1024)
+#endif // GC_LARGEPAGESIZE
 #define BAMBOO_SHARED_MEM_SIZE ((BAMBOO_PAGE_SIZE) * (BAMBOO_NUM_PAGES)) //(1024 * 1024 * 240)
 //((unsigned long long int)(3.0 * 1024 * 1024 * 1024)) // 3G 
 #endif // GC_DEBUG
index 979a044a56a6ccbda0a0e5c52ca2d01203819304..84e54abf7ad4cf2e9596c0b4f2da92fbd937c621 100644 (file)
@@ -216,6 +216,8 @@ void initruntimedata() {
 #ifdef GC_PROFILE
     gc_infoIndex = 0;
     gc_infoOverflow = false;
+       gc_num_livespace = 0;
+       gc_num_freespace = 0;
 #endif
 #endif
     numconfirm = 0;
@@ -305,6 +307,7 @@ void initruntimedata() {
   gc_num_obj = 0;
   gc_num_liveobj = 0;
   gc_num_forwardobj = 0;
+  gc_num_profiles = NUMCORESACTIVE - 1;
 #endif
 #else
   // create the lock table, lockresult table and obj queue
@@ -1937,6 +1940,9 @@ INLINE int checkMsgLength_I(int size) {
 #ifdef MULTICORE_GC
   case GCFINISHMARK:
   case GCMOVESTART:
+#ifdef GC_PROFILE_S
+  case GCPROFILES:
+#endif
 #endif
     {
       msglength = 4;
@@ -2885,6 +2891,21 @@ INLINE void processmsg_gclobjmapping_I() {
   //MGCHashadd_I(gcpointertbl, data1, data2);
   mgcsharedhashInsert_I(gcsharedptbl, data1, data2);
 }
+
+#ifdef GC_PROFILE_S
+INLINE void processmsg_gcprofiles_I() {
+  int data1 = msgdata[msgdataindex];
+  MSG_INDEXINC_I();
+  int data2 = msgdata[msgdataindex];
+  MSG_INDEXINC_I();
+  int data3 = msgdata[msgdataindex];
+  MSG_INDEXINC_I();
+  gc_num_obj += data1;
+  gc_num_liveobj += data2;
+  gc_num_forwardobj += data3;
+  gc_num_profiles--;
+}
+#endif
 #endif // #ifdef MULTICORE_GC
 
 // receive object transferred from other cores
@@ -3160,6 +3181,13 @@ processmsg:
       break;
     }                     // case GCLOBJMAPPING
 
+#ifdef GC_PROFILE_S
+       case GCPROFILES: {
+      // received a gcprofiles msg
+      processmsg_gcprofiles_I();
+      break;
+    }
+#endif
 #endif // #ifdef MULTICORE_GC
 
     default:
index 76d63517315c578ad46377c974973ae2b9ea74c3..9424807f176cb29473e3108585e7eb5771447cca 100755 (executable)
@@ -48,6 +48,9 @@ echo "-gccache_local set the gc shared memory cache strategy as local (should be
 echo "-gccache_ran set the gc shared memory cache strategy as random (should be used together with -multicoregc)"
 echo "-gccontroller_near set the gc shared memory to use the nearest controller for each core (should be used together with -multicoregc)"
 echo "-gccontroller_remote set the gc shared memory to use a remote controller for each core (should be used together with -multicoregc)"
+echo "-gcsmallpagesize set the gc shared memory to use small page size (should be used together with -multicoregc)"
+echo "-gclargepagesize set the gc shared memory to use large page size (should be used together with -multicoregc)"
+echo "-gclargesharedheap set the gc shared memory as large (should be used together with -multicoregc)"
 echo -gcprofile build with gcprofile options
 echo -gcprofile_s build with gcprofile_s options
 echo -accurateprofile build with accurate profile information including pre/post task processing info
@@ -146,6 +149,9 @@ GCCACHELOCALFLAG=false;
 GCCACHERANFLAG=false;
 GCCONTROLLERNEARFLAG=false;
 GCCONTROLLERREMOTEFLAG=false;
+GCSMALLPAGESIZEFLAG=false;
+GCLARGEPAGESIZEFLAG=false;
+GCLARGESHAREDHEAPFLAG=false;
 USEDMALLOC=false
 THREADFLAG=false
 FASTCHECK=false
@@ -406,6 +412,15 @@ GCCONTROLLERNEARFLAG=true
 elif [[ $1 = '-gccontroller_remote' ]]
 then
 GCCONTROLLERREMOTEFLAG=true
+elif [[ $1 = '-gcsmallpagesize' ]]
+then
+GCSMALLPAGESIZEFLAG=true
+elif [[ $1 = '-gclargepagesize' ]]
+then
+GCLARGEPAGESIZEFLAG=true
+elif [[ $1 = '-gclargesharedheap' ]]
+then
+GCLARGESHAREDHEAPFLAG=true
 elif [[ $1 = '-dmalloc' ]]
 then
 USEDMALLOC=true
@@ -836,6 +851,22 @@ then # CONTROLLER_REMOTE version
 TILERACFLAGS="${TILERACFLAGS} -DCONTROLLER_REMOTE"
 fi
 
+if $GCSMALLPAGESIZEFLAG
+then # GC_SMALLPAGESIZE version
+TILERACFLAGS="${TILERACFLAGS} -DGC_SMALLPAGESIZE"
+fi
+
+if $GCLARGEPAGESIZEFLAG
+then # GC_LARGEPAGESIZE version
+TILERACFLAGS="${TILERACFLAGS} -DGC_LARGEPAGESIZE"
+fi
+
+if $GCLARGESHAREDHEAPFLAG
+then # GC_LARGESHAREDHEAP version
+TILERACFLAGS="${TILERACFLAGS} -DGC_LARGESHAREDHEAP"
+fi
+
+
 cp $ROBUSTROOT/Tilera/Runtime/$TILERA_INDIR/$MAKEFILE ./Makefile
 if $TILERABMEFLAG
 then # TILERABMEFLAG