74 } catch (ClassNotFoundException e) {
75 throw new RuntimeException("Class " + args[0] + " not found.");
76 }
77 }
78 else
79 mapClass = RWMap.class;
80
81 if (args.length > 1)
82 maxThreads = Integer.parseInt(args[1]);
83
84 if (args.length > 2)
85 nops = Integer.parseInt(args[2]);
86
87 if (args.length > 3)
88 pinsert = Integer.parseInt(args[3]);
89
90 if (args.length > 4)
91 premove = Integer.parseInt(args[4]);
92
93 // normalize probabilities wrt random number generator
94 removesPerMaxRandom = (int)(((double)premove/100.0 * 0x7FFFFFFFL));
95 insertsPerMaxRandom = (int)(((double)pinsert/100.0 * 0x7FFFFFFFL));
96
97 System.out.println("Using " + mapClass.getName());
98
99 SplittableRandom rnd = new SplittableRandom();
100 Integer[] key = new Integer[NKEYS];
101 for (int i = 0; i < key.length; ++i)
102 key[i] = new Integer(rnd.nextInt());
103
104 // warmup
105 System.out.println("Warmup...");
106 for (int k = 0; k < 2; ++k) {
107 Map<Integer, Integer> map = (Map<Integer, Integer>)
108 mapClass.getDeclaredConstructor().newInstance();
109 LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
110 CyclicBarrier barrier = new CyclicBarrier(1, timer);
111 new Runner(map, key, barrier, rnd.split()).run();
112 map.clear();
113 }
114
115 for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) {
116 System.out.print("Threads: " + i + "\t:");
117 Map<Integer, Integer> map = (Map<Integer, Integer>)
118 mapClass.getDeclaredConstructor().newInstance();
119 LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
120 CyclicBarrier barrier = new CyclicBarrier(i+1, timer);
121 for (int k = 0; k < i; ++k)
122 pool.execute(new Runner(map, key, barrier, rnd.split()));
123 barrier.await();
124 barrier.await();
125 long time = timer.getTime();
126 long tpo = time / (i * (long)nops);
127 System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op");
128 double secs = (double)(time) / 1000000000.0;
129 System.out.println("\t " + secs + "s run time");
130 map.clear();
131 }
132 pool.shutdown();
133 if (! pool.awaitTermination(LONG_DELAY_MS, MILLISECONDS))
134 throw new Error();
135 }
136
137 static class Runner implements Runnable {
138 final Map<Integer,Integer> map;
139 final Integer[] key;
140 final CyclicBarrier barrier;
141 final SplittableRandom rnd;
142 int position;
143 int total;
144
145 Runner(Map<Integer,Integer> map,
146 Integer[] key,
147 CyclicBarrier barrier,
148 SplittableRandom rnd) {
|
74 } catch (ClassNotFoundException e) {
75 throw new RuntimeException("Class " + args[0] + " not found.");
76 }
77 }
78 else
79 mapClass = RWMap.class;
80
81 if (args.length > 1)
82 maxThreads = Integer.parseInt(args[1]);
83
84 if (args.length > 2)
85 nops = Integer.parseInt(args[2]);
86
87 if (args.length > 3)
88 pinsert = Integer.parseInt(args[3]);
89
90 if (args.length > 4)
91 premove = Integer.parseInt(args[4]);
92
93 // normalize probabilities wrt random number generator
94 removesPerMaxRandom = (int)((double)premove/100.0 * 0x7FFFFFFFL);
95 insertsPerMaxRandom = (int)((double)pinsert/100.0 * 0x7FFFFFFFL);
96
97 System.out.println("Using " + mapClass.getName());
98
99 SplittableRandom rnd = new SplittableRandom();
100 Integer[] key = new Integer[NKEYS];
101 for (int i = 0; i < key.length; ++i)
102 key[i] = new Integer(rnd.nextInt());
103
104 // warmup
105 System.out.println("Warmup...");
106 for (int k = 0; k < 2; ++k) {
107 Map<Integer, Integer> map = (Map<Integer, Integer>)
108 mapClass.getDeclaredConstructor().newInstance();
109 LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
110 CyclicBarrier barrier = new CyclicBarrier(1, timer);
111 new Runner(map, key, barrier, rnd.split()).run();
112 map.clear();
113 }
114
115 for (int i = 1; i <= maxThreads; i += (i+1) >>> 1) {
116 System.out.print("Threads: " + i + "\t:");
117 Map<Integer, Integer> map = (Map<Integer, Integer>)
118 mapClass.getDeclaredConstructor().newInstance();
119 LoopHelpers.BarrierTimer timer = new LoopHelpers.BarrierTimer();
120 CyclicBarrier barrier = new CyclicBarrier(i+1, timer);
121 for (int k = 0; k < i; ++k)
122 pool.execute(new Runner(map, key, barrier, rnd.split()));
123 barrier.await();
124 barrier.await();
125 long time = timer.getTime();
126 long tpo = time / (i * (long)nops);
127 System.out.print(LoopHelpers.rightJustify(tpo) + " ns per op");
128 double secs = (double)time / 1000000000.0;
129 System.out.println("\t " + secs + "s run time");
130 map.clear();
131 }
132 pool.shutdown();
133 if (! pool.awaitTermination(LONG_DELAY_MS, MILLISECONDS))
134 throw new Error();
135 }
136
137 static class Runner implements Runnable {
138 final Map<Integer,Integer> map;
139 final Integer[] key;
140 final CyclicBarrier barrier;
141 final SplittableRandom rnd;
142 int position;
143 int total;
144
145 Runner(Map<Integer,Integer> map,
146 Integer[] key,
147 CyclicBarrier barrier,
148 SplittableRandom rnd) {
|