From: jzhou Date: Mon, 19 Jul 2010 00:53:32 +0000 (+0000) Subject: Configure the workloads of the benchmarks and the size of the shared heap to increase... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=01c3e34a58d52408be530d3c4ae5df2f0ab9bb76;p=IRC.git Configure the workloads of the benchmarks and the size of the shared heap to increase the live obj ratio --- diff --git a/Robust/src/Benchmarks/Scheduling/GC/Fibheaps/TestRunner.java b/Robust/src/Benchmarks/Scheduling/GC/Fibheaps/TestRunner.java index eec6f631..bd096662 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/Fibheaps/TestRunner.java +++ b/Robust/src/Benchmarks/Scheduling/GC/Fibheaps/TestRunner.java @@ -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(); diff --git a/Robust/src/Benchmarks/Scheduling/GC/GCBench/GCBench.java b/Robust/src/Benchmarks/Scheduling/GC/GCBench/GCBench.java index 2d8aa5be..52376d3c 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/GCBench/GCBench.java +++ b/Robust/src/Benchmarks/Scheduling/GC/GCBench/GCBench.java @@ -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; } diff --git a/Robust/src/Benchmarks/Scheduling/GC/MTree/macrotest_tree.java b/Robust/src/Benchmarks/Scheduling/GC/MTree/macrotest_tree.java index 4a5bec80..aeee2353 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/MTree/macrotest_tree.java +++ b/Robust/src/Benchmarks/Scheduling/GC/MTree/macrotest_tree.java @@ -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}; diff --git a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracer.java b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracer.java index 04d49cf1..c457ec74 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracer.java +++ b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracer.java @@ -99,7 +99,7 @@ public class RayTracer { * @return The scene just created */ - Scene createScene() { + public Scene createScene() { int x = 0; int y = 0; diff --git a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracerBench.java b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracerBench.java index a19f8892..82b5ee74 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracerBench.java +++ b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/RayTracerBench.java @@ -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}); diff --git a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/TestRunner.java b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/TestRunner.java index 0bfa6240..fd54ffd0 100644 --- a/Robust/src/Benchmarks/Scheduling/GC/RayTracer/TestRunner.java +++ b/Robust/src/Benchmarks/Scheduling/GC/RayTracer/TestRunner.java @@ -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; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index 1e4d3ed6..d81a1ee3 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -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, diff --git a/Robust/src/Runtime/multicoregarbage.c b/Robust/src/Runtime/multicoregarbage.c index eb249994..59525ed0 100644 --- a/Robust/src/Runtime/multicoregarbage.c +++ b/Robust/src/Runtime/multicoregarbage.c @@ -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) { diff --git a/Robust/src/Runtime/multicoregarbage.h b/Robust/src/Runtime/multicoregarbage.h index 32889e60..5e5849f8 100644 --- a/Robust/src/Runtime/multicoregarbage.h +++ b/Robust/src/Runtime/multicoregarbage.h @@ -27,13 +27,17 @@ #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; diff --git a/Robust/src/Runtime/multicoreruntime.h b/Robust/src/Runtime/multicoreruntime.h index f78f487c..304f2ced 100644 --- a/Robust/src/Runtime/multicoreruntime.h +++ b/Robust/src/Runtime/multicoreruntime.h @@ -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 diff --git a/Robust/src/Runtime/multicoretask.c b/Robust/src/Runtime/multicoretask.c index 979a044a..84e54abf 100644 --- a/Robust/src/Runtime/multicoretask.c +++ b/Robust/src/Runtime/multicoretask.c @@ -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: diff --git a/Robust/src/buildscript b/Robust/src/buildscript index 76d63517..9424807f 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -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