OmniSciDB  21ac014ffc
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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 
72 void init_baseline_hash_join_buff_32(int8_t* hash_join_buff,
73  const int64_t entry_count,
74  const size_t key_component_count,
75  const bool with_val_slot,
76  const int32_t invalid_slot_val,
77  const int32_t cpu_thread_idx,
78  const int32_t cpu_thread_count);
79 
80 void init_baseline_hash_join_buff_64(int8_t* hash_join_buff,
81  const int64_t entry_count,
82  const size_t key_component_count,
83  const bool with_val_slot,
84  const int32_t invalid_slot_val,
85  const int32_t cpu_thread_idx,
86  const int32_t cpu_thread_count);
87 
88 void init_baseline_hash_join_buff_on_device_32(int8_t* hash_join_buff,
89  const int64_t entry_count,
90  const size_t key_component_count,
91  const bool with_val_slot,
92  const int32_t invalid_slot_val);
93 
94 void init_baseline_hash_join_buff_on_device_64(int8_t* hash_join_buff,
95  const int64_t entry_count,
96  const size_t key_component_count,
97  const bool with_val_slot,
98  const int32_t invalid_slot_val);
99 
100 enum ColumnType { SmallDate = 0, Signed = 1, Unsigned = 2, Double = 3 };
101 
102 struct JoinChunk {
103  const int8_t*
104  col_buff; // actually from AbstractBuffer::getMemoryPtr() via Chunk_NS::Chunk
105  size_t num_elems;
106 };
107 
108 struct JoinColumn {
109  const int8_t*
110  col_chunks_buff; // actually a JoinChunk* from ColumnFetcher::makeJoinColumn()
112  size_t num_chunks;
113  size_t num_elems;
114  size_t elem_sz;
115 };
116 
118  const size_t elem_sz;
119  const int64_t min_val;
120  const int64_t max_val;
121  const int64_t null_val;
122  const bool uses_bw_eq;
123  const int64_t translated_null_val;
125 };
126 
128  if (ti.is_date_in_days()) {
129  return SmallDate;
130  } else {
131  return is_unsigned_type(ti) ? Unsigned : Signed;
132  }
133 }
134 
137  bool is_double; // TODO(adb): assume float otherwise (?)
138 };
139 
140 int fill_hash_join_buff_bucketized(int32_t* buff,
141  const int32_t invalid_slot_val,
142  const bool for_semi_join,
143  const JoinColumn join_column,
144  const JoinColumnTypeInfo type_info,
145  const void* sd_inner,
146  const void* sd_outer,
147  const int32_t cpu_thread_idx,
148  const int32_t cpu_thread_count,
149  const int64_t bucket_normalization);
150 
151 int fill_hash_join_buff(int32_t* buff,
152  const int32_t invalid_slot_val,
153  const bool for_semi_join,
154  const JoinColumn join_column,
155  const JoinColumnTypeInfo type_info,
156  const void* sd_inner,
157  const void* sd_outer,
158  const int32_t cpu_thread_idx,
159  const int32_t cpu_thread_count);
160 
161 void fill_hash_join_buff_on_device(int32_t* buff,
162  const int32_t invalid_slot_val,
163  const bool for_semi_join,
164  int* dev_err_buff,
165  const JoinColumn join_column,
166  const JoinColumnTypeInfo type_info);
167 
169  const int32_t invalid_slot_val,
170  const bool for_semi_join,
171  int* dev_err_buff,
172  const JoinColumn join_column,
173  const JoinColumnTypeInfo type_info,
174  const int64_t bucket_normalization);
175 
176 struct ShardInfo {
177  const size_t shard;
178  const size_t entry_count_per_shard;
179  const size_t num_shards;
180  const int device_count;
181 };
182 
183 void fill_hash_join_buff_on_device_sharded(int32_t* buff,
184  const int32_t invalid_slot_val,
185  const bool for_semi_join,
186  int* dev_err_buff,
187  const JoinColumn join_column,
188  const JoinColumnTypeInfo type_info,
189  const ShardInfo shard_info);
190 
192  const int32_t invalid_slot_val,
193  const bool for_semi_join,
194  int* dev_err_buff,
195  const JoinColumn join_column,
196  const JoinColumnTypeInfo type_info,
197  const ShardInfo shard_info,
198  const int64_t bucket_normalization);
199 
200 void fill_one_to_many_hash_table(int32_t* buff,
201  const HashEntryInfo hash_entry_info,
202  const int32_t invalid_slot_val,
203  const JoinColumn& join_column,
204  const JoinColumnTypeInfo& type_info,
205  const void* sd_inner_proxy,
206  const void* sd_outer_proxy,
207  const unsigned cpu_thread_count);
208 
209 void fill_one_to_many_hash_table_bucketized(int32_t* buff,
210  const HashEntryInfo hash_entry_info,
211  const int32_t invalid_slot_val,
212  const JoinColumn& join_column,
213  const JoinColumnTypeInfo& type_info,
214  const void* sd_inner_proxy,
215  const void* sd_outer_proxy,
216  const unsigned cpu_thread_count);
217 
219  const HashEntryInfo hash_entry_info,
220  const int32_t invalid_slot_val,
221  const JoinColumn& join_column,
222  const JoinColumnTypeInfo& type_info,
223  const ShardInfo& shard_info,
224  const void* sd_inner_proxy,
225  const void* sd_outer_proxy,
226  const unsigned cpu_thread_count);
227 
228 void fill_one_to_many_hash_table_on_device(int32_t* buff,
229  const HashEntryInfo hash_entry_info,
230  const int32_t invalid_slot_val,
231  const JoinColumn& join_column,
232  const JoinColumnTypeInfo& type_info);
233 
235  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 
242  const HashEntryInfo hash_entry_info,
243  const int32_t invalid_slot_val,
244  const JoinColumn& join_column,
245  const JoinColumnTypeInfo& type_info,
246  const ShardInfo& shard_info);
247 
248 int fill_baseline_hash_join_buff_32(int8_t* hash_buff,
249  const int64_t entry_count,
250  const int32_t invalid_slot_val,
251  const bool for_semi_join,
252  const size_t key_component_count,
253  const bool with_val_slot,
254  const GenericKeyHandler* key_handler,
255  const int64_t num_elems,
256  const int32_t cpu_thread_idx,
257  const int32_t cpu_thread_count);
258 
259 int overlaps_fill_baseline_hash_join_buff_32(int8_t* hash_buff,
260  const int64_t entry_count,
261  const int32_t invalid_slot_val,
262  const size_t key_component_count,
263  const bool with_val_slot,
264  const OverlapsKeyHandler* key_handler,
265  const int64_t num_elems,
266  const int32_t cpu_thread_idx,
267  const int32_t cpu_thread_count);
268 
269 int fill_baseline_hash_join_buff_64(int8_t* hash_buff,
270  const int64_t entry_count,
271  const int32_t invalid_slot_val,
272  const bool for_semi_join,
273  const size_t key_component_count,
274  const bool with_val_slot,
275  const GenericKeyHandler* 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 overlaps_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 OverlapsKeyHandler* key_handler,
286  const int64_t num_elems,
287  const int32_t cpu_thread_idx,
288  const int32_t cpu_thread_count);
289 
290 void fill_baseline_hash_join_buff_on_device_32(int8_t* hash_buff,
291  const int64_t entry_count,
292  const int32_t invalid_slot_val,
293  const bool for_semi_join,
294  const size_t key_component_count,
295  const bool with_val_slot,
296  int* dev_err_buff,
297  const GenericKeyHandler* key_handler,
298  const int64_t num_elems);
299 
300 void fill_baseline_hash_join_buff_on_device_64(int8_t* hash_buff,
301  const int64_t entry_count,
302  const int32_t invalid_slot_val,
303  const bool for_semi_join,
304  const size_t key_component_count,
305  const bool with_val_slot,
306  int* dev_err_buff,
307  const GenericKeyHandler* key_handler,
308  const int64_t num_elems);
309 
311  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 OverlapsKeyHandler* key_handler,
318  const int64_t num_elems);
319 
321  int32_t* buff,
322  const int32_t* composite_key_dict,
323  const int64_t hash_entry_count,
324  const int32_t invalid_slot_val,
325  const size_t key_component_count,
326  const std::vector<JoinColumn>& join_column_per_key,
327  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
328  const std::vector<JoinBucketInfo>& join_bucket_info,
329  const std::vector<const void*>& sd_inner_proxy_per_key,
330  const std::vector<const void*>& sd_outer_proxy_per_key,
331  const int32_t cpu_thread_count);
332 
334  int32_t* buff,
335  const int64_t* composite_key_dict,
336  const int64_t hash_entry_count,
337  const int32_t invalid_slot_val,
338  const size_t key_component_count,
339  const std::vector<JoinColumn>& join_column_per_key,
340  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
341  const std::vector<JoinBucketInfo>& join_bucket_info,
342  const std::vector<const void*>& sd_inner_proxy_per_key,
343  const std::vector<const void*>& sd_outer_proxy_per_key,
344  const int32_t cpu_thread_count);
345 
347  int32_t* buff,
348  const int32_t* composite_key_dict,
349  const int64_t hash_entry_count,
350  const int32_t invalid_slot_val,
351  const size_t key_component_count,
352  const GenericKeyHandler* key_handler,
353  const int64_t num_elems);
354 
356  int32_t* buff,
357  const int64_t* composite_key_dict,
358  const int64_t hash_entry_count,
359  const int32_t invalid_slot_val,
360  const GenericKeyHandler* key_handler,
361  const int64_t num_elems);
362 
364  int32_t* buff,
365  const int64_t* composite_key_dict,
366  const int64_t hash_entry_count,
367  const int32_t invalid_slot_val,
368  const OverlapsKeyHandler* key_handler,
369  const int64_t num_elems);
370 
371 void approximate_distinct_tuples(uint8_t* hll_buffer_all_cpus,
372  const uint32_t b,
373  const size_t padded_size_bytes,
374  const std::vector<JoinColumn>& join_column_per_key,
375  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
376  const int thread_count);
377 
379  uint8_t* hll_buffer_all_cpus,
380  std::vector<int32_t>& row_counts,
381  const uint32_t b,
382  const size_t padded_size_bytes,
383  const std::vector<JoinColumn>& join_column_per_key,
384  const std::vector<JoinColumnTypeInfo>& type_info_per_key,
385  const std::vector<JoinBucketInfo>& join_buckets_per_key,
386  const int thread_count);
387 
388 void approximate_distinct_tuples_on_device(uint8_t* hll_buffer,
389  const uint32_t b,
390  const GenericKeyHandler* key_handler,
391  const int64_t num_elems);
392 
393 void approximate_distinct_tuples_on_device_overlaps(uint8_t* hll_buffer,
394  const uint32_t b,
395  int32_t* row_counts_buffer,
396  const OverlapsKeyHandler* key_handler,
397  const int64_t num_elems);
398 
399 void compute_bucket_sizes_on_cpu(std::vector<double>& bucket_sizes_for_dimension,
400  const JoinColumn& join_column,
401  const JoinColumnTypeInfo& type_info,
402  const std::vector<double>& bucket_size_thresholds,
403  const int thread_count);
404 
405 void compute_bucket_sizes_on_device(double* bucket_sizes_buffer,
406  const JoinColumn* join_column,
407  const JoinColumnTypeInfo* type_info,
408  const double* bucket_size_thresholds);
409 
410 #endif // QUERYENGINE_HASHJOINRUNTIME_H
const ColumnType column_type
const size_t num_shards
void fill_hash_join_buff_on_device_bucketized(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const int64_t bucket_normalization)
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)
size_t num_elems
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)
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)
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)
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 bool for_semi_join, const size_t key_component_count, const bool with_val_slot, int *dev_err_buff, const GenericKeyHandler *key_handler, const int64_t num_elems)
void fill_hash_join_buff_on_device_sharded(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const ShardInfo shard_info)
const size_t elem_sz
const int device_count
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)
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)
std::vector< double > inverse_bucket_sizes_for_dimension
const int8_t * col_buff
#define CHECK_GT(x, y)
Definition: Logger.h:218
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 entry_count_per_shard
const int64_t translated_null_val
void compute_bucket_sizes_on_device(double *bucket_sizes_buffer, const JoinColumn *join_column, const JoinColumnTypeInfo *type_info, const double *bucket_size_thresholds)
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)
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)
size_t col_chunks_buff_sz
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)
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)
void compute_bucket_sizes_on_cpu(std::vector< double > &bucket_sizes_for_dimension, const JoinColumn &join_column, const JoinColumnTypeInfo &type_info, const std::vector< double > &bucket_size_thresholds, const int thread_count)
int64_t bucket_normalization
int fill_baseline_hash_join_buff_64(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const bool for_semi_join, 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)
const size_t shard
size_t hash_entry_count
const int8_t * col_chunks_buff
void init_hash_join_buff_on_device(int32_t *buff, const int64_t entry_count, const int32_t invalid_slot_val)
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:734
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
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 approximate_distinct_tuples_on_device(uint8_t *hll_buffer, const uint32_t b, const GenericKeyHandler *key_handler, const int64_t num_elems)
ColumnType get_join_column_type_kind(const SQLTypeInfo &ti)
size_t num_chunks
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 bool for_semi_join, const size_t key_component_count, const bool with_val_slot, int *dev_err_buff, const GenericKeyHandler *key_handler, const int64_t num_elems)
void fill_hash_join_buff_on_device(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info)
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)
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)
int fill_baseline_hash_join_buff_32(int8_t *hash_buff, const int64_t entry_count, const int32_t invalid_slot_val, const bool for_semi_join, 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)
size_t num_elems
const size_t g_maximum_conditions_to_coalesce
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)
void fill_hash_join_buff_on_device_sharded_bucketized(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, int *dev_err_buff, const JoinColumn join_column, const JoinColumnTypeInfo type_info, const ShardInfo shard_info, const int64_t bucket_normalization)
DEVICE int SUFFIX() fill_hash_join_buff_bucketized(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, 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)
DEVICE int SUFFIX() fill_hash_join_buff(int32_t *buff, const int32_t invalid_slot_val, const bool for_semi_join, 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)
bool is_unsigned_type(const SQLTypeInfo &ti)