make atomic work in normal java mode...it just uses coarse locks
authorbdemsky <bdemsky>
Wed, 13 May 2009 08:05:01 +0000 (08:05 +0000)
committerbdemsky <bdemsky>
Wed, 13 May 2009 08:05:01 +0000 (08:05 +0000)
Robust/src/Benchmarks/SingleTM/KMeans/Normal.java
Robust/src/Benchmarks/SingleTM/KMeans/makefile
Robust/src/Benchmarks/SingleTM/LeeRouting/makefile
Robust/src/IR/Flat/BuildCode.java
Robust/src/Runtime/thread.c
Robust/src/Runtime/thread.h

index c845fcfe1cd47af3f449538d971d97c789a54f27..93f3bf741b516c1be813febb0b36793dec91ae50 100644 (file)
@@ -114,6 +114,7 @@ public class Normal {
     //System.out.println("myId= " + myId + " start= " + start + " npoints= " + npoints);
     while (start < npoints) {
       stop = (((start + CHUNK) < npoints) ? (start + CHUNK) : npoints);
+
       for (int i = start; i < stop; i++) {
         index = Common.common_findNearestPoint(feature[i],
             nfeatures,
@@ -132,17 +133,17 @@ public class Normal {
         membership[i] = index;
 
         /* Update new cluster centers : sum of objects located within */
-        atomic {
+       atomic {
           new_centers_len[index] = new_centers_len[index] + 1;
           for (int j = 0; j < nfeatures; j++) {
             new_centers[index][j] = new_centers[index][j] + feature[i][j];
           }
-        }
+       }
       }
 
       /* Update task queue */
       if (start + CHUNK < npoints) {
-        atomic {
+       atomic {
           start = (int) args.global_i;
           args.global_i = start + CHUNK;
         }
index 5c244f06cac2aa6fcabefbb789e333d4a6f79b71..0c035dd0e56b8baf4eae3325a6b1298645aba803 100644 (file)
@@ -6,7 +6,7 @@ SRC=${MAINCLASS}.java \
     Common.java \
     GlobalArgs.java \
     ../../../ClassLibrary/JavaSTM/Barrier.java
-FLAGS=-mainclass ${MAINCLASS} -singleTM -optimize -debug -dcopts -transstats -joptimize
+FLAGS=-mainclass ${MAINCLASS} -singleTM -optimize -debug -dcopts -joptimize -fastmemcpy -garbagestats
 FLAGS2=-mainclass ${MAINCLASS} -optimize -debug -joptimize -thread
 
 
index 62fd7507f2e9987796c3cba6c12a1db973d967c1..4807004ebb5bb629c4c68b8027d2b4fcb81b6048 100644 (file)
@@ -5,7 +5,7 @@ SRC=${MAINCLASS}.java \
        GridCell.java \
        LeeThread.java \
        WorkQueue.java 
-FLAGS=-mainclass ${MAINCLASS} -joptimize -debug -singleTM -optimize -dcopts -transstats -abcclose -stmdebug -stmstats
+FLAGS=-mainclass ${MAINCLASS} -joptimize -debug -singleTM -optimize -dcopts -transstats -abcclose -stmstats
 default:
        ../../../buildscript ${FLAGS} -o ${MAINCLASS} ${SRC}
 
index 3d8baea07534e9f0ba9fb35b36f54c8ed0f2384f..7d6f8b85410a2bd649461730049e3a3cd572c27b 100644 (file)
@@ -1970,7 +1970,12 @@ public class BuildCode {
 
   public void generateFlatAtomicEnterNode(FlatMethod fm,  LocalityBinding lb, FlatAtomicEnterNode faen, PrintWriter output) {
     /* Check to see if we need to generate code for this atomic */
-    if (locality==null||locality.getAtomic(lb).get(faen.getPrev(0)).intValue()>0)
+    if (locality==null) {
+      output.println("pthread_mutex_lock(&atomiclock);");
+      return;
+    }
+
+    if (locality.getAtomic(lb).get(faen.getPrev(0)).intValue()>0)
       return;
     /* Backup the temps. */
     for(Iterator<TempDescriptor> tmpit=locality.getTemps(lb).get(faen).iterator(); tmpit.hasNext();) {
@@ -2013,7 +2018,11 @@ public class BuildCode {
 
   public void generateFlatAtomicExitNode(FlatMethod fm,  LocalityBinding lb, FlatAtomicExitNode faen, PrintWriter output) {
     /* Check to see if we need to generate code for this atomic */
-    if (locality==null||locality.getAtomic(lb).get(faen).intValue()>0)
+    if (locality==null) {
+      output.println("pthread_mutex_unlock(&atomiclock);");
+      return;
+    }
+    if (locality.getAtomic(lb).get(faen).intValue()>0)
       return;
     //store the revert list before we lose the transaction object
     String revertptr=null;
index ec8ee1d896399eef3d55f8499a0fb1adf198800c..ebb24df23881f2e05dec545496a78bac2125f4a8 100644 (file)
@@ -26,6 +26,8 @@ pthread_cond_t gccond;
 pthread_mutex_t objlock;
 pthread_cond_t objcond;
 
+pthread_mutex_t atomiclock;
+
 pthread_mutex_t joinlock;
 pthread_cond_t joincond;
 pthread_key_t threadlocks;
@@ -65,7 +67,7 @@ void threadexit() {
 #endif
   pthread_mutex_lock(&gclistlock);
 #ifdef THREADS
-  pthread_setspecific(threadlocks, litem->locklist);
+  pthread_setspecific(threadlocks, litem.locklist);
 #endif
 #ifndef MAC
   if (litem.prev==NULL) {
@@ -123,6 +125,9 @@ void threadhandler(int sig, siginfo_t *info, void *uap) {
 void initializethreads() {
   struct sigaction sig;
   threadcount=1;
+#ifdef THREADS
+  pthread_mutex_init(&atomiclock, NULL);
+#endif
   pthread_mutex_init(&gclock, NULL);
   pthread_mutex_init(&gclistlock, NULL);
   pthread_cond_init(&gccond, NULL);
@@ -232,7 +237,7 @@ void initthread(struct ___Thread___ * ___this___) {
 
   pthread_mutex_lock(&gclistlock);
 #ifdef THREADS
-  pthread_setspecific(threadlocks, litem->locklist);
+  pthread_setspecific(threadlocks, litem.locklist);
 #endif
   if (litem.prev==NULL) {
     list=litem.next;
@@ -402,7 +407,7 @@ void initDSMthread(int *ptr) {
   pthread_mutex_lock(&gclistlock);
 
 #ifdef THREADS
-  pthread_setspecific(threadlocks, litem->locklist);
+  pthread_setspecific(threadlocks, litem.locklist);
 #endif
   if (litem.prev==NULL) {
     list=litem.next;
index 26dd0e1c58866fdd5dd0785d37b17a37870c3f00..d2f80dfa5bd38c36f090ac702775ac19513b73ab 100644 (file)
@@ -10,6 +10,8 @@ extern pthread_cond_t gccond;
 extern pthread_mutex_t objlock;
 extern pthread_cond_t objcond;
 extern pthread_key_t threadlocks;
+extern pthread_mutex_t atomiclock;
+
 #if defined(THREADS)||defined(STM)
 void initthread(struct ___Thread___ * ___this___);
 #endif