52 lines
1.8 KiB
C++
52 lines
1.8 KiB
C++
#ifndef OSRM_PARTITIONER_CELL_STATISTICS_HPP
|
|
#define OSRM_PARTITIONER_CELL_STATISTICS_HPP
|
|
|
|
#include "util/log.hpp"
|
|
#include "util/typedefs.hpp"
|
|
|
|
#include <unordered_set>
|
|
|
|
namespace osrm::partitioner
|
|
{
|
|
template <typename Partition, typename CellStorage>
|
|
void printCellStatistics(const Partition &partition, const CellStorage &storage)
|
|
{
|
|
util::Log() << "Cells statistics per level";
|
|
|
|
for (std::size_t level = 1; level < partition.GetNumberOfLevels(); ++level)
|
|
{
|
|
auto num_cells = partition.GetNumberOfCells(level);
|
|
std::size_t source = 0, destination = 0;
|
|
std::size_t boundary_nodes = 0;
|
|
std::size_t entries = 0;
|
|
for (std::uint32_t cell_id = 0; cell_id < num_cells; ++cell_id)
|
|
{
|
|
std::unordered_set<NodeID> boundary;
|
|
const auto &cell = storage.GetUnfilledCell(level, cell_id);
|
|
source += cell.GetSourceNodes().size();
|
|
destination += cell.GetDestinationNodes().size();
|
|
for (auto node : cell.GetSourceNodes())
|
|
{
|
|
boundary.insert(node);
|
|
}
|
|
for (auto node : cell.GetDestinationNodes())
|
|
{
|
|
boundary.insert(node);
|
|
}
|
|
boundary_nodes += boundary.size();
|
|
entries += cell.GetSourceNodes().size() * cell.GetDestinationNodes().size();
|
|
}
|
|
|
|
source /= num_cells;
|
|
destination /= num_cells;
|
|
|
|
util::Log() << "Level " << level << " #cells " << num_cells << " #boundary nodes "
|
|
<< boundary_nodes << ", sources: avg. " << source << ", destinations: avg. "
|
|
<< destination << ", entries: " << entries << " ("
|
|
<< (2 * entries * sizeof(EdgeWeight)) << " bytes)";
|
|
}
|
|
}
|
|
} // namespace osrm::partitioner
|
|
|
|
#endif
|