OmniSciDB  72c90bc290
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ResultSetManager Class Reference

#include <ResultSet.h>

Public Member Functions

ResultSetreduce (std::vector< ResultSet * > &, const size_t executor_id)
 
std::shared_ptr< ResultSetgetOwnResultSet ()
 
void rewriteVarlenAggregates (ResultSet *)
 

Private Attributes

std::shared_ptr< ResultSetrs_
 

Detailed Description

Definition at line 1033 of file ResultSet.h.

Member Function Documentation

std::shared_ptr< ResultSet > ResultSetManager::getOwnResultSet ( )

Definition at line 1133 of file ResultSetReduction.cpp.

References rs_.

1133  {
1134  return rs_;
1135 }
std::shared_ptr< ResultSet > rs_
Definition: ResultSet.h:1042
ResultSet * ResultSetManager::reduce ( std::vector< ResultSet * > &  result_sets,
const size_t  executor_id 
)

Definition at line 1054 of file ResultSetReduction.cpp.

References gpu_enabled::accumulate(), CHECK, CHECK_EQ, ResultSetReductionJIT::codegen(), CPU, GroupByBaselineHash, logger::init(), query_mem_desc, run_benchmark_import::result, and rs_.

1055  {
1056  CHECK(!result_sets.empty());
1057  auto result_rs = result_sets.front();
1058  CHECK(result_rs->storage_);
1059  auto& first_result = *result_rs->storage_;
1060  auto result = &first_result;
1061  const auto row_set_mem_owner = result_rs->row_set_mem_owner_;
1062  for (const auto result_set : result_sets) {
1063  CHECK_EQ(row_set_mem_owner, result_set->row_set_mem_owner_);
1064  }
1065  if (first_result.query_mem_desc_.getQueryDescriptionType() ==
1067  const auto total_entry_count =
1068  std::accumulate(result_sets.begin(),
1069  result_sets.end(),
1070  size_t(0),
1071  [](const size_t init, const ResultSet* rs) {
1072  return init + rs->query_mem_desc_.getEntryCount();
1073  });
1074  CHECK(total_entry_count);
1075  auto query_mem_desc = first_result.query_mem_desc_;
1076  query_mem_desc.setEntryCount(total_entry_count);
1077  rs_.reset(new ResultSet(first_result.targets_,
1080  row_set_mem_owner,
1081  0,
1082  0));
1083  auto result_storage = rs_->allocateStorage(first_result.target_init_vals_);
1084  rs_->initializeStorage();
1085  switch (query_mem_desc.getEffectiveKeyWidth()) {
1086  case 4:
1087  first_result.moveEntriesToBuffer<int32_t>(result_storage->getUnderlyingBuffer(),
1088  query_mem_desc.getEntryCount());
1089  break;
1090  case 8:
1091  first_result.moveEntriesToBuffer<int64_t>(result_storage->getUnderlyingBuffer(),
1092  query_mem_desc.getEntryCount());
1093  break;
1094  default:
1095  CHECK(false);
1096  }
1097  result = rs_->storage_.get();
1098  result_rs = rs_.get();
1099  }
1100 
1101  auto& serialized_varlen_buffer = result_sets.front()->serialized_varlen_buffer_;
1102  if (!serialized_varlen_buffer.empty()) {
1103  result->rewriteAggregateBufferOffsets(serialized_varlen_buffer.front());
1104  for (auto result_it = result_sets.begin() + 1; result_it != result_sets.end();
1105  ++result_it) {
1106  auto& result_serialized_varlen_buffer = (*result_it)->serialized_varlen_buffer_;
1107  CHECK_EQ(result_serialized_varlen_buffer.size(), size_t(1));
1108  serialized_varlen_buffer.emplace_back(
1109  std::move(result_serialized_varlen_buffer.front()));
1110  }
1111  }
1112 
1113  ResultSetReductionJIT reduction_jit(result_rs->getQueryMemDesc(),
1114  result_rs->getTargetInfos(),
1115  result_rs->getTargetInitVals(),
1116  executor_id);
1117  auto reduction_code = reduction_jit.codegen();
1118  size_t ctr = 1;
1119  for (auto result_it = result_sets.begin() + 1; result_it != result_sets.end();
1120  ++result_it) {
1121  if (!serialized_varlen_buffer.empty()) {
1122  result->reduce(*((*result_it)->storage_),
1123  serialized_varlen_buffer[ctr++],
1124  reduction_code,
1125  executor_id);
1126  } else {
1127  result->reduce(*((*result_it)->storage_), {}, reduction_code, executor_id);
1128  }
1129  }
1130  return result_rs;
1131 }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
std::shared_ptr< ResultSet > rs_
Definition: ResultSet.h:1042
void init(LogOptions const &log_opts)
Definition: Logger.cpp:364
DEVICE auto accumulate(ARGS &&...args)
Definition: gpu_enabled.h:42
virtual ReductionCode codegen() const
#define CHECK(condition)
Definition: Logger.h:291

+ Here is the call graph for this function:

void ResultSetManager::rewriteVarlenAggregates ( ResultSet result_rs)

Definition at line 1137 of file ResultSetReduction.cpp.

1137  {
1138  auto& result_storage = result_rs->storage_;
1139  result_storage->rewriteAggregateBufferOffsets(
1140  result_rs->serialized_varlen_buffer_.front());
1141 }

Member Data Documentation

std::shared_ptr<ResultSet> ResultSetManager::rs_
private

Definition at line 1042 of file ResultSet.h.

Referenced by getOwnResultSet(), and reduce().


The documentation for this class was generated from the following files: