You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by kw...@apache.org on 2016/10/20 06:03:06 UTC

[4/4] incubator-impala git commit: IMPALA-4269: Codegen merging exchange node

IMPALA-4269: Codegen merging exchange node

This change enables codegen for the tuple row comparator
used in merging-exchange node.

With this change, merging-exchange operator improves by
40% and 50% respectively for primitive_orderby_bigint and
primitive_orderby_all on TPCH-300, speeding up the query by
6% and 11% respectively.

Change-Id: I944b8d52ea63ede58e4dc6fbe6e6953756394d41
Reviewed-on: http://gerrit.cloudera.org:8080/4759
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Internal Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/502220c6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/502220c6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/502220c6

Branch: refs/heads/master
Commit: 502220c69d483f785632eaf0030babf40be78ff4
Parents: f1f54fe
Author: Michael Ho <kw...@cloudera.com>
Authored: Tue Oct 18 22:37:33 2016 -0700
Committer: Internal Jenkins <cl...@gerrit.cloudera.org>
Committed: Thu Oct 20 04:42:09 2016 +0000

----------------------------------------------------------------------
 be/src/exec/exchange-node.cc | 12 ++++++++++++
 be/src/exec/exchange-node.h  |  1 +
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/502220c6/be/src/exec/exchange-node.cc
----------------------------------------------------------------------
diff --git a/be/src/exec/exchange-node.cc b/be/src/exec/exchange-node.cc
index fac2ff5..13522a7 100644
--- a/be/src/exec/exchange-node.cc
+++ b/be/src/exec/exchange-node.cc
@@ -85,10 +85,22 @@ Status ExchangeNode::Prepare(RuntimeState* state) {
     AddExprCtxsToFree(sort_exec_exprs_);
     less_than_.reset(
         new TupleRowComparator(sort_exec_exprs_, is_asc_order_, nulls_first_));
+    if (!state->codegen_enabled()) {
+      runtime_profile()->AddCodegenMsg(false, "disabled by query option DISABLE_CODEGEN");
+    }
   }
   return Status::OK();
 }
 
+void ExchangeNode::Codegen(RuntimeState* state) {
+  DCHECK(state->codegen_enabled());
+  if (is_merging_) {
+    Status codegen_status = less_than_->Codegen(state);
+    runtime_profile()->AddCodegenMsg(codegen_status.ok(), codegen_status);
+  }
+  ExecNode::Codegen(state);
+}
+
 Status ExchangeNode::Open(RuntimeState* state) {
   SCOPED_TIMER(runtime_profile_->total_time_counter());
   RETURN_IF_ERROR(ExecNode::Open(state));

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/502220c6/be/src/exec/exchange-node.h
----------------------------------------------------------------------
diff --git a/be/src/exec/exchange-node.h b/be/src/exec/exchange-node.h
index f6face4..6feaff3 100644
--- a/be/src/exec/exchange-node.h
+++ b/be/src/exec/exchange-node.h
@@ -46,6 +46,7 @@ class ExchangeNode : public ExecNode {
 
   virtual Status Init(const TPlanNode& tnode, RuntimeState* state);
   virtual Status Prepare(RuntimeState* state);
+  virtual void Codegen(RuntimeState* state);
   /// Blocks until the first batch is available for consumption via GetNext().
   virtual Status Open(RuntimeState* state);
   virtual Status GetNext(RuntimeState* state, RowBatch* row_batch, bool* eos);