#include <vector>
#include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/common/Global.hh"
#include "mem/ruby/network/Network.hh"
#include "mem/ruby/system/System.hh"
class Throttle : public Consumer
{
public:
- Throttle(int sID, NodeID node, Cycles link_latency,
+ Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency,
+ int link_bandwidth_multiplier, int endpoint_bandwidth,
+ ClockedObject *em);
+ Throttle(RubySystem *rs, NodeID node, Cycles link_latency,
int link_bandwidth_multiplier, int endpoint_bandwidth,
ClockedObject *em);
- Throttle(NodeID node, Cycles link_latency, int link_bandwidth_multiplier,
- int endpoint_bandwidth, ClockedObject *em);
~Throttle() {}
std::string name()
{ return csprintf("Throttle-%i", m_sID); }
- void addLinks(const std::map<int, MessageBuffer*>& in_vec,
- const std::map<int, MessageBuffer*>& out_vec);
+ void addLinks(const std::vector<MessageBuffer*>& in_vec,
+ const std::vector<MessageBuffer*>& out_vec);
void wakeup();
// The average utilization (a fraction) since last clearStats()
Throttle(const Throttle& obj);
Throttle& operator=(const Throttle& obj);
- std::map<int, MessageBuffer*> m_in;
- std::map<int, MessageBuffer*> m_out;
- std::map<int, int> m_units_remaining;
+ std::vector<MessageBuffer*> m_in;
+ std::vector<MessageBuffer*> m_out;
+ unsigned int m_vnets;
+ std::vector<int> m_units_remaining;
int m_sID;
NodeID m_node;
Cycles m_link_latency;
int m_wakeups_wo_switch;
int m_endpoint_bandwidth;
+ RubySystem *m_ruby_system;
// Statistical variables
Stats::Scalar m_link_utilization;