diff options
author | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-01 03:18:20 +0000 |
---|---|---|
committer | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-01 03:18:20 +0000 |
commit | 6c7bd63870ab514a6ce8475123289483e899a12d (patch) | |
tree | da3d0b1d108ad2f8bf784bc386526d94db56f140 | |
parent | 2112ec6d2e6af854ab6db5b4565aee05f2c7b282 (diff) | |
download | ATCD-6c7bd63870ab514a6ce8475123289483e899a12d.tar.gz |
added optimization, using a hash map
7 files changed, 64 insertions, 40 deletions
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc index d019f295f1b..a45d036b5f5 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc @@ -153,7 +153,7 @@ project (backward_packing_ftrmff) { } } -project (forward_packing_ftrmff) { +project (forward_packing_ftrmff) : acelib { exename = fpftrmff exeout = ../bin @@ -174,7 +174,7 @@ project (forward_packing_ftrmff) { } } -project (forward_ranking_ftrmff) { +project (forward_ranking_ftrmff) : acelib { exename = frftrmff exeout = ../bin diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp index 7485812dbb7..3fb726ee674 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp @@ -19,6 +19,13 @@ FailureAwareWCRT::FailureAwareWCRT (const TASK_LIST & tasks, { } +FailureAwareWCRT::FailureAwareWCRT (const TASK_LIST & tasks, + const ReplicaFinder & replica_finder) + : tasks_ (tasks), + replica_finder_ (replica_finder) +{ +} + double FailureAwareWCRT::operator () (double previous, const PROCESSOR_SET & failures) diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h index 049c38dda6a..35cc5a82d87 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h @@ -24,13 +24,16 @@ public: FailureAwareWCRT (const TASK_LIST & tasks, const REPLICA_GROUPS & rep_groups); + FailureAwareWCRT (const TASK_LIST & tasks, + const ReplicaFinder & replica_finder); + double operator () (double previous, const PROCESSOR_SET & failures); private: CTT_Enhanced ctt_; TASK_LIST tasks_; - ReplicaFinder replica_finder_; + const ReplicaFinder & replica_finder_; }; #endif /* FAILURE_AWARE_WCRT_H_ */ diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.cpp index 397367e4352..0b3de90d6d1 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.cpp +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.cpp @@ -15,29 +15,36 @@ #include "FailureAwareWCRT.h" #include "Combination_T.h" -FailureMapFinder::FailureMapFinder (const FAILURE_MAP & failure_map) - : failure_map_ (failure_map) +FailureMapFinder::FailureMapFinder (const REPLICA_GROUPS & rep_groups, + const FAILURE_MAP & failure_map) + : ReplicaFinder (rep_groups), + failure_map_ (failure_map) { } PROCESSOR_SET -FailureMapFinder::operator () (const Task & task) +FailureMapFinder::operator () (const Task & task) const { - FAILURE_MAP::const_iterator it = - failure_map_.find (task.name); - - if (it != failure_map_.end ()) - return it->second; + PROCESSOR_SET result; + if (failure_map_.find (task.name.c_str (), + result) == 0) + { + TRACE (task); + return result; + } else - TRACE ("OOPS(" << task << ")"); - - return PROCESSOR_SET (); + { + TRACE (task << "delegate"); + return this->ReplicaFinder::operator () (task); + } } Forward_Ranking_Scheduler::Forward_Ranking_Scheduler ( const PROCESSOR_LIST & processors, unsigned int max_failures) - : Scheduler (processors, max_failures) + : Scheduler (processors, max_failures), + replica_finder_ (replica_groups_, + failure_map_) { } @@ -117,7 +124,7 @@ Forward_Ranking_Scheduler::update_failure_map (const Task & task, } } - failure_map_[task.name] = proc_dependencies; + failure_map_.bind (task.name.c_str (), proc_dependencies); TRACE ("Failure Map: " << failure_map_); } @@ -139,9 +146,7 @@ Forward_Ranking_Scheduler::check_for_existing_replicas ( PROCESSOR_SET Forward_Ranking_Scheduler::replica_processors (const Task & task) { - ReplicaFinder finder (replica_groups_); - - return finder (task); + return replica_finder_ (task); } class RelevantProcessorAccumulator : std::binary_function <PROCESSOR_SET, @@ -149,27 +154,23 @@ class RelevantProcessorAccumulator : std::binary_function <PROCESSOR_SET, PROCESSOR_SET> { public: - RelevantProcessorAccumulator (const REPLICA_GROUPS & rep_groups) - : rep_groups_ (rep_groups) + RelevantProcessorAccumulator (const ReplicaFinder & rep_finder) + : rep_finder_ (rep_finder) { } PROCESSOR_SET operator () (const PROCESSOR_SET & previous, const Task & task) { - PROCESSOR_SET result = previous; - - std::transform (rep_groups_.find (primary_name (task))->second.begin (), - rep_groups_.find (primary_name (task))->second.begin () + task.rank, - std::inserter (result, - result.begin ()), - ProcessorPicker ()); + PROCESSOR_SET result = rep_finder_ (task); + + result.insert (previous.begin (), previous.end ()); return result; } private: - const REPLICA_GROUPS & rep_groups_; + const ReplicaFinder & rep_finder_; }; PROCESSOR_SET @@ -181,7 +182,7 @@ Forward_Ranking_Scheduler::relevant_processors ( std::accumulate (tasks.begin (), tasks.end (), PROCESSOR_SET (), - RelevantProcessorAccumulator (replica_groups_)); + RelevantProcessorAccumulator (replica_finder_)); PROCESSOR_SET result; @@ -256,7 +257,7 @@ Forward_Ranking_Scheduler::accumulate_wcrt (const TASK_LIST & tasks, scenarios.end (), -1.0, FailureAwareWCRT (tasks, - replica_groups_)); + replica_finder_)); } std::ostream & operator<< (std::ostream & ostr, @@ -267,7 +268,7 @@ std::ostream & operator<< (std::ostream & ostr, it != fm.end (); ++it) { - ostr << it->first << ": " << it->second << ", "; + ostr << it->key ().c_str () << ": " << it->item () << ", "; } ostr << "}"; diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h index 6dc20e8ac92..096c62cec93 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h @@ -14,8 +14,14 @@ #define FORWARD_RANKING_SCHEDULER_H_ #include "Scheduler.h" +#include <ace/Hash_Map_Manager_T.h> +#include <ace/Null_Mutex.h> -typedef std::map <Taskname, PROCESSOR_SET> FAILURE_MAP; +typedef ACE_Hash_Map_Manager_Ex <ACE_CString, + PROCESSOR_SET, + ACE_Hash <ACE_CString>, + ACE_Equal_To <ACE_CString>, + ACE_Null_Mutex> FAILURE_MAP; /** * @class FailureMapFinder @@ -24,13 +30,13 @@ typedef std::map <Taskname, PROCESSOR_SET> FAILURE_MAP; * processors that need to fail in order for a given backup * task to become active */ -class FailureMapFinder : public std::unary_function <Task, - PROCESSOR_SET> +class FailureMapFinder : public ReplicaFinder { public: - FailureMapFinder (const FAILURE_MAP & failure_map); + FailureMapFinder (const REPLICA_GROUPS & rep_groups, + const FAILURE_MAP & failure_map); - PROCESSOR_SET operator () (const Task & task); + virtual PROCESSOR_SET operator () (const Task & task) const; private: const FAILURE_MAP & failure_map_; @@ -71,6 +77,7 @@ private: private: FAILURE_MAP failure_map_; + FailureMapFinder replica_finder_; }; std::ostream & operator<< (std::ostream & ostr, diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp index b94f03fa0e8..3d6d3403a27 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp @@ -115,8 +115,12 @@ ReplicaFinder::ReplicaFinder (const REPLICA_GROUPS & rep_groups) { } +ReplicaFinder::~ReplicaFinder (void) +{ +} + PROCESSOR_SET -ReplicaFinder::operator () (const Task & task) +ReplicaFinder::operator () (const Task & task) const { PROCESSOR_SET result; diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h index cd2ff76f241..0a4b4fc353b 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h @@ -104,10 +104,12 @@ class ReplicaFinder : public std::unary_function <Task, public: ReplicaFinder (const REPLICA_GROUPS & rep_groups); - PROCESSOR_SET operator () (const Task & task); + virtual ~ReplicaFinder (void); + + virtual PROCESSOR_SET operator () (const Task & task) const; private: - const REPLICA_GROUPS rep_groups_; + const REPLICA_GROUPS & rep_groups_; ProcessorPicker processor_picker_; }; |