OmniSciDB  95562058bd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HashJoinRuntime.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 MapD Technologies, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  * @file HashJoinRuntime.h
19  * @author Alex Suhan <alex@mapd.com>
20  *
21  * Copyright (c) 2015 MapD Technologies, Inc. All rights reserved.
22  */
23 
24 #ifndef QUERYENGINE_HASHJOINRUNTIME_H
25 #define QUERYENGINE_HASHJOINRUNTIME_H
26 
27 #include <cstddef>
28 #include <cstdint>
29 #include <vector>
30 #include "../../Shared/SqlTypesLayout.h"
31 #include "../../Shared/sqltypes.h"
32 
33 #ifdef __CUDACC__
34 #include "../DecodersImpl.h"
35 #else
36 #include "../RuntimeFunctions.h"
37 #endif
38 #include "../../Shared/funcannotations.h"
39 
40 struct GenericKeyHandler;
41 struct OverlapsKeyHandler;
42 
43 struct HashEntryInfo {
44  alignas(sizeof(int64_t)) size_t hash_entry_count;
45  alignas(sizeof(int64_t)) int64_t bucket_normalization;
46 
47  inline size_t getNormalizedHashEntryCount() const {
49  auto modulo_res = hash_entry_count % static_cast<size_t>(bucket_normalization);
50  auto entry_count = hash_entry_count / static_cast<size_t>(bucket_normalization);
51  if (modulo_res) {
52  return entry_count + 1;
53  }
54  return entry_count;
55  }
56 
57  bool operator!() const { return !(this->getNormalizedHashEntryCount()); }
58 };
59 
61 
62 void init_hash_join_buff(int32_t* buff,
63  const int64_t entry_count,
64  const int32_t invalid_slot_val,
65  const int32_t cpu_thread_idx,
66  const int32_t cpu_thread_count);
67 
68 void init_hash_join_buff_on_device(int32_t* buff,
69  const int64_t entry_count,
70  const int32_t invalid_slot_val,
71  const size_t block_size_x,
72  const size_t grid_size_x);
73 
74 void init_baseline_hash_join_buff_32(int8_t* hash_join_buff,
75  const int64_t entry_count,
76  const size_t key_component_count,
77  const bool with_val_slot,
78  const int32_t invalid_slot_val,
79  const int32_t cpu_thread_idx,
80  const int32_t cpu_thread_count);
81 
82 void init_baseline_hash_join_buff_64(int8_t* hash_join_buff,
83  const int64_t entry_count,
84  const size_t key_component_count,
85  const bool with_val_slot,
86  const int32_t invalid_slot_val,
87  const int32_t cpu_thread_idx,
88  const int32_t cpu_thread_count);
89 
90 void init_baseline_hash_join_buff_on_device_32(int8_t* hash_join_buff,
91  const int64_t entry_count,
92  const size_t key_component_count,
93  const bool with_val_slot,
94  const int32_t invalid_slot_val,
95  const size_t block_size_x,
96  const size_t grid_size_x);
97 
98 void init_baseline_hash_join_buff_on_device_64(int8_t* hash_join_buff,
99  const int64_t entry_count,
100  const size_t key_component_count,
101  const bool with_val_slot,
102  const int32_t invalid_slot_val,
103  const size_t block_size_x,
104  const size_t grid_size_x);
105 
106 enum ColumnType { SmallDate = 0, Signed = 1, Unsigned = 2, Double = 3 };
107 
108 struct JoinChunk {
109  const int8_t*
110  col_buff; // actually from AbstractBuffer::getMemoryPtr() via Chunk_NS::Chunk
111  size_t num_elems;
112 };
113 
114 struct JoinColumn {
115  const int8_t*
116  col_chunks_buff; // actually a JoinChunk* from ColumnFetcher::makeJoinColumn()
118  size_t num_chunks;
119  size_t num_elems;
120  size_t elem_sz;
121 };
122 
124  const size_t elem_sz;
125  const int64_t min_val;
126  const int64_t max_val;
127  const int64_t null_val;
128  const bool uses_bw_eq;
129  const int64_t translated_null_val;
131 };
132 
134  if (ti.is_date_in_days()) {
135  return SmallDate;
136  } else {
137  return is_unsigned_type(ti) ? Unsigned : Signed;
138  }
139 }
140 
142  std::vector<double> bucket_sizes_for_dimension;
143  bool is_double; // TODO(adb): assume float otherwise (?)
144 };
145 
146 int fill_hash_join_buff_bucketized(int32_t* buff,
147  const int32_t invalid_slot_val,
148  const JoinColumn join_column,
149  const JoinColumnTypeInfo type_info,
150  const void* sd_inner,
151  const void* sd_outer,
152  const int32_t cpu_thread_idx,
153  const int32_t cpu_thread_count,
154  const int64_t bucket_normalization);
155 
156 int fill_hash_join_buff(int32_t* buff,
157  const int32_t invalid_slot_val,
158  const JoinColumn join_column,
159  const JoinColumnTypeInfo type_info,
160  const void* sd_inner,
161  const void* sd_outer,
162  const int32_t cpu_thread_idx,
163  const int32_t cpu_thread_count);
164 
165 void fill_hash_join_buff_on_device(int32_t* buff,
166  const int32_t invalid_slot_val,
167  int* dev_err_buff,
168  const JoinColumn join_column,
169  const JoinColumnTypeInfo type_info,
170  const size_t block_size_x,
171  const size_t grid_size_x);
173  const int32_t invalid_slot_val,
174  int* dev_err_buff,
175  const JoinColumn join_column,
176  const JoinColumnTypeInfo type_info,
177  const size_t block_size_x,
178  const size_t grid_size_x,
179  const int64_t bucket_normalization);
180 
181 struct ShardInfo {
182  const size_t shard;
183  const size_t entry_count_per_shard;
184  const size_t num_shards;
185  const int device_count;
186 };
187 
188 void fill_hash_join_buff_on_device_sharded(int32_t* buff,
189  const int32_t invalid_slot_val,
190  int* dev_err_buff,
191  const JoinColumn join_column,
192  const JoinColumnTypeInfo type_info,
193  const ShardInfo shard_info,
194  const size_t block_size_x,
195  const size_t grid_size_x);
196 
198  const int32_t invalid_slot_val,
199  int* dev_err_buff,
200  const JoinColumn join_column,
201  const JoinColumnTypeInfo type_info,
202  const ShardInfo shard_info,
203  const size_t block_size_x,
204  const size_t grid_size_x,
205  const int64_t bucket_normalization);
206 
207 void fill_one_to_many_hash_table(int32_t* buff,
208  const HashEntryInfo hash_entry_info,
209  const int32_t invalid_slot_val,
210  const JoinColumn& join_column,
211  const JoinColumnTypeInfo& type_info,
212  const void* sd_inner_proxy,
213  const void* sd_outer_proxy,
214  const unsigned cpu_thread_count);
215 
216 void fill_one_to_many_hash_table_bucketized(int32_t* buff,
217  const HashEntryInfo hash_entry_info,
218  const int32_t invalid_slot_val,
219  const JoinColumn& join_column,
220  const JoinColumnTypeInfo& type_info,
221  const void* sd_inner_proxy,
222  const void* sd_outer_proxy,
223  const unsigned cpu_thread_count);
224 
226  const HashEntryInfo hash_entry_info,
227  const int32_t invalid_slot_val,
228  const JoinColumn& join_column,
229  const JoinColumnTypeInfo& type_info,
230  const ShardInfo& shard_info,
231  const void* sd_inner_proxy,
232  const void* sd_outer_proxy,
233  const unsigned cpu_thread_count);
234 
235 void fill_one_to_many_hash_table_on_device(int32_t* buff,
236  const HashEntryInfo hash_entry_info,
237  const int32_t invalid_slot_val,
238  const JoinColumn& join_column,
239  const JoinColumnTypeInfo& type_info,
240  const size_t block_size_x,
241  const size_t grid_size_x);
242 
244  const HashEntryInfo hash_entry_info,
245  const int32_t invalid_slot_val,
246  const JoinColumn& join_column,
247  const JoinColumnTypeInfo& type_info,
248  const size_t block_size_x,
249  const size_t grid_size_x);
250 
252  const HashEntryInfo hash_entry_info,
253  const int32_t invalid_slot_val,
254  const JoinColumn& join_column,
255  const JoinColumnTypeInfo& type_info,
256  const ShardInfo& shard_info,
257  const size_t block_size_x,
258  const size_t grid_size_x);
259 
260 int fill_baseline_hash_join_buff_32(int8_t* hash_buff,
261  const int64_t entry_count,
262  const int32_t invalid_slot_val,
263  const size_t key_component_count,
264  const bool with_val_slot,
265  const GenericKeyHandler* key_handler,
266  const int64_t num_elems,
267  const int32_t cpu_thread_idx,
268  const int32_t cpu_thread_count);
269 
270 int overlaps_fill_baseline_hash_join_buff_32(int8_t* hash_buff,
271  const int64_t entry_count,
272  const int32_t invalid_slot_val,
273  const size_t key_component_count,
274  const bool with_val_slot,
275  const OverlapsKeyHandler* key_handler,
276  const int64_t num_elems,
277  const int32_t cpu_thread_idx,
278  const int32_t cpu_thread_count);
279 
280 int fill_baseline_hash_join_buff_64(int8_t* hash_buff,
281  const int64_t entry_count,
282  const int32_t invalid_slot_val,
283  const size_t key_component_count,
284  const bool with_val_slot,
285  const GenericKeyHandler* key_handler,
286  const int64_t num_elems,
287  const int32_t cpu_thread_idx,
288  const int32_t cpu_thread_count);
289 
290 int overlaps_fill_baseline_hash_join_buff_64(int8_t* hash_buff,
291  const int64_t entry_count,
292  const int32_t invalid_slot_val,
293  const size_t key_component_count,
294  const bool with_val_slot,
295  const OverlapsKeyHandler* key_handler,
296  const int64_t num_elems,
297  const int32_t cpu_thread_idx,
298  const int32_t cpu_thread_count);
299 
300 void fill_baseline_hash_join_buff_on_device_32(int8_t* hash_buff,
301  const int64_t entry_count,
302  const int32_t invalid_slot_val,
303  const size_t key_component_count,
304  const bool with_val_slot,
305  int* dev_err_buff,
306  const GenericKeyHandler* key_handler,
307  const int64_t num_elems,
308  const size_t block_size_x,
309  const size_t grid_size_x);
310 
311 void fill_baseline_hash_join_buff_on_device_64(int8_t* hash_buff,
312  const int64_t entry_count,
313  const int32_t invalid_slot_val,
314  const size_t key_component_count,
315  const bool with_val_slot,
316  int* dev_err_buff,
317  const GenericKeyHandler* key_handler,
318  const int64_t num_elems,
319  const size_t block_size_x,
320  const size_t grid_size_x);
321 
323  int8_t* hash_buff,
324  const int64_t entry_count,
325  const int32_t invalid_slot_val,
326  const size_t key_component_count,
327  const bool with_val_slot,
328  int* dev_err_buff,
329  const OverlapsKeyHandler* key_handler,
330  const int64_t num_elems,
331  const size_t block_size_x,
332  const size_t grid_size_x);
333 
335  int32_t* buff,
336  const int32_t* composite_key_dict,
337  const int64_t hash_entry_count,
338  const int32_t invalid_slot_val,
339  const size_t key_component_count,
340  const std::vector<JoinColumn>& join_column_per_key,
341  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
342  const std::vector<JoinBucketInfo>& join_bucket_info,
343  const std::vector<const void*>& sd_inner_proxy_per_key,
344  const std::vector<const void*>& sd_outer_proxy_per_key,
345  const int32_t cpu_thread_count);
346 
348  int32_t* buff,
349  const int64_t* composite_key_dict,
350  const int64_t hash_entry_count,
351  const int32_t invalid_slot_val,
352  const size_t key_component_count,
353  const std::vector<JoinColumn>& join_column_per_key,
354  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
355  const std::vector<JoinBucketInfo>& join_bucket_info,
356  const std::vector<const void*>& sd_inner_proxy_per_key,
357  const std::vector<const void*>& sd_outer_proxy_per_key,
358  const int32_t cpu_thread_count);
359 
361  int32_t* buff,
362  const int32_t* composite_key_dict,
363  const int64_t hash_entry_count,
364  const int32_t invalid_slot_val,
365  const size_t key_component_count,
366  const GenericKeyHandler* key_handler,
367  const int64_t num_elems,
368  const size_t block_size_x,
369  const size_t grid_size_x);
370 
372  int32_t* buff,
373  const int64_t* composite_key_dict,
374  const int64_t hash_entry_count,
375  const int32_t invalid_slot_val,
376  const GenericKeyHandler* key_handler,
377  const int64_t num_elems,
378  const size_t block_size_x,
379  const size_t grid_size_x);
380 
382  int32_t* buff,
383  const int64_t* composite_key_dict,
384  const int64_t hash_entry_count,
385  const int32_t invalid_slot_val,
386  const OverlapsKeyHandler* key_handler,
387  const int64_t num_elems,
388  const size_t block_size_x,
389  const size_t grid_size_x);
390 
391 void approximate_distinct_tuples(uint8_t* hll_buffer_all_cpus,
392  const uint32_t b,
393  const size_t padded_size_bytes,
394  const std::vector<JoinColumn>& join_column_per_key,
395  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
396  const int thread_count);
397 
399  uint8_t* hll_buffer_all_cpus,
400  std::vector<int32_t>& row_counts,
401  const uint32_t b,
402  const size_t padded_size_bytes,
403  const std::vector<JoinColumn>& join_column_per_key,
404  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
405  const std::vector<JoinBucketInfo>& join_buckets_per_key,
406  const int thread_count);
407 
408 void approximate_distinct_tuples_on_device(uint8_t* hll_buffer,
409  const uint32_t b,
410  const GenericKeyHandler* key_handler,
411  const int64_t num_elems,
412  const size_t block_size_x,
413  const size_t grid_size_x);
414 
415 void approximate_distinct_tuples_on_device_overlaps(uint8_t* hll_buffer,
416  const uint32_t b,
417  int32_t* row_counts_buffer,
418  const OverlapsKeyHandler* key_handler,
419  const int64_t num_elems,
420  const size_t block_size_x,
421  const size_t grid_size_x);
422 
423 void compute_bucket_sizes(std::vector<double>& bucket_sizes_for_dimension,
424  const JoinColumn& join_column,
425  const JoinColumnTypeInfo& type_info,
426  const double bucket_size_threshold,
427  const int thread_count);
428 
429 void compute_bucket_sizes_on_device(double* bucket_sizes_buffer,
430  const JoinColumn* join_column,
431  const JoinColumnTypeInfo* type_info,
432  const double bucket_sz_threshold,
433  const size_t block_size_x,
434  const size_t grid_size_x);
435 
436 #endif // QUERYENGINE_HASHJOINRUNTIME_H
const ColumnType column_type
const size_t num_shards
void fill_one_to_many_hash_table_on_device(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const size_t block_size_x, const size_t grid_size_x)
void fill_one_to_many_baseline_hash_table_on_device_32(int32_t *buff, const int32_t *composite_key_dict, const int64_t hash_entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const GenericKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
void compute_bucket_sizes(std::vector< double > &bucket_sizes_for_dimension, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const double bucket_size_threshold, const int thread_count)
void init_baseline_hash_join_buff_on_device_64(int8_t *hash_join_buff, const int64_t entry_count, const size_t key_component_count, const bool with_val_slot, const int32_t invalid_slot_val, const size_t block_size_x, const size_t grid_size_x)
void init_baseline_hash_join_buff_32(int8_t *hash_join_buff, const int64_t entry_count, const size_t key_component_count, const bool with_val_slot, const int32_t invalid_slot_val, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
void fill_one_to_many_baseline_hash_table_64(int32_t *buff, const int64_t *composite_key_dict, const int64_t hash_entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const std::vector< JoinColumn > &join_column_per_key, const std::vector< JoinColumnTypeInfo > &type_info_per_key, const std::vector< JoinBucketInfo > &join_bucket_info, const std::vector< const void * > &sd_inner_proxy_per_key, const std::vector< const void * > &sd_outer_proxy_per_key, const int32_t cpu_thread_count)
void fill_baseline_hash_join_buff_on_device_64(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, int *dev_err_buff, const GenericKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
size_t num_elems
void fill_one_to_many_hash_table_on_device_sharded(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const ShardInfo &shard_info, const size_t block_size_x, const size_t grid_size_x)
void fill_hash_join_buff_on_device(int32_t *buff, const int32_t invalid_slot_val, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const size_t block_size_x, const size_t grid_size_x)
const size_t elem_sz
const int device_count
void compute_bucket_sizes_on_device(double *bucket_sizes_buffer, const JoinColumn *join_column, const JoinColumnTypeInfo *type_info, const double bucket_sz_threshold, const size_t block_size_x, const size_t grid_size_x)
const int64_t null_val
void init_baseline_hash_join_buff_64(int8_t *hash_join_buff, const int64_t entry_count, const size_t key_component_count, const bool with_val_slot, const int32_t invalid_slot_val, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
const int8_t * col_buff
#define CHECK_GT(x, y)
Definition: Logger.h:209
const size_t entry_count_per_shard
const int64_t translated_null_val
int fill_baseline_hash_join_buff_64(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, const GenericKeyHandler *key_handler, const int64_t num_elems, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
void fill_one_to_many_hash_table_bucketized(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const void *sd_inner_proxy, const void *sd_outer_proxy, const unsigned cpu_thread_count)
void approximate_distinct_tuples(uint8_t *hll_buffer_all_cpus, const uint32_t b, const size_t padded_size_bytes, const std::vector< JoinColumn > &join_column_per_key, const std::vector< JoinColumnTypeInfo > &type_info_per_key, const int thread_count)
void fill_hash_join_buff_on_device_sharded(int32_t *buff, const int32_t invalid_slot_val, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const ShardInfo shard_info, const size_t block_size_x, const size_t grid_size_x)
size_t col_chunks_buff_sz
void fill_one_to_many_hash_table_on_device_bucketized(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const size_t block_size_x, const size_t grid_size_x)
int64_t bucket_normalization
void fill_baseline_hash_join_buff_on_device_32(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, int *dev_err_buff, const GenericKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
std::vector< double > bucket_sizes_for_dimension
const size_t shard
size_t hash_entry_count
const int8_t * col_chunks_buff
void overlaps_fill_one_to_many_baseline_hash_table_on_device_64(int32_t *buff, const int64_t *composite_key_dict, const int64_t hash_entry_count, const int32_t invalid_slot_val, const OverlapsKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
const int64_t max_val
void fill_one_to_many_baseline_hash_table_32(int32_t *buff, const int32_t *composite_key_dict, const int64_t hash_entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const std::vector< JoinColumn > &join_column_per_key, const std::vector< JoinColumnTypeInfo > &type_info_per_key, const std::vector< JoinBucketInfo > &join_bucket_info, const std::vector< const void * > &sd_inner_proxy_per_key, const std::vector< const void * > &sd_outer_proxy_per_key, const int32_t cpu_thread_count)
ColumnType
void approximate_distinct_tuples_overlaps(uint8_t *hll_buffer_all_cpus, std::vector< int32_t > &row_counts, const uint32_t b, const size_t padded_size_bytes, const std::vector< JoinColumn > &join_column_per_key, const std::vector< JoinColumnTypeInfo > &type_info_per_key, const std::vector< JoinBucketInfo > &join_buckets_per_key, const int thread_count)
void fill_one_to_many_hash_table(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const void *sd_inner_proxy, const void *sd_outer_proxy, const unsigned cpu_thread_count)
bool is_date_in_days() const
Definition: sqltypes.h:632
void approximate_distinct_tuples_on_device(uint8_t *hll_buffer, const uint32_t b, const GenericKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
int overlaps_fill_baseline_hash_join_buff_64(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, const OverlapsKeyHandler *key_handler, const int64_t num_elems, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
bool operator!() const
DEVICE void SUFFIX() init_hash_join_buff(int32_t *groups_buffer, const int64_t hash_entry_count, const int32_t invalid_slot_val, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
const int64_t min_val
DEVICE int SUFFIX() fill_hash_join_buff(int32_t *buff, const int32_t invalid_slot_val, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const void *sd_inner_proxy, const void *sd_outer_proxy, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
int overlaps_fill_baseline_hash_join_buff_32(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, const OverlapsKeyHandler *key_handler, const int64_t num_elems, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
size_t getNormalizedHashEntryCount() const
void init_baseline_hash_join_buff_on_device_32(int8_t *hash_join_buff, const int64_t entry_count, const size_t key_component_count, const bool with_val_slot, const int32_t invalid_slot_val, const size_t block_size_x, const size_t grid_size_x)
ColumnType get_join_column_type_kind(const SQLTypeInfo &ti)
size_t num_chunks
void init_hash_join_buff_on_device(int32_t *buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t block_size_x, const size_t grid_size_x)
void approximate_distinct_tuples_on_device_overlaps(uint8_t *hll_buffer, const uint32_t b, int32_t *row_counts_buffer, const OverlapsKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
void fill_one_to_many_hash_table_sharded_bucketized(int32_t *buff, const HashEntryInfo hash_entry_info, const int32_t invalid_slot_val, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const ShardInfo &shard_info, const void *sd_inner_proxy, const void *sd_outer_proxy, const unsigned cpu_thread_count)
DEVICE int SUFFIX() fill_hash_join_buff_bucketized(int32_t *buff, const int32_t invalid_slot_val, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const void *sd_inner_proxy, const void *sd_outer_proxy, const int32_t cpu_thread_idx, const int32_t cpu_thread_count, const int64_t bucket_normalization)
size_t num_elems
const size_t g_maximum_conditions_to_coalesce
void fill_hash_join_buff_on_device_sharded_bucketized(int32_t *buff, const int32_t invalid_slot_val, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const ShardInfo shard_info, const size_t block_size_x, const size_t grid_size_x, const int64_t bucket_normalization)
void fill_hash_join_buff_on_device_bucketized(int32_t *buff, const int32_t invalid_slot_val, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const size_t block_size_x, const size_t grid_size_x, const int64_t bucket_normalization)
int fill_baseline_hash_join_buff_32(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, const GenericKeyHandler *key_handler, const int64_t num_elems, const int32_t cpu_thread_idx, const int32_t cpu_thread_count)
void overlaps_fill_baseline_hash_join_buff_on_device_64(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const size_t key_component_count, const bool with_val_slot, int *dev_err_buff, const OverlapsKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)
bool is_unsigned_type(const SQLTypeInfo &ti)
void fill_one_to_many_baseline_hash_table_on_device_64(int32_t *buff, const int64_t *composite_key_dict, const int64_t hash_entry_count, const int32_t invalid_slot_val, const GenericKeyHandler *key_handler, const int64_t num_elems, const size_t block_size_x, const size_t grid_size_x)