@@ -21,20 +21,20 @@ namespace cuco {
2121namespace experimental {
2222
2323template <typename label_type>
24- trie<label_type>::trie()
25- : levels_{2 },
26- d_levels_ptr_{nullptr },
27- num_levels_{2 },
28- n_keys_{0 },
29- n_nodes_{1 },
24+ constexpr trie<label_type>::trie()
25+ : num_keys_{0 },
26+ num_nodes_{1 },
3027 last_key_{},
28+ num_levels_{2 },
29+ levels_{2 },
30+ d_levels_ptr_{nullptr },
3131 device_ptr_{nullptr }
3232{
33- levels_[0 ].louds .append (0 );
34- levels_[0 ].louds .append (1 );
35- levels_[1 ].louds .append (1 );
36- levels_[0 ].outs .append (0 );
37- levels_[0 ].labels .push_back (root_label_);
33+ levels_[0 ].louds_ .append (0 );
34+ levels_[0 ].louds_ .append (1 );
35+ levels_[1 ].louds_ .append (1 );
36+ levels_[0 ].outs_ .append (0 );
37+ levels_[0 ].labels_ .push_back (root_label_);
3838}
3939
4040template <typename label_type>
@@ -45,15 +45,15 @@ trie<label_type>::~trie() noexcept(false)
4545}
4646
4747template <typename label_type>
48- void trie<label_type>::insert(const std::vector<label_type>& key)
48+ void trie<label_type>::insert(const std::vector<label_type>& key) noexcept
4949{
50- if (key == last_key_) { return ; } // Ignore duplicate keys
51- assert (n_keys_ == 0 || key > last_key_); // Keys are expected to be inserted in sorted order
50+ if (key == last_key_) { return ; } // Ignore duplicate keys
51+ assert (num_keys_ == 0 || key > last_key_); // Keys are expected to be inserted in sorted order
5252
5353 if (key.empty ()) {
54- levels_[0 ].outs .set (0 , 1 );
55- ++levels_[1 ].offset ;
56- ++n_keys_ ;
54+ levels_[0 ].outs_ .set (0 , 1 );
55+ ++levels_[1 ].offset_ ;
56+ ++num_keys_ ;
5757 return ;
5858 }
5959
@@ -66,37 +66,37 @@ void trie<label_type>::insert(const std::vector<label_type>& key)
6666 auto & level = levels_[pos + 1 ];
6767 auto label = key[pos];
6868
69- if ((pos == last_key_.size ()) || (label != level.labels .back ())) {
70- level.louds .set_last (0 );
71- level.louds .append (1 );
72- level.outs .append (0 );
73- level.labels .push_back (label);
74- ++n_nodes_ ;
69+ if ((pos == last_key_.size ()) || (label != level.labels_ .back ())) {
70+ level.louds_ .set_last (0 );
71+ level.louds_ .append (1 );
72+ level.outs_ .append (0 );
73+ level.labels_ .push_back (label);
74+ ++num_nodes_ ;
7575 break ;
7676 }
7777 }
7878
7979 // Process remaining labels after divergence point from last_key
80- // Each such label will create a new edge and node pair in trie
80+ // Each such label will create a new edge and node pair
8181 for (++pos; pos < key.size (); ++pos) {
8282 auto & level = levels_[pos + 1 ];
83- level.louds .append (0 );
84- level.louds .append (1 );
85- level.outs .append (0 );
86- level.labels .push_back (key[pos]);
87- ++n_nodes_ ;
83+ level.louds_ .append (0 );
84+ level.louds_ .append (1 );
85+ level.outs_ .append (0 );
86+ level.labels_ .push_back (key[pos]);
87+ ++num_nodes_ ;
8888 }
8989
90- levels_[key.size () + 1 ].louds .append (1 ); // Mark end of current key
91- ++levels_[key.size () + 1 ].offset ;
92- levels_[key.size ()].outs .set_last (1 ); // Set terminal bit indicating valid path
90+ levels_[key.size () + 1 ].louds_ .append (1 ); // Mark end of current key
91+ ++levels_[key.size () + 1 ].offset_ ;
92+ levels_[key.size ()].outs_ .set_last (1 ); // Set terminal bit indicating valid path
9393
94- ++n_keys_ ;
94+ ++num_keys_ ;
9595 last_key_ = key;
9696}
9797
9898// Helper to move vector from host to device
99- // Host vector is clear to avoid duplication. Device pointer is returned
99+ // Host vector is cleared to avoid duplication. Device pointer is returned
100100template <typename T>
101101T* move_vector_to_device (std::vector<T>& host_vector, thrust::device_vector<T>& device_vector)
102102{
@@ -106,7 +106,7 @@ T* move_vector_to_device(std::vector<T>& host_vector, thrust::device_vector<T>&
106106}
107107
108108template <typename label_type>
109- void trie<label_type>::build()
109+ void trie<label_type>::build() noexcept ( false )
110110{
111111 // Perform build level-by-level for all levels, followed by a deep-copy from host to device
112112
@@ -115,17 +115,17 @@ void trie<label_type>::build()
115115 size_type offset = 0 ;
116116
117117 for (auto & level : levels_) {
118- level.louds .build ();
119- louds_refs.push_back (level.louds .ref (bv_read));
118+ level.louds_ .build ();
119+ louds_refs.push_back (level.louds_ .ref (bv_read));
120120
121- level.outs .build ();
122- outs_refs.push_back (level.outs .ref (bv_read));
121+ level.outs_ .build ();
122+ outs_refs.push_back (level.outs_ .ref (bv_read));
123123
124124 // Move labels to device
125- level.d_labels_ptr = move_vector_to_device (level.labels , level.d_labels );
125+ level.d_labels_ptr_ = move_vector_to_device (level.labels_ , level.d_labels_ );
126126
127- offset += level.offset ;
128- level.offset = offset;
127+ offset += level.offset_ ;
128+ level.offset_ = offset;
129129 }
130130
131131 // Move bitvector refs to device
@@ -150,7 +150,7 @@ void trie<label_type>::lookup(KeyIt keys_begin,
150150 OffsetIt offsets_begin,
151151 OffsetIt offsets_end,
152152 OutputIt outputs_begin,
153- cuda_stream_ref stream) const
153+ cuda_stream_ref stream) const noexcept
154154{
155155 auto num_keys = cuco::detail::distance (offsets_begin, offsets_end) - 1 ;
156156 if (num_keys == 0 ) { return ; }
@@ -166,14 +166,14 @@ void trie<label_type>::lookup(KeyIt keys_begin,
166166
167167template <typename TrieRef, typename KeyIt, typename OffsetIt, typename OutputIt>
168168__global__ void trie_lookup_kernel (
169- TrieRef ref, KeyIt keys, OffsetIt offsets, OutputIt outputs, uint64_t num_keys)
169+ TrieRef ref, KeyIt keys, OffsetIt offsets, OutputIt outputs, size_t num_keys)
170170{
171- size_t loop_stride = gridDim.x * blockDim.x ;
172- size_t key_id = blockDim.x * blockIdx.x + threadIdx.x ;
171+ auto loop_stride = gridDim.x * blockDim.x ;
172+ auto key_id = blockDim.x * blockIdx.x + threadIdx.x ;
173173
174174 while (key_id < num_keys) {
175175 auto key_start_pos = keys + offsets[key_id];
176- size_t key_length = offsets[key_id + 1 ] - offsets[key_id];
176+ auto key_length = offsets[key_id + 1 ] - offsets[key_id];
177177
178178 outputs[key_id] = ref.lookup_key (key_start_pos, key_length);
179179 key_id += loop_stride;
@@ -189,7 +189,8 @@ auto trie<label_type>::ref(Operators...) const noexcept
189189}
190190
191191template <typename label_type>
192- trie<label_type>::level::level() : louds{}, outs{}, labels{}, d_labels_ptr{nullptr }, offset{0 }
192+ trie<label_type>::level::level()
193+ : louds_{}, outs_{}, labels_{}, d_labels_{}, d_labels_ptr_{nullptr }, offset_{0 }
193194{
194195}
195196
0 commit comments