130 const auto& outer_tab_frag_ids =
frag_list[0].fragment_ids;
135 auto catalog = executor->getCatalog();
139 auto chunk_iterators_ptr = std::make_shared<std::list<ChunkIter>>();
140 std::list<std::shared_ptr<Chunk_NS::Chunk>> chunks;
141 std::unique_ptr<std::lock_guard<std::mutex>> gpu_lock;
142 std::unique_ptr<CudaAllocator> device_allocator;
145 new std::lock_guard<std::mutex>(executor->gpu_exec_mutex_[
chosen_device_id]));
151 std::map<int, const TableFragments*> all_tables_fragments;
160 all_tables_fragments,
163 *chunk_iterators_ptr,
165 device_allocator.get())
170 all_tables_fragments,
173 *chunk_iterators_ptr,
175 device_allocator.get());
176 if (fetch_result.num_rows.empty()) {
183 LOG(
INFO) <<
"Dynamic Watchdog budget: CPU: "
199 throw std::runtime_error(
"Joins not supported through external execution");
206 executor->row_set_mem_owner_,
209 group_by_and_aggregate.initQueryMemoryDescriptor(
false, 0, 8,
nullptr,
false);
213 executor->plan_state_.get(),
222 std::unique_ptr<QueryExecutionContext> query_exe_context_owned;
225 int64_t total_num_input_rows{-1};
228 total_num_input_rows = 0;
229 std::for_each(fetch_result.num_rows.begin(),
230 fetch_result.num_rows.end(),
231 [&total_num_input_rows](
const std::vector<int64_t>& frag_row_count) {
233 frag_row_count.end(),
234 total_num_input_rows);
236 VLOG(2) <<
"total_num_input_rows=" << total_num_input_rows;
240 if (total_num_input_rows == 0) {
251 query_exe_context_owned =
257 total_num_input_rows,
258 fetch_result.col_buffers,
259 fetch_result.frag_offsets,
260 executor->getRowSetMemoryOwner(),
262 query_mem_desc.sortOnGpu(),
269 CHECK(query_exe_context);
271 uint32_t start_rowid{0};
274 const auto& all_frag_row_offsets = shared_context.
getFragOffsets();
276 all_frag_row_offsets[
frag_list.begin()->fragment_ids.front()];
287 fetch_result.col_buffers,
289 fetch_result.num_rows,
290 fetch_result.frag_offsets,
291 &catalog->getDataMgr(),
298 VLOG(1) <<
"outer_table_id=" << outer_table_id
306 fetch_result.col_buffers,
309 fetch_result.num_rows,
310 fetch_result.frag_offsets,
311 &catalog->getDataMgr(),
320 std::list<std::shared_ptr<Chunk_NS::Chunk>> chunks_to_hold;
321 for (
const auto& chunk : chunks) {
323 chunks_to_hold.push_back(chunk);
329 VLOG(1) <<
"null device_results.";
std::vector< Analyzer::Expr * > target_exprs
std::atomic_flag dynamic_watchdog_set
const ExecutionOptions & eo
const std::vector< uint64_t > & getFragOffsets()
static const int max_gpu_count
const std::optional< bool > union_all
const ExecutorDispatchMode kernel_dispatch_mode
const RelAlgExecutionUnit & ra_exe_unit_
const int64_t rowid_lookup_key
void addDeviceResults(ResultSetPtr &&device_results, std::vector< size_t > outer_table_fragment_ids)
std::vector< InputDescriptor > input_descs
const ExecutorDeviceType chosen_device_type
bool hoistLiterals() const
const std::list< std::shared_ptr< Analyzer::Expr > > groupby_exprs
std::unique_ptr< ResultSet > run_query_external(const ExecutionUnitSql &sql, const FetchResult &fetch_result, const PlanState *plan_state, const ExternalQueryOutputSpec &output_spec)
RenderInfo * render_info_
ExecutorType executor_type
const bool with_dynamic_watchdog
const QueryMemoryDescriptor & query_mem_desc
DEVICE auto accumulate(ARGS &&...args)
const QueryCompilationDescriptor & query_comp_desc
uint64_t dynamic_watchdog_init(unsigned ms_budget)
static const int32_t ERR_OUT_OF_GPU_MEM
bool need_to_hold_chunk(const Chunk_NS::Chunk *chunk, const RelAlgExecutionUnit &ra_exe_unit)
QueryDescriptionType getQueryDescriptionType() const
const FragmentsList frag_list
bool query_has_inner_join(const RelAlgExecutionUnit &ra_exe_unit)
const std::vector< InputTableInfo > & getQueryInfos() const
ResultSetPtr device_results_
bool isPotentialInSituRender() const
std::vector< TargetInfo > target_exprs_to_infos(const std::vector< Analyzer::Expr * > &targets, const QueryMemoryDescriptor &query_mem_desc)
ExecutionUnitSql serialize_to_sql(const RelAlgExecutionUnit *ra_exe_unit, const Catalog_Namespace::Catalog *catalog)
const unsigned dynamic_watchdog_time_limit
auto getCompilationResult() const
static const int32_t ERR_OUT_OF_CPU_MEM
static void computeAllTablesFragments(std::map< int, const TableFragments * > &all_tables_fragments, const RelAlgExecutionUnit &ra_exe_unit, const std::vector< InputTableInfo > &query_infos)
const ColumnFetcher & column_fetcher