public static void optimizeBipartiteGraphSegment()

in graphjet-core/src/main/java/com/twitter/graphjet/bipartite/optimizer/Optimizer.java [185:221]


  public static void optimizeBipartiteGraphSegment(
    BipartiteGraphSegment bipartiteGraphSegment
  ) {
    long start = System.currentTimeMillis();

    LOG.info("BipartiteGraphSegment optimization starts.");

    AbstractPowerLawDegreeEdgePool leftNodeEdgePool =
      (AbstractPowerLawDegreeEdgePool) bipartiteGraphSegment
        .getLeftIndexedReaderAccessibleInfoProvider()
        .getLeftIndexedReaderAccessibleInfo()
        .getLeftNodeEdgePool();

    EdgePool leftOptimizedEdgePool = optimizePowerLawDegreeEdgePool(leftNodeEdgePool);

    LOG.info("BipartiteGraphSegment left edge pool optimization finishes.");

    AbstractPowerLawDegreeEdgePool rightNodeEdgePool =
      (AbstractPowerLawDegreeEdgePool) bipartiteGraphSegment
        .getReaderAccessibleInfoProvider()
        .getReaderAccessibleInfo()
        .getRightNodeEdgePool();

    EdgePool rightOptimizedEdgePool = optimizePowerLawDegreeEdgePool(rightNodeEdgePool);

    LOG.info("BipartiteGraphSegment right edge pool optimization finishes.");

    // Safe publication ensures that readers who reference the object will see the new edge pool
    bipartiteGraphSegment.getReaderAccessibleInfoProvider()
      .updateReaderAccessibleInfoEdgePool(leftOptimizedEdgePool, rightOptimizedEdgePool);

    long end = System.currentTimeMillis();

    LOG.info("BipartiteGraphSegment left + right edge pool optimization takes "
        + (double) (end - start) / 1000.0 + " seconds."
    );
  }