summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/simple/Throttle.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/simple/Throttle.hh')
-rw-r--r--src/mem/ruby/network/simple/Throttle.hh151
1 files changed, 74 insertions, 77 deletions
diff --git a/src/mem/ruby/network/simple/Throttle.hh b/src/mem/ruby/network/simple/Throttle.hh
index 20aeed820..608754190 100644
--- a/src/mem/ruby/network/simple/Throttle.hh
+++ b/src/mem/ruby/network/simple/Throttle.hh
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
* All rights reserved.
@@ -28,94 +27,92 @@
*/
/*
- * $Id$
- *
- * Description: The class to implement bandwidth and latency throttle. An
- * instance of consumer class that can be woke up. It is only used
- * to control bandwidth at output port of a switch. And the
- * throttle is added *after* the output port, means the message is
- * put in the output port of the PerfectSwitch (a
- * intermediateBuffers) first, then go through the Throttle.
- *
+ * The class to implement bandwidth and latency throttle. An instance
+ * of consumer class that can be woke up. It is only used to control
+ * bandwidth at output port of a switch. And the throttle is added
+ * *after* the output port, means the message is put in the output
+ * port of the PerfectSwitch (a intermediateBuffers) first, then go
+ * through the Throttle.
*/
-#ifndef THROTTLE_H
-#define THROTTLE_H
+#ifndef __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
+#define __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
-#include "mem/ruby/common/Global.hh"
#include "mem/gems_common/Vector.hh"
#include "mem/ruby/common/Consumer.hh"
+#include "mem/ruby/common/Global.hh"
+#include "mem/ruby/network/Network.hh"
#include "mem/ruby/system/NodeID.hh"
#include "mem/ruby/system/System.hh"
-#include "mem/ruby/network/Network.hh"
class MessageBuffer;
-class Throttle : public Consumer {
-public:
- // Constructors
- Throttle(int sID, NodeID node, int link_latency, int link_bandwidth_multiplier);
- Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier);
-
- // Destructor
- ~Throttle() {}
-
- // Public Methods
- void addLinks(const Vector<MessageBuffer*>& in_vec, const Vector<MessageBuffer*>& out_vec);
- void wakeup();
-
- void printStats(ostream& out) const;
- void clearStats();
- void printConfig(ostream& out) const;
- double getUtilization() const; // The average utilization (a percent) since last clearStats()
- int getLinkBandwidth() const { return RubySystem::getNetwork()->getEndpointBandwidth() * m_link_bandwidth_multiplier; }
- int getLatency() const { return m_link_latency; }
-
- const Vector<Vector<int> >& getCounters() const { return m_message_counters; }
-
- void clear();
-
- void print(ostream& out) const;
-
-private:
- // Private Methods
- void init(NodeID node, int link_latency, int link_bandwidth_multiplier);
- void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
- void linkUtilized(double ratio) { m_links_utilized += ratio; }
-
- // Private copy constructor and assignment operator
- Throttle(const Throttle& obj);
- Throttle& operator=(const Throttle& obj);
-
- // Data Members (m_ prefix)
- Vector<MessageBuffer*> m_in;
- Vector<MessageBuffer*> m_out;
- Vector<Vector<int> > m_message_counters;
- int m_vnets;
- Vector<int> m_units_remaining;
- int m_sID;
- NodeID m_node;
- int m_link_bandwidth_multiplier;
- int m_link_latency;
- int m_wakeups_wo_switch;
-
- // For tracking utilization
- Time m_ruby_start;
- double m_links_utilized;
+class Throttle : public Consumer
+{
+ public:
+ Throttle(int sID, NodeID node, int link_latency,
+ int link_bandwidth_multiplier);
+ Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier);
+ ~Throttle() {}
+
+ void addLinks(const Vector<MessageBuffer*>& in_vec,
+ const Vector<MessageBuffer*>& out_vec);
+ void wakeup();
+
+ void printStats(ostream& out) const;
+ void clearStats();
+ void printConfig(ostream& out) const;
+ // The average utilization (a percent) since last clearStats()
+ double getUtilization() const;
+ int
+ getLinkBandwidth() const
+ {
+ return RubySystem::getNetwork()->getEndpointBandwidth() *
+ m_link_bandwidth_multiplier;
+ }
+ int getLatency() const { return m_link_latency; }
+
+ const Vector<Vector<int> >&
+ getCounters() const
+ {
+ return m_message_counters;
+ }
+
+ void clear();
+
+ void print(ostream& out) const;
+
+ private:
+ void init(NodeID node, int link_latency, int link_bandwidth_multiplier);
+ void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
+ void linkUtilized(double ratio) { m_links_utilized += ratio; }
+
+ // Private copy constructor and assignment operator
+ Throttle(const Throttle& obj);
+ Throttle& operator=(const Throttle& obj);
+
+ Vector<MessageBuffer*> m_in;
+ Vector<MessageBuffer*> m_out;
+ Vector<Vector<int> > m_message_counters;
+ int m_vnets;
+ Vector<int> m_units_remaining;
+ int m_sID;
+ NodeID m_node;
+ int m_link_bandwidth_multiplier;
+ int m_link_latency;
+ int m_wakeups_wo_switch;
+
+ // For tracking utilization
+ Time m_ruby_start;
+ double m_links_utilized;
};
-// Output operator declaration
-ostream& operator<<(ostream& out, const Throttle& obj);
-
-// ******************* Definitions *******************
-
-// Output operator definition
-extern inline
-ostream& operator<<(ostream& out, const Throttle& obj)
+inline ostream&
+operator<<(ostream& out, const Throttle& obj)
{
- obj.print(out);
- out << flush;
- return out;
+ obj.print(out);
+ out << flush;
+ return out;
}
-#endif //THROTTLE_H
+#endif // __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__