Skip to content

Commit 22d4edf

Browse files
authored
Merge pull request #293 from smehringer/minor_things
[MISC] Reduce complexity of insert_into_ibf.
2 parents f793d92 + 5b58660 commit 22d4edf

File tree

8 files changed

+73
-38
lines changed

8 files changed

+73
-38
lines changed

include/raptor/build/hibf/insert_into_ibf.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,11 @@ namespace raptor::hibf
2323
{
2424

2525
// automatically does naive splitting if number_of_bins > 1
26-
void insert_into_ibf(robin_hood::unordered_flat_set<size_t> & parent_kmers,
27-
robin_hood::unordered_flat_set<size_t> const & kmers,
26+
void insert_into_ibf(robin_hood::unordered_flat_set<size_t> const & kmers,
2827
size_t const number_of_bins,
2928
size_t const bin_index,
3029
seqan3::interleaved_bloom_filter<> & ibf,
31-
bool is_root,
32-
timer<concurrent::yes> & fill_ibf_timer,
33-
timer<concurrent::yes> & merge_kmers_timer);
30+
timer<concurrent::yes> & fill_ibf_timer);
3431

3532
void insert_into_ibf(build_arguments const & arguments,
3633
chopper_pack_record const & record,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// --------------------------------------------------------------------------------------------------
2+
// Copyright (c) 2006-2023, Knut Reinert & Freie Universität Berlin
3+
// Copyright (c) 2016-2023, Knut Reinert & MPI für molekulare Genetik
4+
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5+
// shipped with this file and also available at: https://github.com/seqan/raptor/blob/main/LICENSE.md
6+
// --------------------------------------------------------------------------------------------------
7+
8+
/*!\file
9+
* \brief Provides raptor::hibf::update_parent_kmers.
10+
* \author Svenja Mehringer <svenja.mehringer AT fu-berlin.de>
11+
*/
12+
13+
#pragma once
14+
15+
#include <robin_hood.h>
16+
17+
#include <raptor/argument_parsing/timer.hpp>
18+
19+
namespace raptor::hibf
20+
{
21+
22+
void update_parent_kmers(robin_hood::unordered_flat_set<size_t> & parent_kmers,
23+
robin_hood::unordered_flat_set<size_t> const & kmers,
24+
timer<concurrent::yes> & merge_kmers_timer);
25+
26+
} // namespace raptor::hibf

src/build/hibf/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ if (NOT TARGET raptor_build_hibf)
1313
parse_chopper_pack_header.cpp
1414
parse_chopper_pack_line.cpp
1515
read_chopper_pack_file.cpp
16+
update_parent_kmers.cpp
1617
update_user_bins.cpp
1718
)
1819

src/build/hibf/construct_ibf.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <raptor/build/hibf/bin_size_in_bits.hpp>
1616
#include <raptor/build/hibf/construct_ibf.hpp>
1717
#include <raptor/build/hibf/insert_into_ibf.hpp>
18+
#include <raptor/build/hibf/update_parent_kmers.hpp>
1819

1920
namespace raptor::hibf
2021
{
@@ -41,14 +42,9 @@ seqan3::interleaved_bloom_filter<> construct_ibf(robin_hood::unordered_flat_set<
4142
local_index_allocation_timer.stop();
4243
arguments.index_allocation_timer += local_index_allocation_timer;
4344

44-
insert_into_ibf(parent_kmers,
45-
kmers,
46-
number_of_bins,
47-
node_data.max_bin_index,
48-
ibf,
49-
is_root,
50-
arguments.fill_ibf_timer,
51-
arguments.merge_kmers_timer);
45+
insert_into_ibf(kmers, number_of_bins, node_data.max_bin_index, ibf, arguments.fill_ibf_timer);
46+
if (!is_root)
47+
update_parent_kmers(parent_kmers, kmers, arguments.merge_kmers_timer);
5248

5349
return ibf;
5450
}

src/build/hibf/hierarchical_build.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <raptor/build/hibf/hierarchical_build.hpp>
1818
#include <raptor/build/hibf/insert_into_ibf.hpp>
1919
#include <raptor/build/hibf/loop_over_children.hpp>
20+
#include <raptor/build/hibf/update_parent_kmers.hpp>
2021
#include <raptor/build/hibf/update_user_bins.hpp>
2122

2223
namespace raptor::hibf
@@ -86,14 +87,13 @@ size_t hierarchical_build(robin_hood::unordered_flat_set<size_t> & parent_kmers,
8687
else
8788
{
8889
compute_kmers(kmers, arguments, record);
89-
insert_into_ibf(parent_kmers,
90-
kmers,
90+
insert_into_ibf(kmers,
9191
record.number_of_bins.back(),
9292
record.bin_indices.back(),
9393
ibf,
94-
is_root,
95-
arguments.fill_ibf_timer,
96-
arguments.merge_kmers_timer);
94+
arguments.fill_ibf_timer);
95+
if (!is_root)
96+
update_parent_kmers(parent_kmers, kmers, arguments.merge_kmers_timer);
9797
}
9898

9999
update_user_bins(data, filename_indices, record);

src/build/hibf/insert_into_ibf.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,11 @@ namespace raptor::hibf
2020
{
2121

2222
// automatically does naive splitting if number_of_bins > 1
23-
void insert_into_ibf(robin_hood::unordered_flat_set<size_t> & parent_kmers,
24-
robin_hood::unordered_flat_set<size_t> const & kmers,
23+
void insert_into_ibf(robin_hood::unordered_flat_set<size_t> const & kmers,
2524
size_t const number_of_bins,
2625
size_t const bin_index,
2726
seqan3::interleaved_bloom_filter<> & ibf,
28-
bool is_root,
29-
timer<concurrent::yes> & fill_ibf_timer,
30-
timer<concurrent::yes> & merge_kmers_timer)
27+
timer<concurrent::yes> & fill_ibf_timer)
3128
{
3229
size_t const chunk_size = kmers.size() / number_of_bins + 1;
3330
size_t chunk_number{};
@@ -44,13 +41,6 @@ void insert_into_ibf(robin_hood::unordered_flat_set<size_t> & parent_kmers,
4441
}
4542
local_fill_ibf_timer.stop();
4643
fill_ibf_timer += local_fill_ibf_timer;
47-
48-
timer<concurrent::no> local_merge_kmers_timer{};
49-
local_merge_kmers_timer.start();
50-
if (!is_root)
51-
parent_kmers.insert(kmers.begin(), kmers.end());
52-
local_merge_kmers_timer.stop();
53-
merge_kmers_timer += local_merge_kmers_timer;
5444
}
5545

5646
void insert_into_ibf(build_arguments const & arguments,

src/build/hibf/loop_over_children.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <raptor/build/hibf/hierarchical_build.hpp>
1818
#include <raptor/build/hibf/insert_into_ibf.hpp>
1919
#include <raptor/build/hibf/loop_over_children.hpp>
20+
#include <raptor/build/hibf/update_parent_kmers.hpp>
2021

2122
namespace raptor::hibf
2223
{
@@ -55,14 +56,9 @@ void loop_over_children(robin_hood::unordered_flat_set<size_t> & parent_kmers,
5556
size_t const mutex_id{parent_bin_index / 64};
5657
std::lock_guard<std::mutex> guard{local_ibf_mutex[mutex_id]};
5758
ibf_positions[parent_bin_index] = ibf_pos;
58-
insert_into_ibf(parent_kmers,
59-
kmers,
60-
1,
61-
parent_bin_index,
62-
ibf,
63-
is_root,
64-
arguments.fill_ibf_timer,
65-
arguments.merge_kmers_timer);
59+
insert_into_ibf(kmers, 1, parent_bin_index, ibf, arguments.fill_ibf_timer);
60+
if (!is_root)
61+
update_parent_kmers(parent_kmers, kmers, arguments.merge_kmers_timer);
6662
}
6763
}
6864
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// --------------------------------------------------------------------------------------------------
2+
// Copyright (c) 2006-2023, Knut Reinert & Freie Universität Berlin
3+
// Copyright (c) 2016-2023, Knut Reinert & MPI für molekulare Genetik
4+
// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5+
// shipped with this file and also available at: https://github.com/seqan/raptor/blob/main/LICENSE.md
6+
// --------------------------------------------------------------------------------------------------
7+
8+
/*!\file
9+
* \brief Implements raptor::hibf::update_parent_kmers.
10+
* \author Svenja Mehringer <svenja.mehringer AT fu-berlin.de>
11+
*/
12+
13+
#include <raptor/build/hibf/update_parent_kmers.hpp>
14+
15+
namespace raptor::hibf
16+
{
17+
18+
void update_parent_kmers(robin_hood::unordered_flat_set<size_t> & parent_kmers,
19+
robin_hood::unordered_flat_set<size_t> const & kmers,
20+
timer<concurrent::yes> & merge_kmers_timer)
21+
{
22+
timer<concurrent::no> local_merge_kmers_timer{};
23+
local_merge_kmers_timer.start();
24+
parent_kmers.insert(kmers.begin(), kmers.end());
25+
local_merge_kmers_timer.stop();
26+
merge_kmers_timer += local_merge_kmers_timer;
27+
}
28+
29+
} // namespace raptor::hibf

0 commit comments

Comments
 (0)