network: moved network config params
Moved the buffer_size, endpoint_bandwidth, and adaptive_routing params out of the top-level parent network object and to only those networks that actually use those parameters.
This commit is contained in:
parent
8733ed4b7d
commit
491cc1a9f4
|
@ -36,9 +36,6 @@ Network::Network(const Params *p)
|
||||||
{
|
{
|
||||||
m_virtual_networks = p->number_of_virtual_networks;
|
m_virtual_networks = p->number_of_virtual_networks;
|
||||||
m_topology_ptr = p->topology;
|
m_topology_ptr = p->topology;
|
||||||
m_buffer_size = p->buffer_size;
|
|
||||||
m_endpoint_bandwidth = p->endpoint_bandwidth;
|
|
||||||
m_adaptive_routing = p->adaptive_routing;
|
|
||||||
m_link_latency = p->link_latency;
|
m_link_latency = p->link_latency;
|
||||||
m_control_msg_size = p->control_msg_size;
|
m_control_msg_size = p->control_msg_size;
|
||||||
|
|
||||||
|
|
|
@ -66,10 +66,7 @@ class Network : public SimObject
|
||||||
|
|
||||||
virtual void init();
|
virtual void init();
|
||||||
|
|
||||||
int getBufferSize() { return m_buffer_size; }
|
|
||||||
int getNumberOfVirtualNetworks() { return m_virtual_networks; }
|
int getNumberOfVirtualNetworks() { return m_virtual_networks; }
|
||||||
int getEndpointBandwidth() { return m_endpoint_bandwidth; }
|
|
||||||
bool getAdaptiveRouting() {return m_adaptive_routing; }
|
|
||||||
int getLinkLatency() { return m_link_latency; }
|
int getLinkLatency() { return m_link_latency; }
|
||||||
int MessageSizeType_to_int(MessageSizeType size_type);
|
int MessageSizeType_to_int(MessageSizeType size_type);
|
||||||
|
|
||||||
|
@ -110,10 +107,7 @@ class Network : public SimObject
|
||||||
const std::string m_name;
|
const std::string m_name;
|
||||||
int m_nodes;
|
int m_nodes;
|
||||||
int m_virtual_networks;
|
int m_virtual_networks;
|
||||||
int m_buffer_size;
|
|
||||||
int m_endpoint_bandwidth;
|
|
||||||
Topology* m_topology_ptr;
|
Topology* m_topology_ptr;
|
||||||
bool m_adaptive_routing;
|
|
||||||
int m_link_latency;
|
int m_link_latency;
|
||||||
int m_control_msg_size;
|
int m_control_msg_size;
|
||||||
int m_data_msg_size;
|
int m_data_msg_size;
|
||||||
|
|
|
@ -47,10 +47,6 @@ class RubyNetwork(SimObject):
|
||||||
abstract = True
|
abstract = True
|
||||||
number_of_virtual_networks = Param.Int(10, "");
|
number_of_virtual_networks = Param.Int(10, "");
|
||||||
topology = Param.Topology("");
|
topology = Param.Topology("");
|
||||||
buffer_size = Param.Int(0,
|
|
||||||
"default buffer size; 0 indicates infinite buffering");
|
|
||||||
endpoint_bandwidth = Param.Int(10000, "");
|
|
||||||
adaptive_routing = Param.Bool(False, "enable adaptive routing");
|
|
||||||
link_latency = Param.Int(1,
|
link_latency = Param.Int(1,
|
||||||
"local memory latency ?? NetworkLinkLatency");
|
"local memory latency ?? NetworkLinkLatency");
|
||||||
control_msg_size = Param.Int(8, "");
|
control_msg_size = Param.Int(8, "");
|
||||||
|
|
|
@ -48,6 +48,8 @@ using m5::stl_helpers::deletePointers;
|
||||||
GarnetNetwork::GarnetNetwork(const Params *p)
|
GarnetNetwork::GarnetNetwork(const Params *p)
|
||||||
: BaseGarnetNetwork(p)
|
: BaseGarnetNetwork(p)
|
||||||
{
|
{
|
||||||
|
m_buffer_size = p->buffer_size;
|
||||||
|
|
||||||
m_ruby_start = 0;
|
m_ruby_start = 0;
|
||||||
m_flits_received = 0;
|
m_flits_received = 0;
|
||||||
m_flits_injected = 0;
|
m_flits_injected = 0;
|
||||||
|
|
|
@ -56,6 +56,8 @@ class GarnetNetwork : public BaseGarnetNetwork
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
int getBufferSize() { return m_buffer_size; }
|
||||||
|
|
||||||
// returns the queue requested for the given component
|
// returns the queue requested for the given component
|
||||||
MessageBuffer* getToNetQueue(NodeID id, bool ordered, int network_num);
|
MessageBuffer* getToNetQueue(NodeID id, bool ordered, int network_num);
|
||||||
MessageBuffer* getFromNetQueue(NodeID id, bool ordered, int network_num);
|
MessageBuffer* getFromNetQueue(NodeID id, bool ordered, int network_num);
|
||||||
|
@ -122,6 +124,7 @@ class GarnetNetwork : public BaseGarnetNetwork
|
||||||
std::vector<NetworkInterface *> m_ni_ptr_vector; // All NI's in Network
|
std::vector<NetworkInterface *> m_ni_ptr_vector; // All NI's in Network
|
||||||
|
|
||||||
Time m_ruby_start;
|
Time m_ruby_start;
|
||||||
|
int m_buffer_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::ostream&
|
inline std::ostream&
|
||||||
|
|
|
@ -33,4 +33,6 @@ from BaseGarnetNetwork import BaseGarnetNetwork
|
||||||
|
|
||||||
class GarnetNetwork(BaseGarnetNetwork):
|
class GarnetNetwork(BaseGarnetNetwork):
|
||||||
type = 'GarnetNetwork'
|
type = 'GarnetNetwork'
|
||||||
|
buffer_size = Param.Int(0,
|
||||||
|
"default buffer size; 0 indicates infinite buffering");
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,10 @@ Network::createNetwork(int nodes)
|
||||||
SimpleNetwork::SimpleNetwork(const Params *p)
|
SimpleNetwork::SimpleNetwork(const Params *p)
|
||||||
: Network(p)
|
: Network(p)
|
||||||
{
|
{
|
||||||
|
m_buffer_size = p->buffer_size;
|
||||||
|
m_endpoint_bandwidth = p->endpoint_bandwidth;
|
||||||
|
m_adaptive_routing = p->adaptive_routing;
|
||||||
|
|
||||||
// Note: the parent Network Object constructor is called before the
|
// Note: the parent Network Object constructor is called before the
|
||||||
// SimpleNetwork child constructor. Therefore, the member variables
|
// SimpleNetwork child constructor. Therefore, the member variables
|
||||||
// used below should already be initialized.
|
// used below should already be initialized.
|
||||||
|
|
|
@ -53,6 +53,10 @@ class SimpleNetwork : public Network
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
int getBufferSize() { return m_buffer_size; }
|
||||||
|
int getEndpointBandwidth() { return m_endpoint_bandwidth; }
|
||||||
|
bool getAdaptiveRouting() {return m_adaptive_routing; }
|
||||||
|
|
||||||
void printStats(std::ostream& out) const;
|
void printStats(std::ostream& out) const;
|
||||||
void clearStats();
|
void clearStats();
|
||||||
void printConfig(std::ostream& out) const;
|
void printConfig(std::ostream& out) const;
|
||||||
|
@ -107,6 +111,10 @@ class SimpleNetwork : public Network
|
||||||
std::vector<Switch*> m_switch_ptr_vector;
|
std::vector<Switch*> m_switch_ptr_vector;
|
||||||
std::vector<MessageBuffer*> m_buffers_to_free;
|
std::vector<MessageBuffer*> m_buffers_to_free;
|
||||||
std::vector<Switch*> m_endpoint_switches;
|
std::vector<Switch*> m_endpoint_switches;
|
||||||
|
|
||||||
|
int m_buffer_size;
|
||||||
|
int m_endpoint_bandwidth;
|
||||||
|
bool m_adaptive_routing;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::ostream&
|
inline std::ostream&
|
||||||
|
|
|
@ -32,3 +32,7 @@ from Network import RubyNetwork
|
||||||
|
|
||||||
class SimpleNetwork(RubyNetwork):
|
class SimpleNetwork(RubyNetwork):
|
||||||
type = 'SimpleNetwork'
|
type = 'SimpleNetwork'
|
||||||
|
buffer_size = Param.Int(0,
|
||||||
|
"default buffer size; 0 indicates infinite buffering");
|
||||||
|
endpoint_bandwidth = Param.Int(10000, "");
|
||||||
|
adaptive_routing = Param.Bool(False, "enable adaptive routing");
|
||||||
|
|
|
@ -33,9 +33,9 @@
|
||||||
#include "mem/protocol/Protocol.hh"
|
#include "mem/protocol/Protocol.hh"
|
||||||
#include "mem/ruby/buffers/MessageBuffer.hh"
|
#include "mem/ruby/buffers/MessageBuffer.hh"
|
||||||
#include "mem/ruby/network/simple/PerfectSwitch.hh"
|
#include "mem/ruby/network/simple/PerfectSwitch.hh"
|
||||||
|
#include "mem/ruby/network/simple/SimpleNetwork.hh"
|
||||||
#include "mem/ruby/network/simple/Switch.hh"
|
#include "mem/ruby/network/simple/Switch.hh"
|
||||||
#include "mem/ruby/network/simple/Throttle.hh"
|
#include "mem/ruby/network/simple/Throttle.hh"
|
||||||
#include "mem/ruby/network/Network.hh"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using m5::stl_helpers::deletePointers;
|
using m5::stl_helpers::deletePointers;
|
||||||
|
@ -69,10 +69,12 @@ Switch::addOutPort(const vector<MessageBuffer*>& out,
|
||||||
const NetDest& routing_table_entry, int link_latency, int bw_multiplier)
|
const NetDest& routing_table_entry, int link_latency, int bw_multiplier)
|
||||||
{
|
{
|
||||||
Throttle* throttle_ptr = NULL;
|
Throttle* throttle_ptr = NULL;
|
||||||
|
SimpleNetwork* net_ptr =
|
||||||
|
safe_cast<SimpleNetwork*>(RubySystem::getNetwork());
|
||||||
|
|
||||||
// Create a throttle
|
// Create a throttle
|
||||||
throttle_ptr = new Throttle(m_switch_id, m_throttles.size(), link_latency,
|
throttle_ptr = new Throttle(m_switch_id, m_throttles.size(), link_latency,
|
||||||
bw_multiplier);
|
bw_multiplier, net_ptr->getEndpointBandwidth());
|
||||||
m_throttles.push_back(throttle_ptr);
|
m_throttles.push_back(throttle_ptr);
|
||||||
|
|
||||||
// Create one buffer per vnet (these are intermediaryQueues)
|
// Create one buffer per vnet (these are intermediaryQueues)
|
||||||
|
@ -81,7 +83,6 @@ Switch::addOutPort(const vector<MessageBuffer*>& out,
|
||||||
MessageBuffer* buffer_ptr = new MessageBuffer;
|
MessageBuffer* buffer_ptr = new MessageBuffer;
|
||||||
// Make these queues ordered
|
// Make these queues ordered
|
||||||
buffer_ptr->setOrdering(true);
|
buffer_ptr->setOrdering(true);
|
||||||
Network* net_ptr = RubySystem::getNetwork();
|
|
||||||
if (net_ptr->getBufferSize() > 0) {
|
if (net_ptr->getBufferSize() > 0) {
|
||||||
buffer_ptr->resize(net_ptr->getBufferSize());
|
buffer_ptr->resize(net_ptr->getBufferSize());
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ class PerfectSwitch;
|
||||||
class NetDest;
|
class NetDest;
|
||||||
class SimpleNetwork;
|
class SimpleNetwork;
|
||||||
class Throttle;
|
class Throttle;
|
||||||
class Network;
|
|
||||||
|
|
||||||
class Switch
|
class Switch
|
||||||
{
|
{
|
||||||
|
@ -79,7 +78,7 @@ class Switch
|
||||||
Switch& operator=(const Switch& obj);
|
Switch& operator=(const Switch& obj);
|
||||||
|
|
||||||
PerfectSwitch* m_perfect_switch_ptr;
|
PerfectSwitch* m_perfect_switch_ptr;
|
||||||
Network* m_network_ptr;
|
SimpleNetwork* m_network_ptr;
|
||||||
std::vector<Throttle*> m_throttles;
|
std::vector<Throttle*> m_throttles;
|
||||||
std::vector<MessageBuffer*> m_buffers_to_free;
|
std::vector<MessageBuffer*> m_buffers_to_free;
|
||||||
SwitchID m_switch_id;
|
SwitchID m_switch_id;
|
||||||
|
|
|
@ -49,21 +49,22 @@ const int PRIORITY_SWITCH_LIMIT = 128;
|
||||||
static int network_message_to_size(NetworkMessage* net_msg_ptr);
|
static int network_message_to_size(NetworkMessage* net_msg_ptr);
|
||||||
|
|
||||||
Throttle::Throttle(int sID, NodeID node, int link_latency,
|
Throttle::Throttle(int sID, NodeID node, int link_latency,
|
||||||
int link_bandwidth_multiplier)
|
int link_bandwidth_multiplier, int endpoint_bandwidth)
|
||||||
{
|
{
|
||||||
init(node, link_latency, link_bandwidth_multiplier);
|
init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth);
|
||||||
m_sID = sID;
|
m_sID = sID;
|
||||||
}
|
}
|
||||||
|
|
||||||
Throttle::Throttle(NodeID node, int link_latency,
|
Throttle::Throttle(NodeID node, int link_latency,
|
||||||
int link_bandwidth_multiplier)
|
int link_bandwidth_multiplier, int endpoint_bandwidth)
|
||||||
{
|
{
|
||||||
init(node, link_latency, link_bandwidth_multiplier);
|
init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth);
|
||||||
m_sID = 0;
|
m_sID = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Throttle::init(NodeID node, int link_latency, int link_bandwidth_multiplier)
|
Throttle::init(NodeID node, int link_latency, int link_bandwidth_multiplier,
|
||||||
|
int endpoint_bandwidth)
|
||||||
{
|
{
|
||||||
m_node = node;
|
m_node = node;
|
||||||
m_vnets = 0;
|
m_vnets = 0;
|
||||||
|
@ -71,6 +72,7 @@ Throttle::init(NodeID node, int link_latency, int link_bandwidth_multiplier)
|
||||||
assert(link_bandwidth_multiplier > 0);
|
assert(link_bandwidth_multiplier > 0);
|
||||||
m_link_bandwidth_multiplier = link_bandwidth_multiplier;
|
m_link_bandwidth_multiplier = link_bandwidth_multiplier;
|
||||||
m_link_latency = link_latency;
|
m_link_latency = link_latency;
|
||||||
|
m_endpoint_bandwidth = endpoint_bandwidth;
|
||||||
|
|
||||||
m_wakeups_wo_switch = 0;
|
m_wakeups_wo_switch = 0;
|
||||||
clearStats();
|
clearStats();
|
||||||
|
|
|
@ -54,8 +54,9 @@ class Throttle : public Consumer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Throttle(int sID, NodeID node, int link_latency,
|
Throttle(int sID, NodeID node, int link_latency,
|
||||||
int link_bandwidth_multiplier);
|
int link_bandwidth_multiplier, int endpoint_bandwidth);
|
||||||
Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier);
|
Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier,
|
||||||
|
int endpoint_bandwidth);
|
||||||
~Throttle() {}
|
~Throttle() {}
|
||||||
|
|
||||||
std::string name()
|
std::string name()
|
||||||
|
@ -73,8 +74,7 @@ class Throttle : public Consumer
|
||||||
int
|
int
|
||||||
getLinkBandwidth() const
|
getLinkBandwidth() const
|
||||||
{
|
{
|
||||||
return RubySystem::getNetwork()->getEndpointBandwidth() *
|
return m_endpoint_bandwidth * m_link_bandwidth_multiplier;
|
||||||
m_link_bandwidth_multiplier;
|
|
||||||
}
|
}
|
||||||
int getLatency() const { return m_link_latency; }
|
int getLatency() const { return m_link_latency; }
|
||||||
|
|
||||||
|
@ -89,7 +89,8 @@ class Throttle : public Consumer
|
||||||
void print(std::ostream& out) const;
|
void print(std::ostream& out) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init(NodeID node, int link_latency, int link_bandwidth_multiplier);
|
void init(NodeID node, int link_latency, int link_bandwidth_multiplier,
|
||||||
|
int endpoint_bandwidth);
|
||||||
void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
|
void addVirtualNetwork(MessageBuffer* in_ptr, MessageBuffer* out_ptr);
|
||||||
void linkUtilized(double ratio) { m_links_utilized += ratio; }
|
void linkUtilized(double ratio) { m_links_utilized += ratio; }
|
||||||
|
|
||||||
|
@ -107,6 +108,7 @@ class Throttle : public Consumer
|
||||||
int m_link_bandwidth_multiplier;
|
int m_link_bandwidth_multiplier;
|
||||||
int m_link_latency;
|
int m_link_latency;
|
||||||
int m_wakeups_wo_switch;
|
int m_wakeups_wo_switch;
|
||||||
|
int m_endpoint_bandwidth;
|
||||||
|
|
||||||
// For tracking utilization
|
// For tracking utilization
|
||||||
Time m_ruby_start;
|
Time m_ruby_start;
|
||||||
|
|
Loading…
Reference in a new issue