Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Policy Host Random Policy #135

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions include/pando-lib-galois/containers/host_cached_array.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class HostCachedArray {
assert(range.size() == m_data.size());
size_ = 0;
PANDO_CHECK_RETURN(m_data.initialize());
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
range, m_data,
+[](Range range, pando::GlobalRef<galois::HostIndexedMap<pando::Array<T>>> data) {
PANDO_CHECK(lift(data, initialize));
Expand All @@ -64,7 +64,7 @@ class HostCachedArray {
ref, initialize,
*(range.begin() + static_cast<std::uint64_t>(pando::getCurrentPlace().node.id))));
}));
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
m_data, m_data,
+[](decltype(m_data) complete, galois::HostIndexedMap<pando::Array<T>> data) {
for (std::uint64_t i = 0; i < data.size(); i++) {
Expand All @@ -79,7 +79,7 @@ class HostCachedArray {
}

void deinitialize() {
PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
m_data, +[](galois::HostIndexedMap<pando::Array<T>> data) {
const std::uint64_t i = static_cast<std::uint64_t>(pando::getCurrentPlace().node.id);
auto ref = data[i];
Expand Down
2 changes: 1 addition & 1 deletion include/pando-lib-galois/containers/host_local_storage.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ template <typename T>
[[nodiscard]] pando::Expected<galois::HostLocalStorage<T>> copyToAllHosts(T&& cont) {
galois::HostLocalStorage<T> ret{};
PANDO_CHECK_RETURN(ret.initialize());
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
cont, ret, +[](T cont, pando::GlobalRef<T> refcopy) {
T copy;
if (galois::localityOf(cont).node.id != pando::getCurrentPlace().node.id) {
Expand Down
2 changes: 1 addition & 1 deletion include/pando-lib-galois/containers/pod_local_storage.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ template <typename T>
[[nodiscard]] pando::Expected<galois::PodLocalStorage<T>> copyToAllPods(T& cont) {
galois::PodLocalStorage<T> ret{};
PANDO_CHECK_RETURN(ret.initialize());
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
cont, ret, +[](T cont, pando::GlobalRef<T> refcopy) {
T copy;
const std::uint64_t size = cont.size();
Expand Down
6 changes: 3 additions & 3 deletions include/pando-lib-galois/containers/thread_local_storage.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class ThreadLocalStorage {

[[nodiscard]] pando::Status initialize() {
PANDO_CHECK_RETURN(m_items.initialize());
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
m_items, +[](pando::GlobalRef<pando::GlobalPtr<T>> ref) {
const auto placeDims = pando::getPlaceDims();
const auto threadDims = pando::getThreadDims();
Expand All @@ -60,7 +60,7 @@ class ThreadLocalStorage {
}

void deinitialize() {
PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
m_items, +[](pando::GlobalRef<pando::GlobalPtr<T>> ptr) {
const auto placeDims = pando::getPlaceDims();
const auto threadDims = pando::getThreadDims();
Expand Down Expand Up @@ -275,7 +275,7 @@ template <typename T>
[[nodiscard]] pando::Expected<galois::ThreadLocalStorage<T>> copyToAllThreads(T& cont) {
galois::ThreadLocalStorage<T> ret{};
PANDO_CHECK_RETURN(ret.initialize());
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
cont, ret, +[](T cont, pando::GlobalRef<T> refcopy) {
T copy;
const std::uint64_t size = cont.size();
Expand Down
4 changes: 2 additions & 2 deletions include/pando-lib-galois/graphs/dist_local_csr.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -854,7 +854,7 @@ class DistLocalCSR {
galois::HostLocalStorage<pando::Vector<VertexType>> pHV{};
PANDO_CHECK_RETURN(pHV.initialize());

PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
partEdges, pHV,
+[](HostLocalStorage<pando::Vector<pando::Vector<EdgeType>>> partEdges,
pando::GlobalRef<pando::Vector<VertexType>> pHV) {
Expand Down Expand Up @@ -1206,7 +1206,7 @@ class DistLocalCSR {
* @brief create CSR Caches
*/
pando::Status generateCache() {
return galois::doAll(
return galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
arrayOfCSRs, arrayOfCSRs,
+[](decltype(arrayOfCSRs) arrayOfCSRs, HostIndexedMap<CSR> localCSRs) {
for (std::uint64_t i = 0; i < localCSRs.size(); i++) {
Expand Down
12 changes: 6 additions & 6 deletions include/pando-lib-galois/graphs/mirror_dist_local_csr.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ class MirrorDistLocalCSR {
* @brief reset the master bit sets of all hosts
*/
void resetMasterBitSets() {
galois::doAll(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
masterBitSets, +[](pando::GlobalRef<pando::Array<bool>> masterBitSet) {
fmapVoid(masterBitSet, fill, false);
});
Expand All @@ -395,7 +395,7 @@ class MirrorDistLocalCSR {
* @brief reset the mirror bit sets of all hosts
*/
void resetMirrorBitSets() {
galois::doAll(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
mirrorBitSets, +[](pando::GlobalRef<pando::Array<bool>> mirrorBitSet) {
fmapVoid(mirrorBitSet, fill, false);
});
Expand Down Expand Up @@ -576,7 +576,7 @@ class MirrorDistLocalCSR {
auto thisMDLCSR = *this;
auto state = galois::make_tpl(thisMDLCSR, func, wgh);

PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, state, localMirrorToRemoteMasterOrderedTable,
+[](decltype(state) state,
pando::Array<MirrorToMasterMap> localMirrorToRemoteMasterOrderedMap) {
Expand Down Expand Up @@ -636,7 +636,7 @@ class MirrorDistLocalCSR {
auto thisMDLCSR = *this;
auto state = galois::make_tpl(thisMDLCSR, wgh);

PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, state, localMasterToRemoteMirrorTable,
+[](decltype(state) state,
pando::Vector<pando::Vector<MirrorToMasterMap>> localMasterToRemoteMirrorMap) {
Expand Down Expand Up @@ -795,7 +795,7 @@ class MirrorDistLocalCSR {
PANDO_CHECK_RETURN(mirrorBitSets.initialize());
PANDO_CHECK_RETURN(masterBitSets.initialize());
auto state = galois::make_tpl(masterRange, mirrorRange, mirrorBitSets);
PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, state, masterBitSets,
+[](decltype(state) state, pando::GlobalRef<pando::Array<bool>> globalMasterBitSet) {
auto [masterRange, mirrorRange, mirrorBitSets] = state;
Expand Down Expand Up @@ -839,7 +839,7 @@ class MirrorDistLocalCSR {
// each host traverses its own localMirrorToRemoteMasterOrderedTable and send out the mapping to
// the corresponding remote host append to the vector of vector where each vector is the mapping
// from a specific host
galois::doAll(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
state, localMirrorToRemoteMasterOrderedTable,
+[](decltype(state) state,
pando::Array<MirrorToMasterMap> localMirrorToRemoteMasterOrderedMap) {
Expand Down
12 changes: 6 additions & 6 deletions include/pando-lib-galois/import/ingest_rmat_el.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ ReturnType initializeELDACSR(pando::Array<char> filename, std::uint64_t numVerti
galois::WaitGroup freeWaiter;
PANDO_CHECK(freeWaiter.initialize(0));
auto freeWGH = freeWaiter.getHandle();
galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
freeWGH, perThreadRename, +[](galois::HashTable<std::uint64_t, std::uint64_t> hash) {
hash.deinitialize();
});
Expand Down Expand Up @@ -158,7 +158,7 @@ ReturnType initializeELDLCSR(pando::Array<char> filename, std::uint64_t numVerti
galois::WaitGroup freeWaiter;
PANDO_CHECK(freeWaiter.initialize(0));
auto freeWGH = freeWaiter.getHandle();
galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
freeWGH, perThreadRename, +[](galois::HashTable<std::uint64_t, std::uint64_t> hash) {
hash.deinitialize();
});
Expand Down Expand Up @@ -204,16 +204,16 @@ ReturnType initializeELDLCSR(pando::Array<char> filename, std::uint64_t numVerti
}
};

PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(generateVerticesState, pHV,
generateVerticesPerHost));
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
generateVerticesState, pHV, generateVerticesPerHost));

auto [partEdges, renamePerHost] =
internal::partitionEdgesParallely(pHV, std::move(localReadEdges), hostLocalV2PM);

galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
partEdges, +[](pando::GlobalRef<pando::Vector<pando::Vector<ELEdge>>> edge_vectors) {
pando::Vector<pando::Vector<ELEdge>> evs_tmp = edge_vectors;
galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
evs_tmp, +[](pando::GlobalRef<pando::Vector<ELEdge>> src_ev) {
pando::Vector<ELEdge> tmp = src_ev;
std::sort(tmp.begin(), tmp.end());
Expand Down
2 changes: 1 addition & 1 deletion include/pando-lib-galois/import/ingest_wmd_csv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ galois::DistLocalCSR<VertexType, EdgeType> initializeWMDDLCSR(pando::Array<char>
galois::WaitGroup freeWaiter;
PANDO_CHECK(freeWaiter.initialize(0));
auto freeWGH = freeWaiter.getHandle();
galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
freeWGH, perThreadRename, +[](galois::HashTable<std::uint64_t, std::uint64_t> hash) {
hash.deinitialize();
});
Expand Down
18 changes: 9 additions & 9 deletions include/pando-lib-galois/import/wmd_graph_importer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ buildEdgeCountToSend(std::uint64_t numVirtualHosts,
sumArray[i] = p;
}

PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
sumArray, localEdges,
+[](pando::Array<galois::Pair<std::uint64_t, std::uint64_t>> counts,
pando::Vector<pando::Vector<EdgeType>> localEdges) {
Expand Down Expand Up @@ -111,10 +111,10 @@ buildEdgeCountToSend(std::uint64_t numVirtualHosts,
const uint64_t pairOffset = offsetof(UPair, first);

auto state = galois::make_tpl(wgh, sumArray);
PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, state, localEdges, +[](decltype(state) state, pando::Vector<EdgeType> localEdges) {
auto [wgh, sumArray] = state;
PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, sumArray, localEdges, +[](decltype(sumArray) counts, EdgeType localEdge) {
pando::GlobalPtr<char> toAdd = static_cast<pando::GlobalPtr<char>>(
static_cast<pando::GlobalPtr<void>>(&counts[localEdge.src % counts.size()]));
Expand Down Expand Up @@ -179,7 +179,7 @@ partitionEdgesParallely(HostLocalStorage<pando::Vector<VertexType>> partitionedV
// Insert into hashmap
// ToDo: Parallelize this (Divija)

PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
partitionedVertices, renamePerHost,
+[](HostLocalStorage<pando::Vector<VertexType>> partitionedVertices,
pando::GlobalRef<galois::HashTable<std::uint64_t, std::uint64_t>> hashRef) {
Expand Down Expand Up @@ -386,7 +386,7 @@ template <typename VertexType>

auto tpl = galois::make_tpl(numVerticesPerHostPerThread, prefixArrPerHostPerThread,
perThreadVerticesPartition);
galois::doAll(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
tpl, perThreadVerticesPartition,
+[](decltype(tpl) tpl,
pando::GlobalRef<HostIndexedMap<pando::Vector<VertexType>>> perThreadVerticesPartition) {
Expand Down Expand Up @@ -432,7 +432,7 @@ template <typename VertexType>
using SRC_Val = uint64_t;
using DST_Val = uint64_t;

PANDO_CHECK(galois::doAll(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
numVerticesPerHostPerThread, prefixArrPerHostPerThread,
+[](HostLocalStorage<Array<std::uint64_t>> numVerticesPerHostPerThread,
Array<std::uint64_t> prefixArr) {
Expand All @@ -452,7 +452,7 @@ template <typename VertexType>
WaitGroup freeWaiter;
PANDO_CHECK(freeWaiter.initialize());
auto freeWGH = freeWaiter.getHandle();
PANDO_CHECK(doAll(
PANDO_CHECK(doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
freeWGH, numVerticesPerHostPerThread, +[](galois::Array<std::uint64_t> arr) {
arr.deinitialize();
}));
Expand All @@ -461,7 +461,7 @@ template <typename VertexType>
galois::HostLocalStorage<pando::Vector<VertexType>> pHV{};
PANDO_CHECK(pHV.initialize());

PANDO_CHECK(doAll(
PANDO_CHECK(doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
pHV, prefixArrPerHostPerThread, +[](decltype(pHV) pHV, galois::Array<uint64_t> prefixArr) {
const std::uint64_t nodeIdx = pando::getCurrentPlace().node.id;
const std::uint64_t numThreads = galois::getNumThreads();
Expand Down Expand Up @@ -494,7 +494,7 @@ template <typename VertexType>

#if FREE
auto tpl = galois::make_tpl(prefixArrPerHostPerThread, perThreadVerticesPartition);
galois::doAll(
galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
freeWGH, tpl, perThreadVerticesPartition,
+[](decltype(tpl) tpl,
pando::GlobalRef<HostIndexedMap<pando::Vector<VertexType>>> perThreadVerticesPartition) {
Expand Down
12 changes: 9 additions & 3 deletions include/pando-lib-galois/loops/do_all.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ constexpr bool DOALL_TIMER_ENABLE = false;

extern counter::Record<std::minstd_rand> perCoreRNG;
extern counter::Record<std::uniform_int_distribution<std::int8_t>> perCoreDist;
extern counter::Record<std::uniform_int_distribution<std::int64_t>> nodeSizeDist;
extern counter::Record<std::int64_t> schedulerCount;
extern counter::Record<std::int64_t> doAllCount;

Expand Down Expand Up @@ -49,15 +50,16 @@ static inline uint64_t getTotalThreads() {
}

enum SchedulerPolicy {
RANDOM,
INFER_RANDOM_CORE,
UNSAFE_STRIPE,
CORE_STRIPE,
NODE_ONLY,
NODE_RANDOM,
NAIVE,
};

#ifndef PANDO_SCHED
constexpr SchedulerPolicy CURRENT_SCHEDULER_POLICY = SchedulerPolicy::RANDOM;
constexpr SchedulerPolicy CURRENT_SCHEDULER_POLICY = SchedulerPolicy::INFER_RANDOM_CORE;
#else
constexpr SchedulerPolicy CURRENT_SCHEDULER_POLICY = PANDO_SCHED;
#endif
Expand All @@ -82,7 +84,7 @@ pando::Place schedulerImpl(pando::Place preferredLocality,
[[maybe_unused]] LoopLocalSchedulerStruct<Policy>& loopLocal) noexcept {
counter::HighResolutionCount<SCHEDULER_TIMER_ENABLE> schedulerTimer;
schedulerTimer.start();
if constexpr (Policy == RANDOM) {
if constexpr (Policy == INFER_RANDOM_CORE) {
auto coreIdx = perCoreDist.getLocal()(perCoreRNG.getLocal());
assert(coreIdx < pando::getCoreDims().x);
preferredLocality =
Expand All @@ -103,6 +105,10 @@ pando::Place schedulerImpl(pando::Place preferredLocality,
assert(coreIdx < pando::getCoreDims().x);
preferredLocality =
pando::Place(pando::getCurrentNode(), pando::anyPod, pando::CoreIndex(coreIdx, 0));
} else if constexpr (Policy == NODE_RANDOM) {
auto nodeIdx = nodeSizeDist.getLocal()(perCoreRNG.getLocal());
assert(nodeIdx < pando::getNodeDims().id);
preferredLocality = pando::Place(pando::NodeIndex(nodeIdx), pando::anyPod, pando::anyCore);
} else {
PANDO_ABORT("SCHEDULER POLICY NOT IMPLEMENTED");
}
Expand Down
10 changes: 5 additions & 5 deletions microbench/bfs/include/pando-bfs-galois/sssp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ pando::Status SSSP_DLCSR(
state.dist = 0;

#ifdef PANDO_STAT_TRACE_ENABLE
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, phbfs, +[](pando::Vector<typename G::VertexTopologyID>) {
PANDO_MEM_STAT_NEW_KERNEL("BFS Start");
}));
Expand Down Expand Up @@ -168,7 +168,7 @@ pando::Status SSSP_DLCSR(
}

#ifdef PANDO_STAT_TRACE_ENABLE
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, phbfs, +[](pando::Vector<typename G::VertexTopologyID>) {
PANDO_MEM_STAT_NEW_KERNEL("BFS END");
}));
Expand Down Expand Up @@ -311,7 +311,7 @@ pando::Status SSSPMDLCSR(G& graph, std::uint64_t src, HostLocalStorage<MDWorkLis
#endif

#ifdef PANDO_STAT_TRACE_ENABLE
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
PANDO_CHECK(galois::doAllExplicitPolicy<galois::SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, toRead, +[](MDWorkList<G>) {
PANDO_MEM_STAT_NEW_KERNEL("BFS Start");
}));
Expand All @@ -328,7 +328,7 @@ pando::Status SSSPMDLCSR(G& graph, std::uint64_t src, HostLocalStorage<MDWorkLis
*active = false;

auto state = galois::make_tpl(graph, toWrite);
PANDO_CHECK_RETURN(galois::doAll(
PANDO_CHECK_RETURN(galois::doAllExplicitPolicy<galois::SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, state, toRead, +[](decltype(state) state, MDWorkList<G> toRead) {
auto [graph, toWrite] = state;
MDLCSRLocal<G>(graph, toRead, toWrite.getLocalRef());
Expand Down Expand Up @@ -360,7 +360,7 @@ pando::Status SSSPMDLCSR(G& graph, std::uint64_t src, HostLocalStorage<MDWorkLis
}

#ifdef PANDO_STAT_TRACE_ENABLE
PANDO_CHECK(galois::doAllExplicitPolicy<SchedulerPolicy::RANDOM>(
PANDO_CHECK(galois::doAllExplicitPolicy<galois::SchedulerPolicy::INFER_RANDOM_CORE>(
wgh, toRead, +[](MDWorkList<G>) {
PANDO_MEM_STAT_NEW_KERNEL("BFS END");
}));
Expand Down
Loading