@@ -358,7 +358,7 @@ class EvenRegularGraphBuilder {
358
358
/* *
359
359
* Extend the graph with a new vertex. Find good existing vertex to which this new vertex gets connected.
360
360
*/
361
- void extendGraph (std::vector<BuilderAddTask>& add_tasks) {
361
+ void extendGraph (const std::vector<BuilderAddTask>& add_tasks) {
362
362
auto & graph = this ->graph_ ;
363
363
364
364
// for computing distances to neighbors not in the result queue
@@ -399,14 +399,15 @@ class EvenRegularGraphBuilder {
399
399
} else {
400
400
const auto remaining_add_tasks = std::vector<BuilderAddTask>(add_tasks.begin () + index , add_tasks.end ());
401
401
402
- auto batchExtendGraphKnownLID = [&](const std::vector<BuilderAddTask>& add_tasks , size_t task_index) {
402
+ auto batchExtendGraphKnownLID = [&](const std::vector<BuilderAddTask>& tasks , size_t task_index) {
403
403
const auto start_index = task_index * this ->extend_thread_task_size ;
404
- const auto end_index = std::min (add_tasks .size (), (task_index+1 ) * this ->extend_thread_task_size );
405
- for (size_t i = start_index; i < end_index; i++)
406
- extendGraphKnownLID (add_tasks [i]);
404
+ const auto end_index = std::min (tasks .size (), (task_index+1 ) * this ->extend_thread_task_size );
405
+ for (size_t i = start_index; i < end_index; i++)
406
+ extendGraphKnownLID (tasks [i]);
407
407
};
408
408
409
- parallel_for (0 , remaining_add_tasks.size (), this ->extend_thread_count , [&] (size_t task_index) {
409
+ size_t task_count = (remaining_add_tasks.size () / extend_thread_task_size) + ((remaining_add_tasks.size () % extend_thread_task_size != 0 ) ? 1 : 0 ); // +1, if n_queries % batch_size != 0
410
+ parallel_for (0 , task_count, extend_thread_count, [&] (size_t task_index) {
410
411
batchExtendGraphKnownLID (remaining_add_tasks, task_index);
411
412
});
412
413
}
@@ -1370,7 +1371,7 @@ class EvenRegularGraphBuilder {
1370
1371
// create batches
1371
1372
auto batch = std::vector<BuilderAddTask>();
1372
1373
batch.reserve (this ->extend_batch_size );
1373
- while (batch.size () < this ->extend_batch_size && this ->new_entry_queue_ .front ().manipulation_index < del_task_manipulation_index) {
1374
+ while (this -> new_entry_queue_ . size () > 0 && batch.size () < this ->extend_batch_size && this ->new_entry_queue_ .front ().manipulation_index < del_task_manipulation_index) {
1374
1375
batch.push_back (std::move (this ->new_entry_queue_ .front ()));
1375
1376
this ->new_entry_queue_ .pop_front ();
1376
1377
}
@@ -1475,8 +1476,7 @@ void optimze_edges(deglib::graph::MutableGraph& graph, const uint8_t k_opt, cons
1475
1476
auto connected = deglib::analysis::check_graph_connectivity (graph);
1476
1477
1477
1478
auto duration = duration_ms / 1000 ;
1478
- // fmt::print("{:7} step, {:5}s, AEW: {:4.2f}, {} connected, {}\n", status.step, duration, avg_edge_weight, connected ? "" : "not", valid_weights ? "valid" : "invalid");
1479
- std::cout << std::setw (7 ) << status.step << " step, " << std::setw (5 ) << duration << " s, AEW: " << std::fixed << std::setprecision (2 ) << std::setw (4 ) << avg_edge_weight << " , " << (connected ? " " : " not" ) << " connected, " << (valid_weights ? " valid" : " invalid" ) << " \n " ;
1479
+ std::cout << std::setw (7 ) << status.step << " step, " << std::setw (5 ) << duration << " s, AEW: " << std::fixed << std::setprecision (2 ) << std::setw (4 ) << avg_edge_weight << " , " << (connected ? " " : " not" ) << " connected, " << (valid_weights ? " valid" : " invalid" ) << " \n " ;
1480
1480
start = std::chrono::steady_clock::now ();
1481
1481
}
1482
1482
0 commit comments