use correct type in graph contractor to avoid overflows in nodes
This commit is contained in:
parent
68e38880df
commit
dc8e6bd8d9
@ -278,9 +278,9 @@ class GraphContractor
|
|||||||
|
|
||||||
std::vector<RemainingNodeData> remaining_nodes(number_of_nodes);
|
std::vector<RemainingNodeData> remaining_nodes(number_of_nodes);
|
||||||
// initialize priorities in parallel
|
// initialize priorities in parallel
|
||||||
tbb::parallel_for(tbb::blocked_range<int>(0, number_of_nodes, InitGrainSize),
|
tbb::parallel_for(tbb::blocked_range<NodeID>(0, number_of_nodes, InitGrainSize),
|
||||||
[this, &remaining_nodes](const tbb::blocked_range<int> &range) {
|
[this, &remaining_nodes](const tbb::blocked_range<NodeID> &range) {
|
||||||
for (int x = range.begin(), end = range.end(); x != end; ++x)
|
for (auto x = range.begin(), end = range.end(); x != end; ++x)
|
||||||
{
|
{
|
||||||
remaining_nodes[x].id = x;
|
remaining_nodes[x].id = x;
|
||||||
}
|
}
|
||||||
@ -302,14 +302,14 @@ class GraphContractor
|
|||||||
|
|
||||||
util::UnbufferedLog log;
|
util::UnbufferedLog log;
|
||||||
log << "initializing elimination PQ ...";
|
log << "initializing elimination PQ ...";
|
||||||
tbb::parallel_for(tbb::blocked_range<int>(0, number_of_nodes, PQGrainSize),
|
tbb::parallel_for(
|
||||||
|
tbb::blocked_range<NodeID>(0, number_of_nodes, PQGrainSize),
|
||||||
[this, &node_priorities, &node_depth, &thread_data_list](
|
[this, &node_priorities, &node_depth, &thread_data_list](
|
||||||
const tbb::blocked_range<int> &range) {
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
ContractorThreadData *data = thread_data_list.GetThreadData();
|
ContractorThreadData *data = thread_data_list.GetThreadData();
|
||||||
for (int x = range.begin(), end = range.end(); x != end; ++x)
|
for (auto x = range.begin(), end = range.end(); x != end; ++x)
|
||||||
{
|
{
|
||||||
node_priorities[x] =
|
node_priorities[x] = this->EvaluateNodePriority(data, node_depth[x], x);
|
||||||
this->EvaluateNodePriority(data, node_depth[x], x);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
log << "ok";
|
log << "ok";
|
||||||
@ -429,9 +429,9 @@ class GraphContractor
|
|||||||
}
|
}
|
||||||
|
|
||||||
tbb::parallel_for(
|
tbb::parallel_for(
|
||||||
tbb::blocked_range<std::size_t>(0, remaining_nodes.size(), IndependentGrainSize),
|
tbb::blocked_range<NodeID>(0, remaining_nodes.size(), IndependentGrainSize),
|
||||||
[this, &node_priorities, &remaining_nodes, &thread_data_list](
|
[this, &node_priorities, &remaining_nodes, &thread_data_list](
|
||||||
const tbb::blocked_range<std::size_t> &range) {
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
ContractorThreadData *data = thread_data_list.GetThreadData();
|
ContractorThreadData *data = thread_data_list.GetThreadData();
|
||||||
// determine independent node set
|
// determine independent node set
|
||||||
for (auto i = range.begin(), end = range.end(); i != end; ++i)
|
for (auto i = range.begin(), end = range.end(); i != end; ++i)
|
||||||
@ -455,13 +455,13 @@ class GraphContractor
|
|||||||
{
|
{
|
||||||
// write out contraction level
|
// write out contraction level
|
||||||
tbb::parallel_for(
|
tbb::parallel_for(
|
||||||
tbb::blocked_range<std::size_t>(
|
tbb::blocked_range<NodeID>(
|
||||||
begin_independent_nodes_idx, end_independent_nodes_idx, ContractGrainSize),
|
begin_independent_nodes_idx, end_independent_nodes_idx, ContractGrainSize),
|
||||||
[this, remaining_nodes, flushed_contractor, current_level](
|
[this, remaining_nodes, flushed_contractor, current_level](
|
||||||
const tbb::blocked_range<std::size_t> &range) {
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
if (flushed_contractor)
|
if (flushed_contractor)
|
||||||
{
|
{
|
||||||
for (int position = range.begin(), end = range.end(); position != end;
|
for (auto position = range.begin(), end = range.end(); position != end;
|
||||||
++position)
|
++position)
|
||||||
{
|
{
|
||||||
const NodeID x = remaining_nodes[position].id;
|
const NodeID x = remaining_nodes[position].id;
|
||||||
@ -470,7 +470,7 @@ class GraphContractor
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int position = range.begin(), end = range.end(); position != end;
|
for (auto position = range.begin(), end = range.end(); position != end;
|
||||||
++position)
|
++position)
|
||||||
{
|
{
|
||||||
const NodeID x = remaining_nodes[position].id;
|
const NodeID x = remaining_nodes[position].id;
|
||||||
@ -482,12 +482,12 @@ class GraphContractor
|
|||||||
|
|
||||||
// contract independent nodes
|
// contract independent nodes
|
||||||
tbb::parallel_for(
|
tbb::parallel_for(
|
||||||
tbb::blocked_range<std::size_t>(
|
tbb::blocked_range<NodeID>(
|
||||||
begin_independent_nodes_idx, end_independent_nodes_idx, ContractGrainSize),
|
begin_independent_nodes_idx, end_independent_nodes_idx, ContractGrainSize),
|
||||||
[this, &remaining_nodes, &thread_data_list](
|
[this, &remaining_nodes, &thread_data_list](
|
||||||
const tbb::blocked_range<std::size_t> &range) {
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
ContractorThreadData *data = thread_data_list.GetThreadData();
|
ContractorThreadData *data = thread_data_list.GetThreadData();
|
||||||
for (int position = range.begin(), end = range.end(); position != end;
|
for (auto position = range.begin(), end = range.end(); position != end;
|
||||||
++position)
|
++position)
|
||||||
{
|
{
|
||||||
const NodeID x = remaining_nodes[position].id;
|
const NodeID x = remaining_nodes[position].id;
|
||||||
@ -496,11 +496,12 @@ class GraphContractor
|
|||||||
});
|
});
|
||||||
|
|
||||||
tbb::parallel_for(
|
tbb::parallel_for(
|
||||||
tbb::blocked_range<int>(
|
tbb::blocked_range<NodeID>(
|
||||||
begin_independent_nodes_idx, end_independent_nodes_idx, DeleteGrainSize),
|
begin_independent_nodes_idx, end_independent_nodes_idx, DeleteGrainSize),
|
||||||
[this, &remaining_nodes, &thread_data_list](const tbb::blocked_range<int> &range) {
|
[this, &remaining_nodes, &thread_data_list](
|
||||||
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
ContractorThreadData *data = thread_data_list.GetThreadData();
|
ContractorThreadData *data = thread_data_list.GetThreadData();
|
||||||
for (int position = range.begin(), end = range.end(); position != end;
|
for (auto position = range.begin(), end = range.end(); position != end;
|
||||||
++position)
|
++position)
|
||||||
{
|
{
|
||||||
const NodeID x = remaining_nodes[position].id;
|
const NodeID x = remaining_nodes[position].id;
|
||||||
@ -545,13 +546,14 @@ class GraphContractor
|
|||||||
if (!use_cached_node_priorities)
|
if (!use_cached_node_priorities)
|
||||||
{
|
{
|
||||||
tbb::parallel_for(
|
tbb::parallel_for(
|
||||||
tbb::blocked_range<int>(begin_independent_nodes_idx,
|
tbb::blocked_range<NodeID>(begin_independent_nodes_idx,
|
||||||
end_independent_nodes_idx,
|
end_independent_nodes_idx,
|
||||||
NeighboursGrainSize),
|
NeighboursGrainSize),
|
||||||
[this, &node_priorities, &remaining_nodes, &node_depth, &thread_data_list](
|
[this, &node_priorities, &remaining_nodes, &node_depth, &thread_data_list](
|
||||||
const tbb::blocked_range<int> &range) {
|
const tbb::blocked_range<NodeID> &range) {
|
||||||
ContractorThreadData *data = thread_data_list.GetThreadData();
|
ContractorThreadData *data = thread_data_list.GetThreadData();
|
||||||
for (int position = range.begin(), end = range.end(); position != end;
|
for (auto position = range.begin(), end = range.end();
|
||||||
|
position != end;
|
||||||
++position)
|
++position)
|
||||||
{
|
{
|
||||||
NodeID x = remaining_nodes[position].id;
|
NodeID x = remaining_nodes[position].id;
|
||||||
@ -572,21 +574,22 @@ class GraphContractor
|
|||||||
{
|
{
|
||||||
if (orig_node_id_from_new_node_id_map.size() > 0)
|
if (orig_node_id_from_new_node_id_map.size() > 0)
|
||||||
{
|
{
|
||||||
tbb::parallel_for(tbb::blocked_range<int>(0, remaining_nodes.size(), InitGrainSize),
|
tbb::parallel_for(
|
||||||
[this, &remaining_nodes](const tbb::blocked_range<int> &range) {
|
tbb::blocked_range<NodeID>(0, remaining_nodes.size(), InitGrainSize),
|
||||||
for (int x = range.begin(), end = range.end(); x != end; ++x)
|
[this, &remaining_nodes](const tbb::blocked_range<NodeID> &range) {
|
||||||
|
for (auto x = range.begin(), end = range.end(); x != end; ++x)
|
||||||
{
|
{
|
||||||
const auto orig_id = remaining_nodes[x].id;
|
const auto orig_id = remaining_nodes[x].id;
|
||||||
is_core_node[orig_node_id_from_new_node_id_map[orig_id]] =
|
is_core_node[orig_node_id_from_new_node_id_map[orig_id]] = true;
|
||||||
true;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tbb::parallel_for(tbb::blocked_range<int>(0, remaining_nodes.size(), InitGrainSize),
|
tbb::parallel_for(
|
||||||
[this, &remaining_nodes](const tbb::blocked_range<int> &range) {
|
tbb::blocked_range<NodeID>(0, remaining_nodes.size(), InitGrainSize),
|
||||||
for (int x = range.begin(), end = range.end(); x != end; ++x)
|
[this, &remaining_nodes](const tbb::blocked_range<NodeID> &range) {
|
||||||
|
for (auto x = range.begin(), end = range.end(); x != end; ++x)
|
||||||
{
|
{
|
||||||
const auto orig_id = remaining_nodes[x].id;
|
const auto orig_id = remaining_nodes[x].id;
|
||||||
is_core_node[orig_id] = true;
|
is_core_node[orig_id] = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user