OmniSciDB  a5dc49c757
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner Class Reference
+ Collaboration diagram for anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner:

Public Member Functions

 BucketSizeTuner (const double bucket_threshold, const double step, const double min_threshold, const Data_Namespace::MemoryLevel effective_memory_level, const std::vector< ColumnsForDevice > &columns_per_device, const std::vector< InnerOuter > &inner_outer_pairs, const size_t table_tuple_count, const Executor *executor)
 
bool tuneOneStep ()
 
bool tuneOneStep (const TuningState::TuningDirection tuning_direction)
 
bool tuneOneStep (const TuningState::TuningDirection tuning_direction, const double step_overide)
 
auto getMinBucketSize () const
 
std::vector< double > getInverseBucketSizes ()
 

Private Member Functions

bool bucketThresholdsBelowMinThreshold () const
 
std::vector< double > computeBucketSizes () const
 
bool tuneSmallerOneStep (const double step_overide)
 
bool tuneLargerOneStep (const double step_overide)
 

Private Attributes

size_t num_dims_
 
std::vector< double > bucket_thresholds_
 
size_t num_steps_ {0}
 
const double step_
 
const double min_threshold_
 
const Data_Namespace::MemoryLevel effective_memory_level_
 
const std::vector
< ColumnsForDevice > & 
columns_per_device_
 
const std::vector< InnerOuter > & inner_outer_pairs_
 
const size_t table_tuple_count_
 
const Executorexecutor_
 
std::vector< double > current_bucket_sizes_
 

Friends

std::ostream & operator<< (std::ostream &os, const BucketSizeTuner &tuner)
 

Detailed Description

Definition at line 397 of file BoundingBoxIntersectJoinHashTable.cpp.

Constructor & Destructor Documentation

anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::BucketSizeTuner ( const double  bucket_threshold,
const double  step,
const double  min_threshold,
const Data_Namespace::MemoryLevel  effective_memory_level,
const std::vector< ColumnsForDevice > &  columns_per_device,
const std::vector< InnerOuter > &  inner_outer_pairs,
const size_t  table_tuple_count,
const Executor executor 
)
inline

Definition at line 399 of file BoundingBoxIntersectJoinHashTable.cpp.

References CHECK.

407  : num_dims_(2) // Todo: allow varying number of dims
408  , bucket_thresholds_(/*count=*/num_dims_, /*value=*/bucket_threshold)
409  , step_(step)
410  , min_threshold_(min_threshold)
411  , effective_memory_level_(effective_memory_level)
412  , columns_per_device_(columns_per_device)
413  , inner_outer_pairs_(inner_outer_pairs)
414  , table_tuple_count_(table_tuple_count)
415  , executor_(executor) {
416  CHECK(!columns_per_device_.empty());
417  }
#define CHECK(condition)
Definition: Logger.h:291

Member Function Documentation

bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::bucketThresholdsBelowMinThreshold ( ) const
inlineprivate

Definition at line 460 of file BoundingBoxIntersectJoinHashTable.cpp.

460  {
461  for (const auto& t : bucket_thresholds_) {
462  if (t < min_threshold_) {
463  return true;
464  }
465  }
466  return false;
467  }
std::vector<double> anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::computeBucketSizes ( ) const
inlineprivate

Definition at line 469 of file BoundingBoxIntersectJoinHashTable.cpp.

References anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::compute_bucket_sizes(), and executor_().

469  {
470  if (table_tuple_count_ == 0) {
471  return std::vector<double>(/*count=*/num_dims_, /*val=*/0);
472  }
475  columns_per_device_.front().join_columns[0],
476  columns_per_device_.front().join_column_types[0],
478  executor_);
479  }
std::vector< double > compute_bucket_sizes(const std::vector< double > &bucket_thresholds, const Data_Namespace::MemoryLevel effective_memory_level, const JoinColumn &join_column, const JoinColumnTypeInfo &join_column_type, const std::vector< InnerOuter > &inner_outer_pairs, const Executor *executor)

+ Here is the call graph for this function:

std::vector<double> anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::getInverseBucketSizes ( )
inline

Method to retrieve inverted bucket sizes, which are what are used elsewhere in the hash join framework for bounding box intersection

Returns
the inverted bucket sizes, i.e. a set of that will place a raw value in a bucket when multiplied by the raw value

Definition at line 446 of file BoundingBoxIntersectJoinHashTable.cpp.

References CHECK_EQ.

