diff --git a/include/util/meminfo.hpp b/include/util/meminfo.hpp index 98290c7d5..435b5c32f 100644 --- a/include/util/meminfo.hpp +++ b/include/util/meminfo.hpp @@ -12,7 +12,8 @@ namespace osrm { namespace util { -inline void DumpMemoryStats() + +inline void DumpSTXXLStats() { #if STXXL_VERSION_MAJOR > 1 || (STXXL_VERSION_MAJOR == 1 && STXXL_VERSION_MINOR >= 4) auto manager = stxxl::block_manager::get_instance(); @@ -22,7 +23,10 @@ inline void DumpMemoryStats() #warning STXXL 1.4+ recommended - STXXL memory summary will not be available util::Log() << "STXXL: memory summary not available, needs STXXL 1.4 or higher"; #endif +} +inline void DumpMemoryStats() +{ #ifndef _WIN32 rusage usage; getrusage(RUSAGE_SELF, &usage); @@ -40,4 +44,4 @@ inline void DumpMemoryStats() } } -#endif \ No newline at end of file +#endif diff --git a/src/partition/partitioner.cpp b/src/partition/partitioner.cpp index 5aedd730e..fd9676476 100644 --- a/src/partition/partitioner.cpp +++ b/src/partition/partitioner.cpp @@ -96,13 +96,11 @@ void LogGeojson(const std::string &filename, std::vector bisectio return x; }; - - std::transform(bisection_ids.begin(),bisection_ids.end(),bisection_ids.begin(),reverse_bits); + std::transform(bisection_ids.begin(), bisection_ids.end(), bisection_ids.begin(), reverse_bits); printBisectionStats(bisection_ids, graph); std::vector> border_vertices(33); - for (NodeID nid = 0; nid < graph.NumberOfNodes(); ++nid) { const auto source_id = bisection_ids[nid]; diff --git a/src/partition/recursive_bisection_stats.cpp b/src/partition/recursive_bisection_stats.cpp index 3fe95bd75..16fdaeb50 100644 --- a/src/partition/recursive_bisection_stats.cpp +++ b/src/partition/recursive_bisection_stats.cpp @@ -22,15 +22,30 @@ void printBisectionStats(std::vector const std::unordered_set all_ids[32]; - std::uint32_t flag = 0; for (std::uint32_t level = 0; level < 32; ++level) { - flag |= (1 << level); + std::uint32_t bit = 1u << (31 - level); + flag |= bit; + + for (std::size_t i = 0; i < bisection_ids.size(); ++i) + all_ids[level].insert(bisection_ids[i] & flag); + + if (level > 0 && all_ids[level - 1] == all_ids[level]) + break; + + std::cout << "Level" << std::endl; + for (auto itr : all_ids[level]) + std::cout << "\t" << std::bitset<32>(itr) << std::endl; + for (const auto &node : graph.Nodes()) { const auto bisection_id_node = bisection_ids[node.original_id]; - all_ids[level].insert(bisection_id_node&flag); + + // subrange is not partitioned anymore + if (all_ids[level].count((bisection_id_node & flag) ^ bit) == 0) + continue; + auto is_border_node = false; for (const auto &edge : graph.Edges(node)) { @@ -38,7 +53,7 @@ void printBisectionStats(std::vector const is_border_node = true; } - if (is_border_node) + if (is_border_node && level == 0) ++total_border_nodes; cell_sizes[level][bisection_id_node & flag]++; @@ -86,11 +101,12 @@ void printBisectionStats(std::vector const << total_border / (double)cell_sizes[level].size(); std::cout << " Cell Sizes: " << min_size << " " << max_size << " " - << total_size / (double)cell_sizes[level].size(); + << total_size / (double)cell_sizes[level].size() + << " Total Vertices In Level: " << total_size; std::cout << std::endl; - } while (level < 31 && cell_sizes[level++].size() > 1); + } while (level < 31 && cell_sizes[++level].size() > 1); } } // namespace partition diff --git a/src/tools/contract.cpp b/src/tools/contract.cpp index 5eb006806..debecac48 100644 --- a/src/tools/contract.cpp +++ b/src/tools/contract.cpp @@ -181,6 +181,7 @@ int main(int argc, char *argv[]) try auto exitcode = contractor::Contractor(contractor_config).Run(); + util::DumpSTXXLStats(); util::DumpMemoryStats(); return exitcode; diff --git a/src/tools/extract.cpp b/src/tools/extract.cpp index 5df970f36..835d33494 100644 --- a/src/tools/extract.cpp +++ b/src/tools/extract.cpp @@ -167,6 +167,7 @@ int main(int argc, char *argv[]) try extractor_config.profile_path.string().c_str()); auto exitcode = extractor::Extractor(extractor_config).run(scripting_environment); + util::DumpSTXXLStats(); util::DumpMemoryStats(); return exitcode; diff --git a/src/tools/partition.cpp b/src/tools/partition.cpp index df010633c..8434a2f6b 100644 --- a/src/tools/partition.cpp +++ b/src/tools/partition.cpp @@ -2,6 +2,7 @@ #include "partition/partitioner.hpp" #include "util/log.hpp" +#include "util/meminfo.hpp" #include "util/version.hpp" #include @@ -153,6 +154,9 @@ int main(int argc, char *argv[]) try } auto exitcode = partition::Partitioner().Run(partition_config); + + util::DumpMemoryStats(); + return exitcode; } catch (const std::bad_alloc &e) diff --git a/unit_tests/partition/bisection_graph.cpp b/unit_tests/partition/bisection_graph.cpp index f2aa4811b..cec721779 100644 --- a/unit_tests/partition/bisection_graph.cpp +++ b/unit_tests/partition/bisection_graph.cpp @@ -147,7 +147,6 @@ BOOST_AUTO_TEST_CASE(access_edges) BOOST_CHECK(std::abs(static_cast(to_col(graph.GetID(node))) - static_cast(to_col(itr.target))) <= 1); } - } } diff --git a/unit_tests/partition/graph_view.cpp b/unit_tests/partition/graph_view.cpp index 38c7b29da..cceb76dd8 100644 --- a/unit_tests/partition/graph_view.cpp +++ b/unit_tests/partition/graph_view.cpp @@ -94,12 +94,12 @@ BOOST_AUTO_TEST_CASE(separate_top_bottom_copy) BOOST_CHECK(id < left.NumberOfNodes()); BOOST_CHECK_EQUAL(bisection_state.GetBisectionID(node.original_id), 0); - for( const auto & edge : left.Edges(id) ) + for (const auto &edge : left.Edges(id)) BOOST_CHECK(edge.target < left.NumberOfNodes()); } BOOST_CHECK_EQUAL(right.NumberOfNodes(), 4); - for( NodeID id = 0; id < right.NumberOfNodes(); ++id ) + for (NodeID id = 0; id < right.NumberOfNodes(); ++id) { const auto &node = right.Node(id); BOOST_CHECK_EQUAL(bisection_state.GetBisectionID(node.original_id), 1);