1 import java.util.Random;
3 public class Executor {
16 ThreadClass[] threads;
19 int readPercentSecond;
21 public String toString() {
23 for(int i=0;i<numThreads;i++)
24 s+=threads[i].toString();
29 public Executor(int numThreads, int numTrans, int deltaTrans, int numObjects, int numAccesses, int deltaAccesses, int readPercent, int delay, int deltaDelay, int nonTrans, int deltaNonTrans) {
30 this(numThreads, numTrans, deltaTrans, numObjects, numAccesses, deltaAccesses, readPercent, delay, deltaDelay, nonTrans, deltaNonTrans, 100, 100, 0);
33 public Executor(int numThreads, int numTrans, int deltaTrans, int numObjects, int numAccesses, int deltaAccesses, int readPercent, int delay, int deltaDelay, int nonTrans, int deltaNonTrans, int splitobjects, int splitaccesses, int readPercentSecond) {
34 this.numThreads=numThreads;
35 this.numTrans=numTrans;
36 this.deltaTrans=deltaTrans;
37 this.numObjects=numObjects;
38 this.numAccesses=numAccesses;
39 this.deltaAccesses=deltaAccesses;
40 this.readPercent=readPercent;
42 this.deltaDelay=deltaDelay;
43 this.nonTrans=nonTrans;
44 this.deltaNonTrans=deltaNonTrans;
45 this.splitobjects=splitobjects;
46 this.splitaccesses=splitaccesses;
47 this.readPercentSecond=readPercentSecond;
49 threads=new ThreadClass[numThreads];
53 public int maxTime() {
55 for(int i=0;i<numThreads;i++) {
57 for(int j=0;j<getThread(i).numTransactions();j++) {
58 Transaction trans=getThread(i).getTransaction(j);
59 time+=trans.getTime(trans.numEvents()-1);
67 public int numObjects() {
71 public int numThreads() {
75 public int numEvents() {
77 for(int i=0;i<numThreads();i++) {
78 events+=getThread(i).numTransactions();
83 public int maxEvents() {
85 for(int i=0;i<numThreads();i++) {
86 if (events<getThread(i).numTransactions())
87 events=getThread(i).numTransactions();
92 public ThreadClass getThread(int i) {
96 private int getRandom(int base, int delta) {
97 return base+delta-r.nextInt(2*delta+1);
100 public void generateThreads() {
101 for(int i=0;i<numThreads;i++) {
102 threads[i]=generateThread();
106 private Transaction generateTransaction() {
107 int accesses=getRandom(numAccesses, deltaAccesses);
108 Transaction t=new Transaction(accesses);
110 int splitpoint=(numObjects*splitobjects)/100;
111 for(int i=0;i<(accesses-1); i++) {
112 if (r.nextInt(100)<splitaccesses) {
113 boolean isRead=r.nextInt(100)<readPercent;
114 time+=getRandom(delay, deltaDelay);
115 int object=r.nextInt(splitpoint);
116 t.setObject(i, object);
119 t.setEvent(i, Transaction.READ);
121 t.setEvent(i, Transaction.WRITE);
123 boolean isRead=r.nextInt(100)<readPercentSecond;
124 time+=getRandom(delay, deltaDelay);
125 int object=r.nextInt(numObjects-splitpoint)+splitpoint;
126 t.setObject(i, object);
129 t.setEvent(i, Transaction.READ);
131 t.setEvent(i, Transaction.WRITE);
134 t.setEvent(accesses-1, Transaction.DELAY);
135 t.setObject(accesses-1, Transaction.DELAY);
136 time+=getRandom(delay, deltaDelay);
137 t.setTime(accesses-1, time);
142 private ThreadClass generateThread() {
143 int numTransactions=getRandom(numTrans, deltaTrans);
144 ThreadClass t=new ThreadClass(numTransactions*2);
145 for(int i=0;i<numTransactions;i++) {
146 Transaction trans=generateTransaction();
147 t.setTransaction(i*2, trans);
148 Transaction transdelay=new Transaction(1);
149 transdelay.setObject(0,Transaction.DELAY);
150 transdelay.setEvent(0,Transaction.DELAY);
151 transdelay.setTime(0, getRandom(nonTrans, deltaNonTrans));
152 t.setTransaction(i*2+1, transdelay);