464 if (consistent_frag_sizes.empty()) {
469 const size_t num_columns =
471 size_t total_group_by_buffer_size{0};
472 for (
size_t i = 0; i < num_columns; ++i) {
473 auto ti = exe_unit.target_exprs[i]->get_type_info();
474 if (ti.usesFlatBuffer()) {
482 static_cast<int64_t>(total_group_by_buffer_size + flatbuffer_size));
491 static_cast<int64_t>(group_buffer_size + total_group_by_buffer_size));
498 #ifdef __SANITIZE_ADDRESS__
500 #define MAX_BUFFER_SIZE 0x10000000000ll
504 #define MAX_BUFFER_SIZE 0x100000000000ll
515 row_set_mem_owner.get(),
518 group_by_buffers_.push_back(group_by_buffer);
520 const auto column_frag_offsets =
522 const auto column_frag_sizes =
524 result_sets_.emplace_back(
535 executor->blockSize(),
536 executor->gridSize()));
537 result_sets_.back()->allocateStorage(reinterpret_cast<int8_t*>(group_by_buffer),
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void >> checked_int64_t
std::pair< int64_t *, bool > alloc_group_by_buffer(const size_t numBytes, RenderAllocatorMap *render_allocator_map, const size_t thread_idx, RowSetMemoryOwner *mem_owner, const bool reuse_existing_buffer_for_thread)
std::vector< int64_t > get_consistent_frags_sizes(const std::vector< std::vector< uint64_t >> &frag_offsets)
static QueryMemoryDescriptor fixupQueryMemoryDescriptor(const QueryMemoryDescriptor &)
std::vector< TargetInfo > target_exprs_to_infos(const std::vector< Analyzer::Expr * > &targets, const QueryMemoryDescriptor &query_mem_desc)
FORCE_INLINE HOST DEVICE T align_to_int64(T addr)
std::vector< std::vector< int64_t > > get_col_frag_offsets(const std::vector< Analyzer::Expr * > &target_exprs, const std::vector< std::vector< uint64_t >> &table_frag_offsets)