1 public class SingleObjectMod extends Thread {
6 int prob; //prob to choose if short or long transaction
11 public SingleObjectMod() {
15 public SingleObjectMod(int nthreads, int arrysize, int loopsize, int lsize1, int lsize2, int prob, int threadid, intwrapper[] mainobj, Random rand) {
16 this.nthreads = nthreads;
17 this.arrysize = arrysize;
18 this.loopsize = loopsize;
22 this.threadid = threadid;
23 this.mainobj = mainobj;
27 public static void parseCmdLine(String args[], SingleObjectMod som) {
30 while(i < args.length && args[i].startsWith("-")) {
33 if(arg.equals("-t")) {
35 som.nthreads = new Integer(args[i++]).intValue();
37 } else if(arg.equals("-size")) {
39 som.arrysize = new Integer(args[i++]).intValue();
41 } else if(arg.equals("-l")) {
43 som.loopsize = new Integer(args[i++]).intValue();
45 } else if(arg.equals("-l1")) {
47 som.lsize1 = new Integer(args[i++]).intValue();
49 } else if(arg.equals("-l2")) {
51 som.lsize2 = new Integer(args[i++]).intValue();
53 } else if(arg.equals("-p")) {
55 som.prob = new Integer(args[i++]).intValue();
58 System.out.println("Incorrect argument");
59 System.out.println("usage: ./SingleObjectMod -t <threads> -size <array size> -l <loopsize> -l1 <inner loopsize2> -l2 <inner loopsize2> -p <prob distribution>\n");
66 Random rand = new Random();
68 rand.random_seed(threadid);
69 int partitionSize = (loopsize + nthreads/2) /nthreads;
70 int start = threadid * partitionSize;
72 if(threadid == (nthreads - 1))
75 stop = start + partitionSize;
76 LogTime[] lt = new LogTime[8*(stop-start)];
77 for(int i = 0; i<8*(stop-start); i++) {
78 lt[i] = new LogTime();
82 //System.out.println("Start = " + start+ " stop= " + stop + " partitionSize= " + partitionSize+ " loopsize= " + loopsize + " lsize1= " + lsize1 + " lsize2= " + lsize2);
86 lt[eventcount].event = 1;
87 lt[eventcount++].time = System.getticks();
89 for(int i = start; i < stop; i++) {
91 lt[eventcount].event = 2;
92 lt[eventcount++].time = System.getticks();
94 int distribution = (int)(rand.random_generate() % 100);
96 //90% long transactions
97 if(distribution < prob) {
100 //10% short transactions
106 int l3= (int)(rand.random_generate() % 2);
118 lt[eventcount].event = 3;
119 lt[eventcount++].time = System.getticks();
123 lt[eventcount].event = 4;
124 lt[eventcount++].time = System.getticks();
126 index = (int)(rand.random_generate() % arrysize);
128 for(int j = 0; j<l1; j++) {
133 lt[eventcount].event = 5;
134 lt[eventcount++].time = System.getticks();
136 // Only read values from an object
137 val = mainobj[index];
140 lt[eventcount].event = 6;
141 lt[eventcount++].time = System.getticks();
144 for(int j = 0; j<l2; j++) {
148 lt[eventcount].event = 7;
149 lt[eventcount++].time = System.getticks();
152 mainobj[index] = count;
155 lt[eventcount].event = 8;
156 lt[eventcount++].time = System.getticks();
159 lt[eventcount].event = 9;
160 lt[eventcount++].time = System.getticks();
163 FileOutputStream fo = new FileOutputStream("test_"+threadid);
164 //test output to file
170 * Convert int to a byte array
172 public byte[] fillBytes(int key) {
173 byte[] b = new byte[4];
174 for(int i = 0; i < 4; i++){
175 int offset = (3-i) * 8;
176 b[i] = (byte) ((key >> offset) & 0xFF);
180 // System.println("Sending b[0]= "+ (char) b[0]);
186 public static void main(String[] args) {
187 SingleObjectMod som = new SingleObjectMod();
188 SingleObjectMod.parseCmdLine(args, som);
189 som.mainobj = new intwrapper[som.arrysize];
192 Random rand = new Random();
195 for(int i = 0; i<som.arrysize; i++) {
199 int nthreads = som.nthreads;
200 System.out.println("Num threads= "+ nthreads);
202 SingleObjectMod[] mysom = new SingleObjectMod[nthreads];
203 for(int i = 0; i < nthreads; i++) {
204 mysom[i] = new SingleObjectMod(nthreads, som.arrysize, som.loopsize, som.lsize1, som.lsize2, som.prob, i, som.mainobj, rand);
207 for(int i = 0; i < nthreads; i++) {
211 for(int i = 0; i < nthreads; i++) {
215 System.out.println("Finished......");
220 public class LogTime {