Throttle.hh (7054:7d6862b80049) Throttle.hh (7055:4e24742201d7)
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 24 unchanged lines hidden (view full) ---

33 * *after* the output port, means the message is put in the output
34 * port of the PerfectSwitch (a intermediateBuffers) first, then go
35 * through the Throttle.
36 */
37
38#ifndef __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
39#define __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
40
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 24 unchanged lines hidden (view full) ---

33 * *after* the output port, means the message is put in the output
34 * port of the PerfectSwitch (a intermediateBuffers) first, then go
35 * through the Throttle.
36 */
37
38#ifndef __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
39#define __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
40
41#include <iostream>
42
41#include "mem/gems_common/Vector.hh"
42#include "mem/ruby/common/Consumer.hh"
43#include "mem/ruby/common/Global.hh"
44#include "mem/ruby/network/Network.hh"
45#include "mem/ruby/system/NodeID.hh"
46#include "mem/ruby/system/System.hh"
47
48class MessageBuffer;

--- 5 unchanged lines hidden (view full) ---

54 int link_bandwidth_multiplier);
55 Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier);
56 ~Throttle() {}
57
58 void addLinks(const Vector<MessageBuffer*>& in_vec,
59 const Vector<MessageBuffer*>& out_vec);
60 void wakeup();
61
43#include "mem/gems_common/Vector.hh"
44#include "mem/ruby/common/Consumer.hh"
45#include "mem/ruby/common/Global.hh"
46#include "mem/ruby/network/Network.hh"
47#include "mem/ruby/system/NodeID.hh"
48#include "mem/ruby/system/System.hh"
49
50class MessageBuffer;

--- 5 unchanged lines hidden (view full) ---

56 int link_bandwidth_multiplier);
57 Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier);
58 ~Throttle() {}
59
60 void addLinks(const Vector<MessageBuffer*>& in_vec,
61 const Vector<MessageBuffer*>& out_vec);
62 void wakeup();
63
62 void printStats(ostream& out) const;
64 void printStats(std::ostream& out) const;
63 void clearStats();
65 void clearStats();
64 void printConfig(ostream& out) const;
66 void printConfig(std::ostream& out) const;
65 // The average utilization (a percent) since last clearStats()
66 double getUtilization() const;
67 int
68 getLinkBandwidth() const
69 {
70 return RubySystem::getNetwork()->getEndpointBandwidth() *
71 m_link_bandwidth_multiplier;
72 }
73 int getLatency() const { return m_link_latency; }
74
75 const Vector<Vector<int> >&
76 getCounters() const
77 {
78 return m_message_counters;
79 }
80
81 void clear();
82
67 // The average utilization (a percent) since last clearStats()
68 double getUtilization() const;
69 int
70 getLinkBandwidth() const
71 {
72 return RubySystem::getNetwork()->getEndpointBandwidth() *
73 m_link_bandwidth_multiplier;
74 }
75 int getLatency() const { return m_link_latency; }
76
77 const Vector<Vector<int> >&
78 getCounters() const
79 {
80 return m_message_counters;
81 }
82
83 void clear();
84
83 void print(ostream& out) const;
85 void print(std::ostream& out) const;
84
85 private:
86 void init(NodeID node, int link_latency, int link_bandwidth_multiplier);
87 void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
88 void linkUtilized(double ratio) { m_links_utilized += ratio; }
89
90 // Private copy constructor and assignment operator
91 Throttle(const Throttle& obj);

--- 10 unchanged lines hidden (view full) ---

102 int m_link_latency;
103 int m_wakeups_wo_switch;
104
105 // For tracking utilization
106 Time m_ruby_start;
107 double m_links_utilized;
108};
109
86
87 private:
88 void init(NodeID node, int link_latency, int link_bandwidth_multiplier);
89 void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
90 void linkUtilized(double ratio) { m_links_utilized += ratio; }
91
92 // Private copy constructor and assignment operator
93 Throttle(const Throttle& obj);

--- 10 unchanged lines hidden (view full) ---

104 int m_link_latency;
105 int m_wakeups_wo_switch;
106
107 // For tracking utilization
108 Time m_ruby_start;
109 double m_links_utilized;
110};
111
110inline ostream&
111operator<<(ostream& out, const Throttle& obj)
112inline std::ostream&
113operator<<(std::ostream& out, const Throttle& obj)
112{
113 obj.print(out);
114{
115 obj.print(out);
114 out << flush;
116 out << std::flush;
115 return out;
116}
117
118#endif // __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
117 return out;
118}
119
120#endif // __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__