changes. add MLP condition in the place of memory allocation.
authoryeom <yeom>
Fri, 22 Jan 2010 17:57:15 +0000 (17:57 +0000)
committeryeom <yeom>
Fri, 22 Jan 2010 17:57:15 +0000 (17:57 +0000)
Robust/src/Benchmarks/mlp/raytracer/RayTracer.java
Robust/src/Runtime/garbage.c
Robust/src/Runtime/garbage.h
Robust/src/Runtime/thread.c
Robust/src/Runtime/workschedule.c
Robust/src/Runtime/workschedule.h
Robust/src/buildscript

index 33898096da65473c184b6a52571ecd65165b8578..939c93ed68d585d992f2fa6997750b6c2a3e3958 100644 (file)
@@ -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{
index 2c404c743693a8c4fc7328879bb10ffca631b8c3..5c48e875ba3c6bc7c11f125e67e29bb52566ba67 100644 (file)
@@ -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;
index 0a9237476196332ca7980b4e1bf81f46498a615d..4be11adf9f41ffad0a28423821fdd968393f756e 100644 (file)
@@ -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);
index 44950b4a7a73817fe6821c83a88085af769c6c6e..9f84207154f95c9bf02745ad08900c5c9aa8fcb0 100644 (file)
@@ -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
index b1e29c02bd077c88df5bd695a455222d0339ecce..a83435c32f528d307344b630e78df4b166fd29c8 100644 (file)
@@ -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;
 
index 78a976ac59b2993ce7dd6145e0494d00b965ab61..41e26571a824d3caad15d56e36c438734ed8a1f2 100644 (file)
@@ -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__ */
index 0e2d96d08a0e112306cfe1551d3eb14ef9e96324..9783c21d35ad5f46babc952c56eecc1f79a74dcd 100755 (executable)
@@ -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