Update benchmark to allocate nodes into global array along the same partition that...
[IRC.git] / Robust / src / Benchmarks / Prefetch / Em3d / dsm / BiGraphN.java
index 9c5a8f69a5ef4c8c8c760829cd18b2db51c52d97..19793c1d8d0a9ed2c9a8b56081f3c215a63e90c5 100644 (file)
@@ -36,52 +36,124 @@ public class BiGraph
    * @return the bi graph that we've created.
    **/
 
-  static BiGraph create(int numNodes, int numDegree, boolean verbose, Random r)
+  static BiGraph create(int numNodes, int degree, boolean verbose, Random r)
   {
-
     // making nodes (we create a table)
     //if (verbose) System.printString("making nodes (tables in orig. version)");
-    Node [] eTable=Node.fillTable(numNodes, numDegree, r);
-    Node [] hTable=Node.fillTable(numNodes, numDegree, r);
-
-    // making neighbors
-    //if (verbose) System.printString("updating from and coeffs");
-    for(int i = 0; i< numNodes; i++) {
-      Node n = hTable[i];
-      n.makeUniqueNeighbors(eTable, r);
-    }
-
-    for (int i = 0; i < numNodes; i++) {
-      Node n = eTable[i];
-      n.makeUniqueNeighbors(hTable, r);
-    }
-
-    // Create the fromNodes and coeff field
-    //if (verbose) System.printString("filling from fields");
-    for(int i = 0; i< numNodes; i++) {
-      Node n = hTable[i];
-      n.makeFromNodes();
-    }
-
-    for (int i = 0; i < numNodes; i++) {
-      Node n = eTable[i];
-      n.makeFromNodes();
-    }
-
-    // Update the fromNodes
-    for (int i = 0; i < numNodes; i++) {
-      Node n = hTable[i];
-      n.updateFromNodes(r);
-    }
-    for (int i = 0; i < numNodes; i++) {
-      Node n = eTable[i];
-      n.updateFromNodes(r);
-    }
+    //Node [] eTable=Node.fillTable(numNodes, numDegree, r);
+    //Node [] hTable=Node.fillTable(numNodes, numDegree, r);
+
+    Node [] eTable = global new Node[numNodes];
+    Node [] hTable = global new Node[numNodes];
 
+    eTable[0] = global new Node(degree, r);
+    hTable[0] = global new Node(degree, r);
+      
     BiGraph g = global new BiGraph(eTable, hTable);
+
     return g;
   }
 
+    
+  /**
+   * 
+   *
+   * @return 
+   **/
+  public void allocate( int indexBegin, int indexEnd, int degree, Random r )
+  { 
+      Node prevNodeE = global new Node(degree, r);
+      Node prevNodeH = global new Node(degree, r);
+
+      eNodes[indexBegin] = prevNodeE;
+      hNodes[indexBegin] = prevNodeH;
+
+      for( int i = indexBegin + 1; i < indexEnd; i++ ) {
+         Node curNodeE = global new Node(degree, r);
+         Node curNodeH = global new Node(degree, r);
+
+         eNodes[i] = curNodeE;
+         hNodes[i] = curNodeH;
+
+         prevNodeE.next = curNodeE;
+         prevNodeH.next = curNodeH;
+
+         prevNodeE = curNodeE;
+         prevNodeH = curNodeH;
+      }
+  }
+
+  
+  public void linkSegments( int index ) {
+      eNodes[index - 1].next = eNodes[index];
+      hNodes[index - 1].next = hNodes[index];
+  }
+
+
+  /**
+   * 
+   *
+   * @return 
+   **/
+  public void makeNeighbors( int indexBegin, int indexEnd, Random r )
+  {
+      System.printString( "Making unique neighbors for hNodes...\n" );
+
+      // making neighbors
+      //if (verbose) System.printString("updating from and coeffs");
+      for(int i = indexBegin; i < indexEnd; i++) {
+         Node n = hNodes[i];
+         n.makeUniqueNeighbors(eNodes, r);
+      }
+
+      System.printString( "Making unique neighbors for eNodes...\n" );
+
+      for (int i = indexBegin; i < indexEnd; i++) {
+         Node n = eNodes[i];
+         n.makeUniqueNeighbors(hNodes, r);
+      }
+  }
+
+
+  public void makeFromNodes( int indexBegin, int indexEnd )
+  {
+      System.printString( "Making h fromNodes...\n" );
+
+      // Create the fromNodes and coeff field
+      //if (verbose) System.printString("filling from fields");
+      for(int i = indexBegin; i < indexEnd; i++) {
+         Node n = hNodes[i];
+         n.makeFromNodes();
+      }
+      
+      System.printString( "Making e fromNodes...\n" );
+
+      for(int i = indexBegin; i < indexEnd; i++) {
+         Node n = eNodes[i];
+         n.makeFromNodes();
+      }   
+  }
+
+
+  public void makeFromLinks( int indexBegin, int indexEnd, Random r )
+  {
+      System.printString( "Updating h fromNodes...\n" );
+
+      // Update the fromNodes
+      for(int i = indexBegin; i < indexEnd; i++) {
+         Node n = hNodes[i];
+         n.updateFromNodes(r);
+      }
+
+      System.printString( "Updating e fromNodes...\n" );
+
+      for(int i = indexBegin; i < indexEnd; i++) {
+         Node n = eNodes[i];
+         n.updateFromNodes(r);
+      }      
+  }
+
+
   /**
    * Override the toString method to print out the values of the e and h nodes.
    * @return a string contain the values of the e and h nodes.