diff --git a/lonestar/analytics/cpu/sssp/CMakeLists.txt b/lonestar/analytics/cpu/sssp/CMakeLists.txt index 6b9c3b7cf2..c75da3f7ba 100644 --- a/lonestar/analytics/cpu/sssp/CMakeLists.txt +++ b/lonestar/analytics/cpu/sssp/CMakeLists.txt @@ -5,3 +5,4 @@ install(TARGETS sssp-cpu DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT apps EX add_test_scale(small1 sssp-cpu "${BASEINPUT}/reference/structured/rome99.gr" -delta 8) add_test_scale(small2 sssp-cpu "${BASEINPUT}/scalefree/rmat10.gr" -delta 8) +add_test_scale(adaptive sssp-cpu "${BASEINPUT}/scalefree/rmat10.gr" -delta 1 -algo=deltaStepAdaptive) diff --git a/lonestar/analytics/cpu/sssp/SSSP.cpp b/lonestar/analytics/cpu/sssp/SSSP.cpp index 0d05b24108..1b1a3e3b82 100644 --- a/lonestar/analytics/cpu/sssp/SSSP.cpp +++ b/lonestar/analytics/cpu/sssp/SSSP.cpp @@ -18,6 +18,7 @@ */ #include "galois/Galois.h" +#include "galois/worklists/AdaptiveObim.h" #include "galois/AtomicHelpers.h" #include "galois/Reduction.h" #include "galois/PriorityQueue.h" @@ -59,6 +60,7 @@ enum Algo { deltaTile = 0, deltaStep, deltaStepBarrier, + deltaStepAdaptive, serDeltaTile, serDelta, dijkstraTile, @@ -69,15 +71,17 @@ enum Algo { }; const char* const ALGO_NAMES[] = { - "deltaTile", "deltaStep", "deltaStepBarrier", "serDeltaTile", - "serDelta", "dijkstraTile", "dijkstra", "topo", - "topoTile", "Auto"}; + "deltaTile", "deltaStep", "deltaStepBarrier", + "deltaStepAdaptive", "serDeltaTile", "serDelta", + "dijkstraTile", "dijkstra", "topo", + "topoTile", "Auto"}; static cll::opt algo( "algo", cll::desc("Choose an algorithm (default value auto):"), cll::values(clEnumVal(deltaTile, "deltaTile"), clEnumVal(deltaStep, "deltaStep"), clEnumVal(deltaStepBarrier, "deltaStepBarrier"), + clEnumVal(deltaStepAdaptive, "deltaStepAdaptive"), clEnumVal(serDeltaTile, "serDeltaTile"), clEnumVal(serDelta, "serDelta"), clEnumVal(dijkstraTile, "dijkstraTile"), @@ -111,9 +115,9 @@ using TileRangeFn = SSSP::TileRangeFn; namespace gwl = galois::worklists; using PSchunk = gwl::PerSocketChunkFIFO; using OBIM = gwl::OrderedByIntegerMetric; -using OBIM_Barrier = - gwl::OrderedByIntegerMetric::with_barrier::type; +using OBIM_Adaptive = + gwl::AdaptiveOrderedByIntegerMetric; +using OBIM_Barrier = OBIM::with_barrier::type; template void deltaStepAlgo(Graph& graph, GNode source, const P& pushWrap, @@ -450,6 +454,11 @@ int main(int argc, char** argv) { topoTileAlgo(graph, source); break; + case deltaStepAdaptive: + deltaStepAlgo(graph, source, ReqPushWrap(), + OutEdgeRangeFn{graph}); + break; + case deltaStepBarrier: deltaStepAlgo(graph, source, ReqPushWrap(), OutEdgeRangeFn{graph});