Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.75 KB | None | 0 0
  1. package edu.ktu.ds.lab3.demo;
  2.  
  3. import edu.ktu.ds.lab3.gui.ValidationException;
  4. import edu.ktu.ds.lab3.utils.HashType;
  5. import edu.ktu.ds.lab3.utils.Ks;
  6. import edu.ktu.ds.lab3.utils.ParsableHashMap;
  7. import edu.ktu.ds.lab3.utils.ParsableMap;
  8.  
  9. import java.util.*;
  10. import java.util.concurrent.BlockingQueue;
  11. import java.util.concurrent.Semaphore;
  12. import java.util.stream.Stream;
  13. import java.nio.file.Files;
  14. import java.nio.file.Paths;
  15. import java.io.IOException;
  16.  
  17. /**
  18. * @author eimutis
  19. */
  20. public class SimpleBenchmark {
  21.  
  22. public static final String FINISH_COMMAND = " ";
  23. private static final ResourceBundle MESSAGES = ResourceBundle.getBundle("edu.ktu.ds.lab3.gui.messages");
  24.  
  25. private final Timekeeper timekeeper;
  26.  
  27. private final String[] BENCHMARK_NAMES = {"Ktu contains", "Java contains", "Ktu rem", "Java rem", "get0.75", "get0.25"};
  28. private final int[] COUNTS = {10000, 20000, 40000, 80000};
  29.  
  30. private final ParsableMap<String, Car> carsMap
  31. = new ParsableHashMap<>(String::new, Car::new, 10, 0.75f, HashType.DIVISION);
  32. private final ParsableMap<String, Car> carsMap2
  33. = new ParsableHashMap<>(String::new, Car::new, 10, 0.25f, HashType.DIVISION);
  34. private final java.util.HashMap<String, Car> carsMap3
  35. = new java.util.HashMap<String, Car>();
  36. private final Queue<String> chainsSizes = new LinkedList<>();
  37.  
  38. // private final ParsableMap<Integer, String> wordsMap = new ParsableHashMap<>(Integer::new, String::new);
  39.  
  40. /**
  41. * For console benchmark
  42. */
  43. public SimpleBenchmark() {
  44. timekeeper = new Timekeeper(COUNTS);
  45. }
  46.  
  47. /**
  48. * For Gui benchmark
  49. *
  50. * @param resultsLogger
  51. * @param semaphore
  52. */
  53. public SimpleBenchmark(BlockingQueue<String> resultsLogger, Semaphore semaphore) {
  54. semaphore.release();
  55. timekeeper = new Timekeeper(COUNTS, resultsLogger, semaphore);
  56. }
  57.  
  58. public static void main(String[] args) {
  59. executeTest();
  60. }
  61.  
  62. public static void executeTest() {
  63. // suvienodiname skaičių formatus pagal LT lokalę (10-ainis kablelis)
  64. Locale.setDefault(new Locale("LT"));
  65. Ks.out("Greitaveikos tyrimas:\n");
  66. new SimpleBenchmark().startBenchmark();
  67. }
  68.  
  69. public void startBenchmark() {
  70. try {
  71. benchmark();
  72. } catch (InterruptedException e) {
  73. Thread.currentThread().interrupt();
  74. } catch (Exception ex) {
  75. ex.printStackTrace(System.out);
  76. }
  77. }
  78.  
  79. public void benchmark() throws InterruptedException {
  80. try {
  81. chainsSizes.add(MESSAGES.getString("maxChainLength"));
  82. chainsSizes.add(" kiekis " + BENCHMARK_NAMES[0] + " " + BENCHMARK_NAMES[1]);
  83. for (int k : COUNTS) {
  84. String[] words;
  85. try (Stream<String> stream1 = Files.lines(Paths.get("C:\\Users\\juskuc\\Desktop\\Lab3_MaisosLenteles\\data\\zodynas.txt"))) {
  86.  
  87. words = stream1
  88. .toArray(String[]::new);
  89.  
  90.  
  91. } catch (IOException e) {
  92. e.printStackTrace();
  93. }
  94.  
  95.  
  96. Car[] carsArray = CarsGenerator.generateShuffleCars(k);
  97. String[] carsIdsArray = CarsGenerator.generateShuffleIds(k);
  98. carsMap.clear();
  99. carsMap2.clear();
  100. carsMap3.clear();
  101. timekeeper.startAfterPause();
  102. timekeeper.start();
  103.  
  104. for (int i = 0; i < k; i++) {
  105. carsMap.contains(carsIdsArray[i]);
  106. }
  107. timekeeper.finish(BENCHMARK_NAMES[0], k);
  108. String str = " " + k + " " + carsMap.getMaxChainSize();
  109. for (int i = 0; i < k; i++) {
  110. carsMap.contains(carsIdsArray[i]);
  111. }
  112. timekeeper.finish(BENCHMARK_NAMES[1], k);
  113.  
  114. str += " " + carsMap2.getMaxChainSize();
  115. chainsSizes.add(str);
  116.  
  117. for (int i = 0; i < k; i++) {
  118. carsMap.remove(carsIdsArray[i]);
  119. }
  120. timekeeper.finish(BENCHMARK_NAMES[2], k);
  121.  
  122. for (int i = 0; i < k; i++) {
  123. carsMap3.remove(carsIdsArray[i]);
  124. }
  125. timekeeper.finish(BENCHMARK_NAMES[3], k);
  126.  
  127. Arrays.stream(carsIdsArray).forEach(carsMap::get);
  128. timekeeper.finish(BENCHMARK_NAMES[4], k);
  129.  
  130. Arrays.stream(carsIdsArray).forEach(carsMap2::get);
  131. timekeeper.finish(BENCHMARK_NAMES[5], k);
  132. timekeeper.seriesFinish();
  133. }
  134.  
  135. StringBuilder sb = new StringBuilder();
  136. chainsSizes.forEach(p -> sb.append(p).append(System.lineSeparator()));
  137. timekeeper.logResult(sb.toString());
  138. timekeeper.logResult(FINISH_COMMAND);
  139. } catch (ValidationException e) {
  140. timekeeper.logResult(e.getMessage());
  141. }
  142. }
  143. }
  144. package edu.ktu.ds.lab3.demo;
  145.  
  146. import edu.ktu.ds.lab3.utils.Ks;
  147.  
  148. import java.util.concurrent.BlockingQueue;
  149. import java.util.concurrent.Semaphore;
  150.  
  151. /**
  152. * @author eimutis
  153. */
  154. public class Timekeeper {
  155.  
  156. private int[] tyrimoImtis;
  157. private long startTime;
  158. private final long startTimeTot;
  159. private double sumTime;
  160. private int tyrimoInd;
  161. private int kiekioInd;
  162. private int tyrimųN;
  163. private final int tyrimųNmax = 30;
  164. private final int kiekioN;
  165. private double[][] laikai;
  166. private String tyrimųEilutė;
  167. private final String kiekioFormatas = "%8d(%2d) ";
  168. private String header = " kiekis(*k) ";
  169.  
  170. private final BlockingQueue<String> resultsLogger;
  171. private final Semaphore semaphore;
  172.  
  173. /**
  174. * For console benchmark
  175. * @param kiekiai
  176. */
  177. public Timekeeper(int[] kiekiai) {
  178. this(kiekiai, null, null);
  179. }
  180.  
  181. /**
  182. * For Gui benchmark
  183. *
  184. * @param kiekiai
  185. * @param resultsLogger
  186. * @param semaphore
  187. */
  188. public Timekeeper(int[] kiekiai, BlockingQueue<String> resultsLogger, Semaphore semaphore) {
  189. this.tyrimoImtis = kiekiai;
  190. this.resultsLogger = resultsLogger;
  191. this.semaphore = semaphore;
  192. kiekioN = tyrimoImtis.length;
  193. laikai = new double[kiekioN][tyrimųNmax];
  194. startTimeTot = System.nanoTime();
  195. }
  196.  
  197. public void start() throws InterruptedException {
  198. tyrimoInd = 0;
  199. if (kiekioInd >= kiekioN) {
  200. logResult("Duomenų kiekis keičiamas daugiau kartų nei buvo planuota");
  201. // System.exit(0);
  202. }
  203. tyrimųEilutė = String.format(kiekioFormatas, tyrimoImtis[kiekioInd],
  204. tyrimoImtis[kiekioInd] / tyrimoImtis[0]);
  205. Runtime.getRuntime().gc();
  206. Runtime.getRuntime().gc();
  207. Runtime.getRuntime().gc();
  208. startTime = System.nanoTime();
  209. }
  210.  
  211. public void startAfterPause() {
  212. Runtime.getRuntime().gc();
  213. Runtime.getRuntime().gc();
  214. Runtime.getRuntime().gc();
  215. startTime = System.nanoTime();
  216. }
  217.  
  218. public void finish(String vardas, int k) throws InterruptedException {
  219. double executionTime = ((System.nanoTime() - startTime) / 1e9) / k * 10000;
  220. sumTime += executionTime;
  221. if (startTime == 0) {
  222. logResult("Metodas finish panaudotas be start metodo !!!\n");
  223. // System.exit(0);
  224. }
  225. if (kiekioInd == 0) {
  226. header += String.format("%9s ", vardas);
  227. }
  228. if (tyrimoInd >= tyrimųNmax) {
  229. logResult("Jau atlikta daugiau tyrimų nei numatyta !!!\n");
  230. // System.exit(0);
  231. }
  232. laikai[kiekioInd][tyrimoInd++] = executionTime;
  233. tyrimųEilutė += String.format("%9.4f ", executionTime);
  234. Runtime.getRuntime().gc();
  235. Runtime.getRuntime().gc();
  236. Runtime.getRuntime().gc();
  237. startTime = System.nanoTime();
  238. }
  239.  
  240. public void seriesFinish() throws InterruptedException {
  241. if (kiekioInd == 0) {
  242. logResult(header + "\n");
  243. }
  244. logResult(tyrimųEilutė + "\n");
  245. kiekioInd++;
  246. tyrimųN = tyrimoInd;
  247. if (kiekioInd == kiekioN) {
  248. summary();
  249. }
  250. }
  251.  
  252. private void summary() throws InterruptedException {
  253. StringBuilder sb = new StringBuilder();
  254. double totTime = (System.nanoTime() - startTimeTot) / 1e9;
  255. sb.append(String.format(" Bendras tyrimo laikas %8.3f sekundžių", totTime)).append("\n");
  256. sb.append(String.format(" Išmatuotas tyrimo laikas %8.3f sekundžių", sumTime)).append("\n");
  257. sb.append(String.format(" t.y. %5.1f%% sudaro pagalbiniai darbai",
  258. (totTime - sumTime) / totTime * 100)).append("\n");
  259. sb.append("\n");
  260. sb.append("Normalizuota (santykinė) laikų lentelė\n");
  261. sb.append(header).append("\n");
  262. double d1 = laikai[0][0];
  263. for (int i = 0; i < kiekioN; i++) {
  264. tyrimųEilutė = String.format(kiekioFormatas, tyrimoImtis[i],
  265. tyrimoImtis[i] / tyrimoImtis[0]);
  266. for (int j = 0; j < tyrimųN; j++) {
  267. tyrimųEilutė += String.format("%9.2f ", laikai[i][j] / d1);
  268. }
  269. sb.append(tyrimųEilutė).append("\n");
  270. }
  271. sb.append("\n");
  272. logResult(sb.toString());
  273. }
  274.  
  275. public void logResult(String result) throws InterruptedException {
  276. if (resultsLogger != null && semaphore != null) {
  277. resultsLogger.put(result);
  278. semaphore.acquire();
  279. } else {
  280. Ks.out(result);
  281. }
  282. }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement