Scripts and Benchmarks changed to function with 8 machines
[IRC.git] / Robust / src / Benchmarks / Prefetch / MicroBenchmarks / MultiMCWritecommit.java
1 public class WriteArrayObj extends Thread {
2   WriteArrayObj[] mywa;
3   int nthreads;
4   int val, lower, start;
5
6   public WriteArrayObj() {
7   }
8
9   public WriteArrayObj(int lower, WriteArrayObj[] wa, int nthreads, int start) {
10     this.lower = lower;
11     mywa = wa;
12     this.nthreads = nthreads;
13     this.start = start;
14   }
15
16   public void run() {
17     Barrier barr;
18     barr = new Barrier("128.195.175.84");
19     //Create array objects locally
20     atomic { //Remote machine aborts come from here
21       for(int i=lower; i<nthreads*nthreads; i=i+nthreads) {
22         mywa[i] = global new WriteArrayObj();
23         //System.printString("Creating " + i + " element\n");
24       }
25     }
26
27     Barrier.enterBarrier(barr);
28     //System.clearPrefetchCache(); //without invalidation it always reads an old array object therefore we need a clearCache
29     //Write into array elements
30     Integer val;
31      for(int j=0; j<10000; j++) {
32       atomic {
33         val = global new Integer(10);
34         for(int i=start;i<start+nthreads; i++) {
35         //System.printString("Reading element " + i + "\n");
36           mywa[i].val = val.intValue();
37         }
38       }
39     }
40   }
41
42   public static void main(String[] args) {
43     int nthreads;
44     BarrierServer mybarr;
45     if(args.length>0) {
46       nthreads = Integer.parseInt(args[0]);
47     }
48
49     int[] mid = new int[8];
50     mid[0] = (128<<24)|(195<<16)|(175<<8)|84;//dw-10
51     mid[1] = (128<<24)|(195<<16)|(175<<8)|85;//dw-11
52     mid[2] = (128<<24)|(195<<16)|(175<<8)|86;//dw-12
53     mid[3] = (128<<24)|(195<<16)|(175<<8)|87;//dw-13
54     mid[4] = (128<<24)|(195<<16)|(175<<8)|88;//dw-14
55     mid[5] = (128<<24)|(195<<16)|(175<<8)|89;//dw-15
56     mid[6] = (128<<24)|(195<<16)|(175<<8)|90;//dw-16
57     mid[7] = (128<<24)|(195<<16)|(175<<8)|91;//dw-17
58
59     WriteArrayObj[] wao;
60     atomic {
61       wao=global new WriteArrayObj[nthreads*nthreads]; //create array of objects
62       mybarr = global new BarrierServer(nthreads);
63     }
64     mybarr.start(mid[0]);
65
66     WriteArrayObjWrap[] wawrap = new WriteArrayObjWrap[nthreads];
67
68     atomic {
69       for(int i=0;i<nthreads; i++) {
70         int start = i * nthreads; 
71         wawrap[i] = new WriteArrayObjWrap(global new WriteArrayObj(i,wao, nthreads,start));
72       }
73     }
74
75     boolean waitfordone=true;
76     while(waitfordone) {
77       atomic { //Master aborts come from here
78         if (mybarr.done)
79           waitfordone=false;
80       }
81     }
82
83     for(int i =0; i<nthreads; i++)
84       wawrap[i].wa.start(mid[i]);
85
86     for(int i =0; i<nthreads; i++)
87       wawrap[i].wa.join();
88
89         System.printString("Finished\n");
90   }
91 }