Advertisement
Guest User

Untitled

a guest
Nov 26th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.13 KB | None | 0 0
  1. import java.util.concurrent.BrokenBarrierException;
  2. import java.util.concurrent.CyclicBarrier;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. import java.util.stream.Stream;
  6. import java.util.stream.Collectors;
  7.  
  8. class Executor extends Thread {
  9.  
  10. List<P2> generateP2(Production root, int depth) {
  11.  
  12. CountDownLatch barrier = new CountDownLatch(2);
  13.  
  14. P2 p2a = new P2(root.m_vertex.m_left, barrier);
  15. P2 p2b = new P2(root.m_vertex.m_right, barrier);
  16.  
  17. p2a.start();
  18. p2b.start();
  19.  
  20. barrier.await();
  21.  
  22. if (depth == 0) {
  23. return new ArrayList<>{ p2a, p2b };
  24. } else {
  25. List<P2> fromA = generateP2(p2a, depth-1);
  26. List<P2> fromB = generateP2(p2b, depth-1);
  27.  
  28. List<P2> merged = new ArrayList<>();
  29. merged.addAll(fromA);
  30. merged.addAll(fromB);
  31. return merged;
  32. }
  33. }
  34.  
  35. List<Production> mergePairs(List<Production> prods) {
  36.  
  37. if (prods.size() <= 2) {
  38. return prods;
  39. } else {
  40.  
  41. int evenSize = prods.size();
  42. if (evenSize % 2 != 0) evenSize--;
  43.  
  44. List<Production> newProds = new ArrayList<>();
  45.  
  46. for (int i=0; i< evenSize; i += 2) {
  47.  
  48.  
  49. A2 a2a = new A2(root.m_vertex.m_left, barrier);
  50. A2 a2b = new A2(root.m_vertex.m_right, barrier);
  51. }
  52. }
  53. }
  54.  
  55. void run2() {
  56.  
  57. // tree
  58.  
  59. CyclicBarrier barrier = new CyclicBarrier(1);
  60. P1 p1 = new P1(S,barrier);
  61. p1.start();
  62. barrier.await();
  63.  
  64. int K = 5;
  65.  
  66. List<P2> p2s = generateP2(p1, K);
  67.  
  68. List<P3> p3s = p2s.stream().flatMap(p2 -> {
  69. CountDownLatch br = new CountDownLatch(2);
  70. P3 p3a = new P3(p2.m_vertex.m_left, br);
  71. P3 p3b = new P3(p2.m_vertex.m_right, br);
  72. p3a.start();
  73. p3b.start();
  74. br.await();
  75. return new ArrayList<P3> {p3a, p3b};
  76. });
  77.  
  78.  
  79. // solver
  80.  
  81.  
  82. }
  83.  
  84.  
  85.  
  86. public synchronized void run() {
  87. Vertex S = new Vertex(null,null,null,"S");
  88. try {
  89. //[(P1)]
  90. CyclicBarrier barrier = new CyclicBarrier(1);
  91. P1 p1 = new P1(S,barrier);
  92. p1.start();
  93. barrier.await();
  94. //[(P2)1(P2)2]
  95. barrier = new CyclicBarrier(2);
  96. P2 p2a = new P2(p1.m_vertex.m_left,barrier);
  97. P2 p2b = new P2(p1.m_vertex.m_right,barrier);
  98. p2a.start();
  99. p2b.start();
  100. barrier.await();
  101. //[(P2)3(P2)4(P3)5(P3)6]
  102. barrier = new CyclicBarrier(4);
  103. P2 p2c = new P2(p2a.m_vertex.m_left,barrier);
  104. P2 p2d = new P2(p2a.m_vertex.m_right,barrier);
  105. P3 p3a = new P3(p2b.m_vertex.m_left,barrier);
  106. P3 p3b = new P3(p2b.m_vertex.m_right,barrier);
  107. p2c.start();
  108. p2d.start();
  109. p3a.start();
  110. p3b.start();
  111. barrier.await();
  112. //[(P3)1(P3)2(P3)3(P3)4]
  113. barrier = new CyclicBarrier(4);
  114. P3 p3c = new P3(p2c.m_vertex.m_left,barrier);
  115. P3 p3d = new P3(p2c.m_vertex.m_right,barrier);
  116. P3 p3e = new P3(p2d.m_vertex.m_left,barrier);
  117. P3 p3f = new P3(p2d.m_vertex.m_right,barrier);
  118. p3c.start();
  119. p3d.start();
  120. p3e.start();
  121. p3f.start();
  122. barrier.await();
  123. // MULTI-FRONTAL SOLVER ALGORITHM
  124. //[(A1)(A)1(A)2(A)3(A)4(AN)]
  125. barrier = new CyclicBarrier(6);
  126. A1 localMat1 = new A1(p3c.m_vertex, barrier);
  127. A localMat2 = new A(p3d.m_vertex, barrier);
  128. A localMat3 = new A(p3e.m_vertex, barrier);
  129. A localMat4 = new A(p3f.m_vertex, barrier);
  130. A localMat5 = new A(p3a.m_vertex, barrier);
  131. AN localMat6 = new AN(p3b.m_vertex, barrier);
  132. localMat1.start(); localMat2.start(); localMat3.start();
  133. localMat4.start(); localMat5.start(); localMat6.start();
  134. barrier.await();
  135. //[(EA)1(EA)2(EA)3(EA)4(EA)5(EA)6]
  136. // barrier = new CyclicBarrier(6);
  137. // EA localElim1 = new EA(p3c.m_vertex, barrier);
  138. // EA localElim2 = new EA(p3d.m_vertex, barrier);
  139. // EA localElim3 = new EA(p3e.m_vertex, barrier);
  140. // EA localElim4 = new EA(p3f.m_vertex, barrier);
  141. // EA localElim5 = new EA(p3a.m_vertex, barrier);
  142. // EA localElim6 = new EA(p3b.m_vertex, barrier);
  143. // localElim1.start(); localElim2.start(); localElim3.start();
  144. // localElim4.start(); localElim5.start(); localElim6.start();
  145. // barrier.await();
  146. //[(A2)1(A2)2(A2)3]
  147. barrier = new CyclicBarrier(3);
  148. A2 mergedMat1 = new A2(p2c.m_vertex, barrier);
  149. A2 mergedMat2 = new A2(p2d.m_vertex, barrier);
  150. A2 mergedMat3 = new A2(p2b.m_vertex, barrier);
  151. mergedMat1.start(); mergedMat2.start(); mergedMat3.start();
  152. barrier.await();
  153. //[(E2)1(E2)2(E2)3]
  154. barrier = new CyclicBarrier(3);
  155. E2 gaussElimMat1 = new E2(p2b.m_vertex, barrier);
  156. E2 gaussElimMat2 = new E2(p2c.m_vertex, barrier);
  157. E2 gaussElimMat3 = new E2(p2d.m_vertex, barrier);
  158. gaussElimMat1.start(); gaussElimMat2.start(); gaussElimMat3.start();
  159. barrier.await();
  160. //[(A2)4)]
  161. barrier = new CyclicBarrier(1);
  162. A2 mergedMat4 = new A2(p2a.m_vertex, barrier);
  163. mergedMat4.start();
  164. barrier.await();
  165. //[(E2)4]
  166. barrier = new CyclicBarrier(1);
  167. E2 gaussElimMat4 = new E2(p2a.m_vertex, barrier);
  168. gaussElimMat4.start();
  169. barrier.await();
  170. //[(Aroot)]
  171. barrier = new CyclicBarrier(1);
  172. Aroot mergedRootMat = new Aroot(p1.m_vertex, barrier);
  173. mergedRootMat.start();
  174. barrier.await();
  175. //[(Eroot)]
  176. barrier = new CyclicBarrier(1);
  177. Eroot fullElimMat = new Eroot(p1.m_vertex, barrier);
  178. fullElimMat.start();
  179. barrier.await();
  180. barrier = new CyclicBarrier(1);
  181. BS backSub1 = new BS(fullElimMat.m_vertex, barrier);
  182. backSub1.start();
  183. barrier.await();
  184. //[(BS)2(BS)3]
  185. barrier = new CyclicBarrier(2);
  186. BS backSub2 = new BS(backSub1.m_vertex.m_left, barrier);
  187. BS backSub3 = new BS(p2b.m_vertex.m_right, barrier);
  188. backSub2.start();
  189. backSub3.start();
  190. barrier.await();
  191. //[(BSA)1(BSA)2(BSA)3(BSA)4(BSA)5(BSA)6]
  192. barrier = new CyclicBarrier(6);
  193. BSA localbackSub1 = new BSA(p3c.m_vertex, barrier);
  194. BSA localbackSub2 = new BSA(p3d.m_vertex, barrier);
  195. BSA localbackSub3 = new BSA(p3e.m_vertex, barrier);
  196. BSA localbackSub4 = new BSA(p3f.m_vertex, barrier);
  197. BSA localbackSub5 = new BSA(p3a.m_vertex, barrier);
  198. BSA localbackSub6 = new BSA(p3b.m_vertex, barrier);
  199. localbackSub1.start(); localbackSub2.start(); localbackSub3.start();
  200. localbackSub4.start(); localbackSub5.start(); localbackSub6.start();
  201. barrier.await();
  202. } catch (InterruptedException | BrokenBarrierException e) {
  203. e.printStackTrace();
  204. }
  205. }
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement