< prev index next >

test/jdk/java/util/concurrent/locks/ReentrantReadWriteLock/MapLoops.java

Print this page
8229442: AQS and lock classes refresh
Reviewed-by: martin


  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) {


< prev index next >