summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 03:18:20 +0000
committerwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 03:18:20 +0000
commit6c7bd63870ab514a6ce8475123289483e899a12d (patch)
treeda3d0b1d108ad2f8bf784bc386526d94db56f140
parent2112ec6d2e6af854ab6db5b4565aee05f2c7b282 (diff)
downloadATCD-6c7bd63870ab514a6ce8475123289483e899a12d.tar.gz
added optimization, using a hash map
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc4
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp7
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h5
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.cpp59
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h17
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp6
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h6
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_;
};