From e46c61d7db0a915920b385ce438261ff67bfaade Mon Sep 17 00:00:00 2001 From: Dongryeol Lee Date: Mon, 6 Dec 2010 04:36:22 +0000 Subject: [PATCH] Some bugs in distributed kde, but it runs without crashing. --- .../core/gnp/distributed_dualtree_dfs_dev.h | 14 ++++++++++++++ .../thesis_research/mlpack/kde/kde_arguments.h | 13 +++++++++++++ 2 files changed, 27 insertions(+) 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 22cfe591bb..f7d9491364 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 @@ -58,6 +58,7 @@ void core::gnp::DistributedDualtreeDfs::AllReduce_( // Send the process's own collected tables. std::vector send_requests; std::vector receive_requests; + std::vector received_tables_in_current_iter; send_requests.resize(num_tables_in_action); receive_requests.resize(num_tables_in_action); @@ -72,6 +73,7 @@ void core::gnp::DistributedDualtreeDfs::AllReduce_( send_id = group_leader + i + num_tables_in_action; receive_id = group_leader + i; } + received_tables_in_current_iter.push_back(receive_id); remote_tables[receive_id] = core::table::global_m_file_->Construct(); send_requests[i] = world_->isend( @@ -86,6 +88,18 @@ void core::gnp::DistributedDualtreeDfs::AllReduce_( // Each process calls the independent sets of serial dual-tree dfs // algorithms. Further parallelism can be exploited here. + for(unsigned i = 0; i < received_tables_in_current_iter.size(); i++) { + core::gnp::DualtreeDfs sub_engine; + ProblemType sub_problem; + ArgumentType sub_argument; + sub_argument.Init( + remote_tables[world_->rank()], + remote_tables[received_tables_in_current_iter[i]], + problem_->global()); + sub_problem.Init(self_argument); + sub_engine.Init(self_problem); + sub_engine.Compute(metric, query_results, false); + } } // End of the all-reduce loop. 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 9e342aa3a9..1e9740639a 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 @@ -37,6 +37,19 @@ class KdeArguments { public: + template + void Init( + TableType *reference_table_in, TableType *query_table_in, + GlobalType &global_in) { + reference_table_ = reference_table_in; + query_table_ = query_table_in; + bandwidth_ = global_in.bandwidth(); + relative_error_ = global_in.relative_error(); + probability_ = global_in.probability(); + kernel_ = global_in.kernel().name(); + tables_are_aliased_ = true; + } + template void Init(GlobalType &global_in) { reference_table_ = global_in.reference_table()->local_table();