446  {
447  if (num_steps_ == 0) {
448  CHECK_EQ(current_bucket_sizes_.size(), static_cast<size_t>(0));
450  }
452  std::vector<double> inverse_bucket_sizes;
453  for (const auto s : current_bucket_sizes_) {
454  inverse_bucket_sizes.emplace_back(1.0 / s);
455  }
456  return inverse_bucket_sizes;
457  }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
auto anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::getMinBucketSize ( ) const
inline

Definition at line 436 of file BoundingBoxIntersectJoinHashTable.cpp.

436  {
437  return *std::min_element(bucket_thresholds_.begin(), bucket_thresholds_.end());
438  }
bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::tuneLargerOneStep ( const double  step_overide)
inlineprivate

Definition at line 506 of file BoundingBoxIntersectJoinHashTable.cpp.

References CHECK_EQ.

506  {
507  if (!current_bucket_sizes_.empty()) {
510  }
511  // If current_bucket_sizes was empty, we will start from our initial threshold
512  for (auto& t : bucket_thresholds_) {
513  t *= step_overide;
514  }
515  // When tuning up, do not dynamically compute bucket_sizes, as compute_bucket_sizes as
516  // written will pick the largest bin size below the threshold, meaning our bucket_size
517  // will never increase beyond the size of the largest polygon. This could mean that we
518  // can never make the bucket sizes large enough to get our hash table below the
519  // maximum size Possible todo: enable templated version of compute_bucket_sizes that
520  // allows for optionally finding smallest extent above threshold, to mirror default
521  // behavior finding largest extent below threshold, and use former variant here
523  num_steps_++;
524  return true;
525  }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::tuneOneStep ( )
inline

Definition at line 419 of file BoundingBoxIntersectJoinHashTable.cpp.

References tuneOneStep().

Referenced by tuneOneStep().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::tuneOneStep ( const TuningState::TuningDirection  tuning_direction)
inline
bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::tuneOneStep ( const TuningState::TuningDirection  tuning_direction,
const double  step_overide 
)
inline
bool anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::tuneSmallerOneStep ( const double  step_overide)
inlineprivate

Definition at line 481 of file BoundingBoxIntersectJoinHashTable.cpp.

References CHECK_EQ, and VLOG.

481  {
482  if (!current_bucket_sizes_.empty()) {
485  for (auto& t : bucket_thresholds_) {
486  t /= step_overide;
487  }
488  }
490  VLOG(1) << "Aborting tuning for bounding box intersection as at least one bucket "
491  "size is below min threshold";
492  return false;
493  }
494  const auto next_bucket_sizes = computeBucketSizes();
495  if (next_bucket_sizes == current_bucket_sizes_) {
496  VLOG(1) << "Aborting tuning for bounding box intersection as bucket size is no "
497  "longer changing.";
498  return false;
499  }
500 
501  current_bucket_sizes_ = next_bucket_sizes;
502  num_steps_++;
503  return true;
504  }
#define CHECK_EQ(x, y)
Definition: Logger.h:301
#define VLOG(n)
Definition: Logger.h:388

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const BucketSizeTuner tuner 
)
friend

Definition at line 543 of file BoundingBoxIntersectJoinHashTable.cpp.

543  {
544  os << "Step Num: " << tuner.num_steps_ << ", Threshold: " << std::fixed << "("
545  << tuner.bucket_thresholds_[0] << ", " << tuner.bucket_thresholds_[1] << ")"
546  << ", Step Size: " << std::fixed << tuner.step_ << ", Min: " << std::fixed
547  << tuner.min_threshold_;
548  return os;
549 }

Member Data Documentation

std::vector<double> anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::bucket_thresholds_
private
const std::vector<ColumnsForDevice>& anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::columns_per_device_
private

Definition at line 533 of file BoundingBoxIntersectJoinHashTable.cpp.

std::vector<double> anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::current_bucket_sizes_
private

Definition at line 538 of file BoundingBoxIntersectJoinHashTable.cpp.

const Data_Namespace::MemoryLevel anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::effective_memory_level_
private

Definition at line 532 of file BoundingBoxIntersectJoinHashTable.cpp.

const Executor* anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::executor_
private

Definition at line 536 of file BoundingBoxIntersectJoinHashTable.cpp.

const std::vector<InnerOuter>& anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::inner_outer_pairs_
private

Definition at line 534 of file BoundingBoxIntersectJoinHashTable.cpp.

const double anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::min_threshold_
private
size_t anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::num_dims_
private

Definition at line 527 of file BoundingBoxIntersectJoinHashTable.cpp.

size_t anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::num_steps_ {0}
private
const double anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::step_
private
const size_t anonymous_namespace{BoundingBoxIntersectJoinHashTable.cpp}::BucketSizeTuner::table_tuple_count_
private

Definition at line 535 of file BoundingBoxIntersectJoinHashTable.cpp.


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