Add microbenchmarks with script for analyzing our Prefetch and other results
[IRC.git] / Robust / src / Benchmarks / Prefetch / MicroBenchmarks / MultiMCReadcommit.java
diff --git a/Robust/src/Benchmarks/Prefetch/MicroBenchmarks/MultiMCReadcommit.java b/Robust/src/Benchmarks/Prefetch/MicroBenchmarks/MultiMCReadcommit.java
new file mode 100644 (file)
index 0000000..5954126
--- /dev/null
@@ -0,0 +1,87 @@
+public class ReadArrayObj extends Thread {
+  int id, nthreads;
+  ReadArrayObj[] myra;
+  int val;
+
+  public ReadArrayObj() {
+  }
+
+  public ReadArrayObj(int id, int nthreads, ReadArrayObj[] ra) {
+    this.id = id;
+    this.nthreads = nthreads;
+    myra = ra;
+  }
+
+  public void run() {
+    int tmpid;
+    Barrier barr;
+    barr = new Barrier("128.195.175.84");
+    //Create array objects locally
+    atomic {
+      tmpid = id;
+      myra[tmpid] = global new ReadArrayObj();
+      myra[tmpid].val = tmpid*10+1;
+    }
+
+    Barrier.enterBarrier(barr);
+
+    /*
+    //All machines reading data from array
+    int val;
+    for(int i=0; i<10000; i++) {
+      atomic {
+        for(int j=0; j<nthreads; j++) {
+          val = myra[j].val;
+        }
+      }
+    }
+    */
+  }
+
+  public static void main(String[] args) {
+    int nthreads;
+    BarrierServer mybarr;
+    if(args.length>0) {
+      nthreads = Integer.parseInt(args[0]);
+    }
+
+    int[] mid = new int[5];
+    mid[0] = (128<<24)|(195<<16)|(175<<8)|84;//dw-10
+    mid[1] = (128<<24)|(195<<16)|(175<<8)|85;//dw-11
+    mid[2] = (128<<24)|(195<<16)|(175<<8)|86;//dw-12
+    mid[3] = (128<<24)|(195<<16)|(175<<8)|87;//dw-13
+    mid[4] = (128<<24)|(195<<16)|(175<<8)|88;//dw-14
+
+    ReadArrayObj[] a;
+    atomic {
+      a=global new ReadArrayObj[nthreads]; //create object a
+      mybarr = global new BarrierServer(nthreads);
+    }
+
+    mybarr.start(mid[0]);
+
+    ReadArrayObjWrap[] ra = new ReadArrayObjWrap[nthreads];
+
+    atomic {
+      for(int i=0;i<nthreads; i++) {
+        ra[i] = new ReadArrayObjWrap(global new ReadArrayObj(i, nthreads, a));
+      }
+    }
+
+    boolean waitfordone=true;
+    while(waitfordone) {
+      atomic {  //Master aborts are from here
+        if (mybarr.done)
+          waitfordone=false;
+      }
+    }
+
+    for(int i =0; i<nthreads; i++)
+      ra[i].ra.start(mid[i]);
+
+    for(int i =0; i<nthreads; i++)
+      ra[i].ra.join();
+
+       System.printString("Finished\n");
+  }
+}