OmniSciDB  a987f07e93
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
QueryMemoryInitializer.cpp File Reference
+ Include dependency graph for QueryMemoryInitializer.cpp:

Go to the source code of this file.

Namespaces

 anonymous_namespace{QueryMemoryInitializer.cpp}
 

Functions

void anonymous_namespace{QueryMemoryInitializer.cpp}::check_total_bitmap_memory (const QueryMemoryDescriptor &query_mem_desc)
 
int64_t * anonymous_namespace{QueryMemoryInitializer.cpp}::alloc_group_by_buffer (const size_t numBytes, RenderAllocatorMap *render_allocator_map, const size_t thread_idx, RowSetMemoryOwner *mem_owner)
 
int64_t anonymous_namespace{QueryMemoryInitializer.cpp}::get_consistent_frag_size (const std::vector< uint64_t > &frag_offsets)
 
std::vector< int64_t > anonymous_namespace{QueryMemoryInitializer.cpp}::get_consistent_frags_sizes (const std::vector< std::vector< uint64_t >> &frag_offsets)
 
std::vector< int64_t > anonymous_namespace{QueryMemoryInitializer.cpp}::get_consistent_frags_sizes (const std::vector< Analyzer::Expr * > &target_exprs, const std::vector< int64_t > &table_frag_sizes)
 
std::vector< std::vector
< int64_t > > 
anonymous_namespace{QueryMemoryInitializer.cpp}::get_col_frag_offsets (const std::vector< Analyzer::Expr * > &target_exprs, const std::vector< std::vector< uint64_t >> &table_frag_offsets)
 
int anonymous_namespace{QueryMemoryInitializer.cpp}::get_input_idx (RelAlgExecutionUnit const &ra_exe_unit, int const outer_table_id)
 
 num_buffers_ (1)
 
 varlen_output_buffer_ (0)
 
 varlen_output_buffer_host_ptr_ (nullptr)
 
 count_distinct_bitmap_mem_ (0)
 
 count_distinct_bitmap_mem_bytes_ (0)
 
 count_distinct_bitmap_crt_ptr_ (nullptr)
 
 count_distinct_bitmap_host_mem_ (nullptr)
 
 device_allocator_ (device_allocator)
 
 thread_idx_ (0)
 
template<typename T >
int8_t * anonymous_namespace{QueryMemoryInitializer.cpp}::initColumnarBuffer (T *buffer_ptr, const T init_val, const uint32_t entry_count)
 
void anonymous_namespace{QueryMemoryInitializer.cpp}::eachAggregateTargetIdxOfType (std::vector< Analyzer::Expr * > const &target_exprs, SQLAgg const agg_type, std::function< void(Analyzer::AggExpr const *, size_t)> lambda)
 
void anonymous_namespace{QueryMemoryInitializer.cpp}::compact_projection_buffer_for_cpu_columnar (const QueryMemoryDescriptor &query_mem_desc, int8_t *projection_buffer, const size_t projection_count)
 

Variables

int64_t g_bitmap_memory_limit {8LL * 1000 * 1000 * 1000}
 
 query_mem_desc
 

Function Documentation

count_distinct_bitmap_crt_ptr_ ( nullptr  )
count_distinct_bitmap_host_mem_ ( nullptr  )
count_distinct_bitmap_mem_ ( )
count_distinct_bitmap_mem_bytes_ ( )
device_allocator_ ( device_allocator  )
num_buffers_ ( )

Referenced by thread_idx_().

+ Here is the caller graph for this function:

thread_idx_ ( )

Definition at line 354 of file QueryMemoryInitializer.cpp.

References align_to_int64(), anonymous_namespace{QueryMemoryInitializer.cpp}::alloc_group_by_buffer(), CHECK_EQ, anonymous_namespace{QueryMemoryInitializer.cpp}::get_col_frag_offsets(), anonymous_namespace{QueryMemoryInitializer.cpp}::get_consistent_frags_sizes(), num_buffers_(), query_mem_desc, and target_exprs_to_infos().

354  {
355  // Table functions output columnar, basically treat this as a projection
356  const auto& consistent_frag_sizes = get_consistent_frags_sizes(frag_offsets);
357  if (consistent_frag_sizes.empty()) {
358  // No fragments in the input, no underlying buffers will be needed.
359  return;
360  }
361 
362  const size_t num_columns =
363  query_mem_desc.getBufferColSlotCount(); // shouldn't we use getColCount() ???
364  size_t total_group_by_buffer_size{0};
365  for (size_t i = 0; i < num_columns; ++i) {
366  auto ti = exe_unit.target_exprs[i]->get_type_info();
367  if (ti.is_array()) {
368  // See TableFunctionManager.h for info regarding flatbuffer
369  // memory managment.
370  auto slot_idx = query_mem_desc.getSlotIndexForSingleSlotCol(i);
371  int64_t flatbuffer_size = query_mem_desc.getFlatBufferSize(slot_idx);
372  total_group_by_buffer_size =
373  align_to_int64(total_group_by_buffer_size + flatbuffer_size);
374  } else {
375  const size_t col_width = ti.get_size();
376  const size_t group_buffer_size = num_rows_ * col_width;
377  total_group_by_buffer_size =
378  align_to_int64(total_group_by_buffer_size + group_buffer_size);
379  }
380  }
381 
382  CHECK_EQ(num_buffers_, size_t(1));
383  auto group_by_buffer = alloc_group_by_buffer(
384  total_group_by_buffer_size, nullptr, thread_idx_, row_set_mem_owner.get());
385  group_by_buffers_.push_back(group_by_buffer);
386 
387  const auto column_frag_offsets =
388  get_col_frag_offsets(exe_unit.target_exprs, frag_offsets);
389  const auto column_frag_sizes =
390  get_consistent_frags_sizes(exe_unit.target_exprs, consistent_frag_sizes);
391  result_sets_.emplace_back(
392  new ResultSet(target_exprs_to_infos(exe_unit.target_exprs, query_mem_desc),
393  /*col_lazy_fetch_info=*/{},
394  col_buffers,
395  column_frag_offsets,
396  column_frag_sizes,
397  device_type,
398  device_id,
400  row_set_mem_owner_,
401  executor->getCatalog(),
402  executor->blockSize(),
403  executor->gridSize()));
404  result_sets_.back()->allocateStorage(reinterpret_cast<int8_t*>(group_by_buffer),
405  init_agg_vals_);
406 }
#define CHECK_EQ(x, y)
Definition: Logger.h:297
num_buffers_(1)
std::vector< int64_t > get_consistent_frags_sizes(const std::vector< std::vector< uint64_t >> &frag_offsets)
static QueryMemoryDescriptor fixupQueryMemoryDescriptor(const QueryMemoryDescriptor &)
Definition: ResultSet.cpp:758
std::vector< TargetInfo > target_exprs_to_infos(const std::vector< Analyzer::Expr * > &targets, const QueryMemoryDescriptor &query_mem_desc)
int64_t * alloc_group_by_buffer(const size_t numBytes, RenderAllocatorMap *render_allocator_map, const size_t thread_idx, RowSetMemoryOwner *mem_owner)
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)

+ Here is the call graph for this function:

varlen_output_buffer_ ( )
varlen_output_buffer_host_ptr_ ( nullptr  )

Variable Documentation