You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by ji...@apache.org on 2016/07/22 07:08:36 UTC

incubator-quickstep git commit: update

Repository: incubator-quickstep
Updated Branches:
  refs/heads/fix-vs-adaptive-bloom-filters a0bca3501 -> d206d712a


update


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

Branch: refs/heads/fix-vs-adaptive-bloom-filters
Commit: d206d712a31484c305341e5d282b8a370fd19b2d
Parents: a0bca35
Author: Jianqiao Zhu <ji...@cs.wisc.edu>
Authored: Fri Jul 22 02:08:28 2016 -0500
Committer: Jianqiao Zhu <ji...@cs.wisc.edu>
Committed: Fri Jul 22 02:08:28 2016 -0500

----------------------------------------------------------------------
 query_optimizer/ExecutionHeuristics.cpp   |  6 +++---
 relational_operators/HashJoinOperator.cpp |  2 +-
 storage/HashTable.hpp                     | 10 ++++++++--
 utility/BloomFilterAdapter.hpp            | 10 +++++-----
 4 files changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d206d712/query_optimizer/ExecutionHeuristics.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/ExecutionHeuristics.cpp b/query_optimizer/ExecutionHeuristics.cpp
index ed49881..b1aad0f 100644
--- a/query_optimizer/ExecutionHeuristics.cpp
+++ b/query_optimizer/ExecutionHeuristics.cpp
@@ -78,9 +78,9 @@ void ExecutionHeuristics::optimizeExecutionPlan(QueryPlan *query_plan,
       std::unordered_map<QueryContext::bloom_filter_id, std::vector<attribute_id>> probe_bloom_filter_info;
       std::vector<QueryContext::bloom_filter_id> bloom_filter_ids;
       for (const std::size_t node : chained_nodes) {
-        if (!hash_joins_[node].is_selection_) {
-          continue;
-        }
+//        if (!hash_joins_[node].is_selection_) {
+//          continue;
+//        }
 
         // Provision for a new bloom filter to be used by the build operator.
         const QueryContext::bloom_filter_id bloom_filter_id = query_context_proto->bloom_filters_size();

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d206d712/relational_operators/HashJoinOperator.cpp
----------------------------------------------------------------------
diff --git a/relational_operators/HashJoinOperator.cpp b/relational_operators/HashJoinOperator.cpp
index adf39bb..6188a40 100644
--- a/relational_operators/HashJoinOperator.cpp
+++ b/relational_operators/HashJoinOperator.cpp
@@ -61,7 +61,7 @@ namespace quickstep {
 
 DEFINE_int64(bloom_adapter_batch_size, 4000,
              "Number of tuples to probe in bulk in Bloom filter adapter.");
-DEFINE_bool(adapt_bloom_filter, true,
+DEFINE_bool(adapt_bloom_filters, true,
              "Whether to adaptively adjust the ordering of bloom filters.");
 
 namespace {

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d206d712/storage/HashTable.hpp
----------------------------------------------------------------------
diff --git a/storage/HashTable.hpp b/storage/HashTable.hpp
index f1aeda4..f5bc945 100644
--- a/storage/HashTable.hpp
+++ b/storage/HashTable.hpp
@@ -2290,10 +2290,16 @@ void HashTable<ValueT, resizable, serializable, force_key_copy, allow_duplicate_
         std::uint32_t batch_size =
             batch_size_try > num_tuples_left ? batch_size_try : num_tuples_left;
         batch.reserve(batch_size);
-        while (batch.size() < batch_size && accessor->next())
+        while (batch.size() < batch_size && accessor->next()) {
           batch.push_back(accessor->getCurrentPosition());
+        }
 
-        std::size_t num_hits = bloom_filter_adapter->bulkProbe(accessor, batch);
+        std::size_t num_hits;
+        if (FLAGS_adapt_bloom_filters) {
+          num_hits = bloom_filter_adapter->bulkProbe<true>(accessor, batch);
+        } else {
+          num_hits = bloom_filter_adapter->bulkProbe<false>(accessor, batch);
+        }
 
         for (std::size_t t = 0; t < num_hits; ++t){
           tuple_id probe_tid = batch[t];

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d206d712/utility/BloomFilterAdapter.hpp
----------------------------------------------------------------------
diff --git a/utility/BloomFilterAdapter.hpp b/utility/BloomFilterAdapter.hpp
index 9ed4065..03e2c37 100644
--- a/utility/BloomFilterAdapter.hpp
+++ b/utility/BloomFilterAdapter.hpp
@@ -58,8 +58,8 @@ class BloomFilterAdapter {
       delete entry;
   }
 
-  template <typename ValueAccessorT, bool adapt_filters = true>
-  inline std::size_t bulkProbe(
+  template <bool adapt_filters, typename ValueAccessorT>
+  std::size_t bulkProbe(
       const ValueAccessorT *accessor,
       std::vector<tuple_id> &batch) {
     std::size_t out_size = batch.size();
@@ -85,7 +85,7 @@ class BloomFilterAdapter {
           cnt(0) {
     }
 
-    static inline bool isBetterThan(const BloomFilterEntry *a,
+    static bool isBetterThan(const BloomFilterEntry *a,
                              const BloomFilterEntry *b) {
       return a->miss_rate > b->miss_rate;
       // return static_cast<std::uint64_t>(a.miss) * b.cnt
@@ -101,7 +101,7 @@ class BloomFilterAdapter {
   };
 
   template <typename ValueAccessorT, bool adapt_filters = true>
-  inline std::size_t bulkProbeBloomFilterEntry(
+  std::size_t bulkProbeBloomFilterEntry(
       BloomFilterEntry &entry,
       const ValueAccessorT *accessor,
       std::vector<tuple_id> &batch,
@@ -129,7 +129,7 @@ class BloomFilterAdapter {
     return out_size;
   }
 
-  inline void adaptEntryOrder() {
+  void adaptEntryOrder() {
     for (auto &entry : bloom_filter_entries_)
       entry->miss_rate = static_cast<float>(entry->miss) / entry->cnt;
     std::sort(bloom_filter_entries_.begin(),