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."
);
}