From 14aa6d1de35faa7f4663e10f1e10e6eda2f9b27d Mon Sep 17 00:00:00 2001 From: Dongryeol Lee Date: Sat, 11 Dec 2010 04:09:44 +0000 Subject: [PATCH] Distributed kde test passes. --- .../core/gnp/distributed_dualtree_dfs_dev.h | 4 ---- .../distributed_kde/distributed_kde_dev.h | 7 +++--- .../mlpack/kde/kde_arguments.h | 12 ++++++++++ .../thesis_research/mlpack/kde/kde_dev.h | 10 ++++++-- .../thesis_research/mlpack/kde/kde_dualtree.h | 23 ++++++------------- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/fastlib/trunk/contrib/dongryel/thesis_research/core/gnp/distributed_dualtree_dfs_dev.h b/fastlib/trunk/contrib/dongryel/thesis_research/core/gnp/distributed_dualtree_dfs_dev.h index 94f050784d..d5338588a9 100644 --- a/fastlib/trunk/contrib/dongryel/thesis_research/core/gnp/distributed_dualtree_dfs_dev.h +++ b/fastlib/trunk/contrib/dongryel/thesis_research/core/gnp/distributed_dualtree_dfs_dev.h @@ -30,8 +30,6 @@ void core::gnp::DistributedDualtreeDfs::AllReduce_( self_argument.Init(problem_->global()); self_problem.Init(self_argument); self_engine.Init(self_problem); - self_problem.global().set_effective_num_reference_points( - problem_->global().effective_num_reference_points()); self_engine.Compute(metric, query_results); world_->barrier(); @@ -103,8 +101,6 @@ void core::gnp::DistributedDualtreeDfs::AllReduce_( query_table_->local_table(), problem_->global()); sub_problem.Init(sub_argument); - sub_problem.global().set_effective_num_reference_points( - problem_->global().effective_num_reference_points()); sub_engine.Init(sub_problem); sub_engine.Compute(metric, query_results, false); } diff --git a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/distributed_kde/distributed_kde_dev.h b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/distributed_kde/distributed_kde_dev.h index 899d6dc41c..504eed26c3 100644 --- a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/distributed_kde/distributed_kde_dev.h +++ b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/distributed_kde/distributed_kde_dev.h @@ -86,7 +86,8 @@ void DistributedKde::Init( // Declare the global constants. global_.Init( - reference_table_, query_table_, arguments_in.bandwidth_, is_monochromatic_, + reference_table_, query_table_, reference_table_->n_entries(), + arguments_in.bandwidth_, is_monochromatic_, arguments_in.relative_error_, arguments_in.probability_, arguments_in.kernel_, false); global_.set_effective_num_reference_points( @@ -119,11 +120,11 @@ bool DistributedKde::ConstructBoostVariableMap_( "the leave-one-out density at each reference point." )( "random_generate_n_attributes", - boost::program_options::value()->default_value(3), + boost::program_options::value(), "Generate the datasets on the fly of the specified dimension." )( "random_generate_n_entries", - boost::program_options::value()->default_value(20), + boost::program_options::value(), "Generate the datasets on the fly of the specified number of points." )( "densities_out", diff --git a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_arguments.h b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_arguments.h index 1e9740639a..1087bb7c31 100644 --- a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_arguments.h +++ b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_arguments.h @@ -23,6 +23,8 @@ class KdeArguments { TableType *query_table_; + double effective_num_reference_points_; + double bandwidth_; double relative_error_; @@ -35,6 +37,8 @@ class KdeArguments { bool tables_are_aliased_; + bool normalize_densities_; + public: template @@ -43,11 +47,14 @@ class KdeArguments { GlobalType &global_in) { reference_table_ = reference_table_in; query_table_ = query_table_in; + effective_num_reference_points_ = + global_in.effective_num_reference_points(); bandwidth_ = global_in.bandwidth(); relative_error_ = global_in.relative_error(); probability_ = global_in.probability(); kernel_ = global_in.kernel().name(); tables_are_aliased_ = true; + normalize_densities_ = global_in.normalize_densities(); } template @@ -56,23 +63,28 @@ class KdeArguments { if(reference_table_ != query_table_) { query_table_ = global_in.query_table()->local_table(); } + effective_num_reference_points_ = + global_in.effective_num_reference_points(); bandwidth_ = global_in.bandwidth(); relative_error_ = global_in.relative_error(); probability_ = global_in.probability(); kernel_ = global_in.kernel().name(); tables_are_aliased_ = true; + normalize_densities_ = global_in.normalize_densities(); } KdeArguments() { leaf_size_ = 0; reference_table_ = NULL; query_table_ = NULL; + effective_num_reference_points_ = 0.0; bandwidth_ = 0.0; relative_error_ = 0.0; probability_ = 0.0; kernel_ = ""; metric_ = NULL; tables_are_aliased_ = false; + normalize_densities_ = true; } ~KdeArguments() { diff --git a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dev.h b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dev.h index b9cc448890..a738c06511 100644 --- a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dev.h +++ b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dev.h @@ -60,9 +60,11 @@ void mlpack::kde::Kde::Init( // Declare the global constants. global_.Init( - reference_table_, query_table_, arguments_in.bandwidth_, is_monochromatic_, + reference_table_, query_table_, + arguments_in.effective_num_reference_points_, + arguments_in.bandwidth_, is_monochromatic_, arguments_in.relative_error_, arguments_in.probability_, - arguments_in.kernel_); + arguments_in.kernel_, arguments_in.normalize_densities_); } template @@ -221,9 +223,13 @@ void mlpack::kde::Kde::ParseArguments( arguments_out->query_table_->IndexData( *(arguments_out->metric_), arguments_out->leaf_size_); std::cout << "Finished building the query tree.\n"; + arguments_out->effective_num_reference_points_ = + arguments_out->reference_table_->n_entries(); } else { arguments_out->query_table_ = arguments_out->reference_table_; + arguments_out->effective_num_reference_points_ = + arguments_out->reference_table_->n_entries() - 1; } // Parse the bandwidth. diff --git a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dualtree.h b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dualtree.h index 30b9f4c52b..a10c09d220 100644 --- a/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dualtree.h +++ b/fastlib/trunk/contrib/dongryel/thesis_research/mlpack/kde/kde_dualtree.h @@ -144,16 +144,6 @@ class KdeGlobal { return effective_num_reference_points_; } - void set_effective_num_reference_points( - double effective_num_reference_points_in) { - - effective_num_reference_points_ = effective_num_reference_points_in; - mult_const_ = 1.0 / - (kernel_->CalcNormConstant( - reference_table_->n_attributes()) * - ((double) effective_num_reference_points_)); - } - template void set_effective_num_reference_points( boost::mpi::communicator &comm, @@ -164,10 +154,13 @@ class KdeGlobal { for(int i = 0; i < comm.size(); i++) { total_sum += reference_table_in->local_n_entries(i); } - double effective_num_reference_points_in = + effective_num_reference_points_ = (reference_table_in == query_table_in) ? (total_sum - 1.0) : total_sum; - set_effective_num_reference_points(effective_num_reference_points_in); + mult_const_ = 1.0 / + (kernel_->CalcNormConstant( + reference_table_in->n_attributes()) * + ((double) effective_num_reference_points_)); } ~KdeGlobal() { @@ -228,15 +221,13 @@ class KdeGlobal { void Init( TableType *reference_table_in, TableType *query_table_in, + int effective_num_reference_points_in, double bandwidth_in, const bool is_monochromatic, double relative_error_in, double probability_in, const std::string &kernel_type_in, bool normalize_densities_in = true) { - effective_num_reference_points_ = - (is_monochromatic) ? - (reference_table_in->n_entries() - 1) : - reference_table_in->n_entries(); + effective_num_reference_points_ = effective_num_reference_points_in; if(kernel_type_in == "gaussian") { kernel_ = new core::metric_kernels::GaussianKernel();