From: yeom Date: Fri, 22 Jan 2010 17:57:15 +0000 (+0000) Subject: changes. add MLP condition in the place of memory allocation. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b48b7b11baaf85acd32ee72e3cfb58079b3d1208;p=IRC.git changes. add MLP condition in the place of memory allocation. --- diff --git a/Robust/src/Benchmarks/mlp/raytracer/RayTracer.java b/Robust/src/Benchmarks/mlp/raytracer/RayTracer.java index 33898096..939c93ed 100644 --- a/Robust/src/Benchmarks/mlp/raytracer/RayTracer.java +++ b/Robust/src/Benchmarks/mlp/raytracer/RayTracer.java @@ -222,7 +222,6 @@ public class RayTracer { // For each line for (int y = interval.yfrom; y < interval.yto; y++) { -// for (int y = 0; y < 10; y++) { double ylen = (double) (2.0 * y) / (double) interval.width - 1.0; // System.out.println("Doing line " + y); // For each pixel of the line, launch parallel sese @@ -231,7 +230,6 @@ public class RayTracer { int line_checksum=0; Ray tRay = new Ray(); Ray r = new Ray(view.from, new Vec(0,0,0)); - Isect inter=new Isect(); for (int x = 0; x < interval.width; x++) { Vec col = new Vec(); @@ -243,7 +241,7 @@ public class RayTracer { r.D.add(viewVec); r.D.normalize(); - col = trace(0, 1.0, r,inter,new Ray(),new Vec()); + col = trace(0, 1.0, r,new Isect(),new Ray(),new Vec()); // computes the color of the ray @@ -257,9 +255,6 @@ public class RayTracer { if (blue > 255) blue = 255; -// checksum += red; -// checksum += green; -// checksum += blue; line_checksum += red; line_checksum += green; line_checksum += blue; @@ -271,7 +266,6 @@ public class RayTracer { // row[pixCounter_t] = alpha | (red << 16) | (green << 8) | (blue); tempArray[x]= alpha | (red << 16) | (green << 8) | (blue); } // end for (x) - } // end of sese line sese serial{ diff --git a/Robust/src/Runtime/garbage.c b/Robust/src/Runtime/garbage.c index 2c404c74..5c48e875 100644 --- a/Robust/src/Runtime/garbage.c +++ b/Robust/src/Runtime/garbage.c @@ -9,6 +9,9 @@ #if defined(THREADS) || defined(DSTM) || defined(STM) #include "thread.h" #endif +#ifdef MLP +#include "workschedule.h" +#endif #ifdef DMALLOC #include "dmalloc.h" @@ -52,7 +55,7 @@ extern struct RuntimeHash *fdtoobject; long garbagearray[MAXSTATS]; #endif -#if defined(THREADS) || defined(DSTM) || defined(STM) +#if defined(THREADS) || defined(DSTM) || defined(STM)||defined(MLP) int needtocollect=0; struct listitem * list=NULL; int listcount=0; @@ -299,14 +302,14 @@ void enqueuetag(struct ___TagDescriptor___ *ptr) { } #endif -#if defined(STM)||defined(THREADS) +#if defined(STM)||defined(THREADS)||defined(MLP) __thread char * memorybase=NULL; __thread char * memorytop=NULL; #endif void collect(struct garbagelist * stackptr) { -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) needtocollect=1; pthread_mutex_lock(&gclistlock); while(1) { @@ -356,12 +359,12 @@ void collect(struct garbagelist * stackptr) { #endif } #endif -#if defined(STM)||defined(THREADS) +#if defined(STM)||defined(THREADS)||defined(MLP) memorybase=NULL; #endif /* Check current stack */ -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) { struct listitem *listptr=list; while(1) { @@ -375,7 +378,7 @@ void collect(struct garbagelist * stackptr) { } stackptr=stackptr->next; } -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) /* Go to next thread */ #ifndef MAC //skip over us @@ -405,7 +408,7 @@ void collect(struct garbagelist * stackptr) { #endif } #endif -#if defined(STM)||defined(THREADS) +#if defined(STM)||defined(THREADS)||defined(MLP) *(listptr->base)=NULL; #endif stackptr=listptr->stackptr; @@ -572,7 +575,7 @@ void collect(struct garbagelist * stackptr) { fixtags(); #endif -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) needtocollect=0; pthread_mutex_unlock(&gclistlock); #endif @@ -646,7 +649,7 @@ void * tomalloc(int size) { return ptr; } -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) void checkcollect(void * ptr) { stopforgc((struct garbagelist *)ptr); restartaftergc(); @@ -676,7 +679,7 @@ void stopforgc(struct garbagelist * ptr) { #ifdef THREADS litem.locklist=pthread_getspecific(threadlocks); #endif -#if defined(STM)||defined(THREADS) +#if defined(STM)||defined(THREADS)||defined(MLP) litem.base=&memorybase; #endif #ifdef STM @@ -717,7 +720,7 @@ void restartaftergc() { } #endif -#if defined(STM)||defined(THREADS) +#if defined(STM)||defined(THREADS)||defined(MLP) #define MEMORYBLOCK 65536 void * helper(struct garbagelist *, int); void * mygcmalloc(struct garbagelist * stackptr, int size) { @@ -738,7 +741,7 @@ void * helper(struct garbagelist * stackptr, int size) { void * mygcmalloc(struct garbagelist * stackptr, int size) { #endif void *ptr; -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) while (pthread_mutex_trylock(&gclock)!=0) { stopforgc(stackptr); restartaftergc(); @@ -769,7 +772,7 @@ void * mygcmalloc(struct garbagelist * stackptr, int size) { to_heaptop=to_heapbase+INITIALHEAPSIZE; to_heapptr=to_heapbase; ptr=curr_heapbase; -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) pthread_mutex_unlock(&gclock); #endif return ptr; @@ -834,20 +837,20 @@ void * mygcmalloc(struct garbagelist * stackptr, int size) { /* Not enough room :(, redo gc */ if (curr_heapptr>curr_heapgcpoint) { -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) pthread_mutex_unlock(&gclock); #endif return mygcmalloc(stackptr, size); } bzero(tmp, curr_heaptop-tmp); -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) pthread_mutex_unlock(&gclock); #endif return tmp; } } else { -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) pthread_mutex_unlock(&gclock); #endif return ptr; diff --git a/Robust/src/Runtime/garbage.h b/Robust/src/Runtime/garbage.h index 0a923747..4be11adf 100644 --- a/Robust/src/Runtime/garbage.h +++ b/Robust/src/Runtime/garbage.h @@ -26,7 +26,7 @@ struct listitem { struct objlist * lockedlist; #endif #endif -#if defined(THREADS)||defined(STM) +#if defined(THREADS)||defined(STM)||defined(MLP) char **base; #endif }; @@ -35,7 +35,7 @@ struct listitem { void fixtags(); #endif -#if defined(THREADS)||defined(DSTM)||defined(STM) +#if defined(THREADS)||defined(DSTM)||defined(STM)||defined(MLP) extern int needtocollect; void checkcollect(void * ptr); void stopforgc(struct garbagelist * ptr); diff --git a/Robust/src/Runtime/thread.c b/Robust/src/Runtime/thread.c index 44950b4a..9f842071 100644 --- a/Robust/src/Runtime/thread.c +++ b/Robust/src/Runtime/thread.c @@ -46,7 +46,7 @@ pthread_mutex_t threadnotifylock; pthread_cond_t threadnotifycond; pthread_key_t oidval; -#if defined(THREADS) || defined(DSTM) || defined(STM) +#if defined(THREADS) || defined(DSTM) || defined(STM)||defined(MLP) #ifndef MAC extern __thread struct listitem litem; #else diff --git a/Robust/src/Runtime/workschedule.c b/Robust/src/Runtime/workschedule.c index b1e29c02..a83435c3 100644 --- a/Robust/src/Runtime/workschedule.c +++ b/Robust/src/Runtime/workschedule.c @@ -54,6 +54,10 @@ static void(*workFunc)(void*); static pthread_cond_t workAvailCond = PTHREAD_COND_INITIALIZER; +int threadcount; +pthread_mutex_t gclock; +pthread_mutex_t gclistlock; +pthread_cond_t gccond; /* // helper func @@ -239,6 +243,11 @@ void workScheduleInit( int numProcessors, void(*func)(void*) ) { int i, status; + + pthread_mutex_init(&gclock, NULL); + pthread_mutex_init(&gclistlock, NULL); + pthread_cond_init(&gccond, NULL); + numWorkers = numProcessors*5; workFunc = func; diff --git a/Robust/src/Runtime/workschedule.h b/Robust/src/Runtime/workschedule.h index 78a976ac..41e26571 100644 --- a/Robust/src/Runtime/workschedule.h +++ b/Robust/src/Runtime/workschedule.h @@ -23,5 +23,11 @@ void workScheduleSubmit( void* workUnit ); // should not expect to return from this void workScheduleBegin(); +extern int threadcount; +extern pthread_mutex_t gclock; +extern pthread_mutex_t gclistlock; +extern pthread_cond_t gccond; + + #endif /* __WORK_SCHEDULE__ */ diff --git a/Robust/src/buildscript b/Robust/src/buildscript index 0e2d96d0..9783c21d 100755 --- a/Robust/src/buildscript +++ b/Robust/src/buildscript @@ -378,7 +378,7 @@ JAVAOPTS="$JAVAOPTS -minimize" elif [[ $1 = '-mlp' ]] then MLP_ON=true -EXTRAOPTIONS="$EXTRAOPTIONS -DPRECISE_GC -lpthread" +EXTRAOPTIONS="$EXTRAOPTIONS -DPRECISE_GC -lpthread -DMLP" JAVAOPTS="$JAVAOPTS -mlp $2 $3" shift shift