2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
6 package dstm2.benchmark;
10 import java.io.BufferedReader;
11 import java.io.IOException;
12 import java.io.InputStreamReader;
13 import java.util.Vector;
14 import javax.swing.KeyStroke;
20 public class Main_for_Book_BenchMArk {
21 public static void main(String args[]){
22 // Code For Inserting Words From Random File to The Binary Tree
23 int numThreads = 2;//THREADS;
24 int numMillis = Defaults.TIME;
25 int experiment = Defaults.EXPERIMENT;
26 String managerClassName = Defaults.MANAGER;
27 Class managerClass = null;
28 String benchmarkClassName = null;
29 Class benchmarkClass = null;
33 String adapterClassName = Defaults.ADAPTER;
35 // discard statistics from previous runs
37 // Parse and check the args
40 while (argc < args.length) {
41 String option = args[argc++];
42 if (option.equals("-m"))
43 managerClassName = args[argc];
44 else if (option.equals("-b"))
45 benchmarkClassName = args[argc];
46 else if (option.equals("-t"))
47 numThreads = Integer.parseInt(args[argc]);
48 else if (option.equals("-n"))
49 numMillis = Integer.parseInt(args[argc]);
50 else if (option.equals("-e"))
51 experiment = Integer.parseInt(args[argc]);
52 else if (option.equals("-a"))
53 adapterClassName = args[argc];
55 reportUsageErrorAndDie();
58 } catch (NumberFormatException e) {
59 System.out.println("Expected a number: " + args[argc]);
61 } catch (Exception e) {
62 reportUsageErrorAndDie();
65 // Initialize contention manager.
67 managerClass = Class.forName(Defaults.MANAGER);
68 Thread.setContentionManagerClass(managerClass);
69 } catch (ClassNotFoundException ex) {
70 reportUsageErrorAndDie();
73 // Initialize adapter class
74 Thread.setAdapterClass(adapterClassName);
76 // initialize benchmark
77 CustomBenchmark benchmark = null;
79 benchmarkClass = Class.forName(benchmarkClassName);
80 benchmark = (CustomBenchmark) benchmarkClass.newInstance();
82 } catch (InstantiationException e) {
83 System.out.format("%s does not implement dstm.benchmark.Benchmark: %s\n", benchmarkClass, e);
85 } catch (ClassCastException e) {
86 System.out.format("Exception when creating class %s: %s\n", benchmarkClass, e);
88 } catch (Exception e) {
89 e.printStackTrace(System.out);
93 // Set up the benchmark
96 CustomThread[] thread = new CustomThread[numThreads];
97 System.out.println("Benchmark: " + benchmarkClass);
98 System.out.println("Adapter: " + adapterClassName);
99 System.out.println("Contention manager: " + managerClassName);
100 System.out.println("Threads: " + numThreads);
101 System.out.println("Mix: " + experiment + "% updates");
102 TransactionalIO.benchmarks.benchmark.init();
105 // for(int k=0 ; k<400; k++){
108 // System.out.println((char)97);
111 for (int i = 0; i < numThreads; i++){
113 //thread[i] = benchmark.createThread(experiment, (char)j);
115 thread[i] = new CustomThread(benchmark);
119 startTime = System.currentTimeMillis();
120 for (int i = 0; i < numThreads; i++)
122 // Thread.sleep(numMillis);
123 // Thread.stop = true; // notify threads to stop
124 for (int i = 0; i < numThreads; i++) {
128 } catch (Exception e) {
129 e.printStackTrace(System.out);
132 long stopTime = System.currentTimeMillis();
134 double elapsed = (double)(stopTime - startTime) / 1000.0;
136 // Run the sanity check for this benchmark
138 benchmark.sanityCheck();
139 } catch (Exception e) {
140 e.printStackTrace(System.out);
143 long committed = Thread.totalCommitted;
144 long total = Thread.totalTotal;
146 System.out.printf("Committed: %d\nTotal: %d\nPercent committed: (%d%%)\n",
149 (100 * committed) / total);
151 System.out.println("No transactions executed!");
154 System.out.println("Elapsed time: " + elapsed + " seconds.");
155 System.out.println("------------------------------------------");
157 /* BufferedReader dataIn = new BufferedReader(new
158 InputStreamReader( System.in) );
162 name = dataIn.readLine();
163 }catch( IOException e ){
164 System.out.println("Error!");
167 // benchmark.printResults();
170 private static void reportUsageErrorAndDie() {
171 System.out.println("usage: dstm2.Main -b <benchmarkclass> [-m <managerclass>] [-t <#threads>] [-n <#time-in-ms>] [-e <experiment#>] [-a <adapter>]");