virtual void makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration) = 0;
+ const NetDest& routing_table_entry) = 0;
virtual void makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration) = 0;
+ const NetDest& routing_table_entry) = 0;
virtual void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration) = 0;
+ const NetDest& routing_table_entry) = 0;
virtual void reset() = 0;
}
void
-Topology::createLinks(Network *net, bool isReconfiguration)
+Topology::createLinks(Network *net)
{
// Find maximum switchID
SwitchID max_switch_id = 0;
for (int j = 0; j < topology_weights[i].size(); j++) {
int weight = topology_weights[i][j];
if (weight > 0 && weight != INFINITE_LATENCY) {
- NetDest destination_set = shortest_path_to_node(i, j,
- topology_weights, dist);
- makeLink(net, i, j, destination_set, isReconfiguration);
+ NetDest destination_set =
+ shortest_path_to_node(i, j, topology_weights, dist);
+ makeLink(net, i, j, destination_set);
}
}
}
void
Topology::makeLink(Network *net, SwitchID src, SwitchID dest,
- const NetDest& routing_table_entry, bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
// Make sure we're not trying to connect two end-point nodes
// directly together
src_dest.second = dest;
link_entry = m_link_map[src_dest];
net->makeInLink(src, dest - (2 * m_nodes), link_entry.link,
- link_entry.direction,
- routing_table_entry,
- isReconfiguration);
+ link_entry.direction, routing_table_entry);
} else if (dest < 2*m_nodes) {
assert(dest >= m_nodes);
NodeID node = dest - m_nodes;
src_dest.second = dest;
link_entry = m_link_map[src_dest];
net->makeOutLink(src - (2 * m_nodes), node, link_entry.link,
- link_entry.direction,
- routing_table_entry,
- isReconfiguration);
+ link_entry.direction, routing_table_entry);
} else {
assert((src >= 2 * m_nodes) && (dest >= 2 * m_nodes));
src_dest.first = src;
link_entry = m_link_map[src_dest];
net->makeInternalLink(src - (2 * m_nodes), dest - (2 * m_nodes),
link_entry.link, link_entry.direction,
- routing_table_entry, isReconfiguration);
+ routing_table_entry);
}
}
std::vector<BasicIntLink *> int_links);
uint32_t numSwitches() const { return m_number_of_switches; }
- void createLinks(Network *net, bool isReconfiguration);
+ void createLinks(Network *net);
void print(std::ostream& out) const { out << "[Topology]"; }
protected:
void addLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection dir);
void makeLink(Network *net, SwitchID src, SwitchID dest,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
NodeID m_nodes;
uint32_t m_number_of_switches;
ni->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
m_ni_ptr_vector.push_back(ni);
}
- // false because this isn't a reconfiguration
- m_topology_ptr->createLinks(this, false);
+ m_topology_ptr->createLinks(this);
// initialize the link's network pointers
for (vector<NetworkLink_d*>::const_iterator i = m_link_ptr_vector.begin();
void
GarnetNetwork_d::makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(src < m_nodes);
GarnetExtLink_d* garnet_link = safe_cast<GarnetExtLink_d*>(link);
+ NetworkLink_d* net_link = garnet_link->m_network_links[direction];
+ CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
- if (!isReconfiguration) {
- NetworkLink_d* net_link = garnet_link->m_network_links[direction];
- CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
+ m_link_ptr_vector.push_back(net_link);
+ m_creditlink_ptr_vector.push_back(credit_link);
- m_link_ptr_vector.push_back(net_link);
- m_creditlink_ptr_vector.push_back(credit_link);
-
- m_router_ptr_vector[dest]->addInPort(net_link, credit_link);
- m_ni_ptr_vector[src]->addOutPort(net_link, credit_link);
- } else {
- panic("Fatal Error:: Reconfiguration not allowed here");
- // do nothing
- }
+ m_router_ptr_vector[dest]->addInPort(net_link, credit_link);
+ m_ni_ptr_vector[src]->addOutPort(net_link, credit_link);
}
/*
void
GarnetNetwork_d::makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(dest < m_nodes);
assert(src < m_router_ptr_vector.size());
assert(m_router_ptr_vector[src] != NULL);
GarnetExtLink_d* garnet_link = safe_cast<GarnetExtLink_d*>(link);
+ NetworkLink_d* net_link = garnet_link->m_network_links[direction];
+ CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
- if (!isReconfiguration) {
- NetworkLink_d* net_link = garnet_link->m_network_links[direction];
- CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
-
- m_link_ptr_vector.push_back(net_link);
- m_creditlink_ptr_vector.push_back(credit_link);
+ m_link_ptr_vector.push_back(net_link);
+ m_creditlink_ptr_vector.push_back(credit_link);
- m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
- link->m_weight,
- credit_link);
- m_ni_ptr_vector[dest]->addInPort(net_link, credit_link);
- } else {
- fatal("Fatal Error:: Reconfiguration not allowed here");
- // do nothing
- }
+ m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
+ link->m_weight, credit_link);
+ m_ni_ptr_vector[dest]->addInPort(net_link, credit_link);
}
/*
void
GarnetNetwork_d::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
GarnetIntLink_d* garnet_link = safe_cast<GarnetIntLink_d*>(link);
+ NetworkLink_d* net_link = garnet_link->m_network_links[direction];
+ CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
- if (!isReconfiguration) {
- NetworkLink_d* net_link = garnet_link->m_network_links[direction];
- CreditLink_d* credit_link = garnet_link->m_credit_links[direction];
-
- m_link_ptr_vector.push_back(net_link);
- m_creditlink_ptr_vector.push_back(credit_link);
+ m_link_ptr_vector.push_back(net_link);
+ m_creditlink_ptr_vector.push_back(credit_link);
- m_router_ptr_vector[dest]->addInPort(net_link, credit_link);
- m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
- link->m_weight,
- credit_link);
- } else {
- fatal("Fatal Error:: Reconfiguration not allowed here");
- // do nothing
- }
+ m_router_ptr_vector[dest]->addInPort(net_link, credit_link);
+ m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
+ link->m_weight, credit_link);
}
void
// Methods used by Topology to setup the network
void makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
//! Function for performing a functional write. The return value
//! indicates the number of messages that were written.
m_ni_ptr_vector.push_back(ni);
}
- // false because this isn't a reconfiguration :
- m_topology_ptr->createLinks(this, false);
+ m_topology_ptr->createLinks(this);
}
GarnetNetwork::~GarnetNetwork()
void
GarnetNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(src < m_nodes);
GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
+ NetworkLink *net_link = garnet_link->m_network_links[direction];
- if (!isReconfiguration) {
- NetworkLink *net_link = garnet_link->m_network_links[direction];
- net_link->init_net_ptr(this);
- m_link_ptr_vector.push_back(net_link);
- m_router_ptr_vector[dest]->addInPort(net_link);
- m_ni_ptr_vector[src]->addOutPort(net_link);
- } else {
- fatal("Fatal Error:: Reconfiguration not allowed here");
- // do nothing
- }
+ net_link->init_net_ptr(this);
+ m_link_ptr_vector.push_back(net_link);
+ m_router_ptr_vector[dest]->addInPort(net_link);
+ m_ni_ptr_vector[src]->addOutPort(net_link);
}
void
GarnetNetwork::makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(dest < m_nodes);
assert(src < m_router_ptr_vector.size());
assert(m_router_ptr_vector[src] != NULL);
GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
+ NetworkLink *net_link = garnet_link->m_network_links[direction];
- if (!isReconfiguration) {
- NetworkLink *net_link = garnet_link->m_network_links[direction];
- net_link->init_net_ptr(this);
- m_link_ptr_vector.push_back(net_link);
- m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
- link->m_weight);
- m_ni_ptr_vector[dest]->addInPort(net_link);
- } else {
- fatal("Fatal Error:: Reconfiguration not allowed here");
- //do nothing
- }
+ net_link->init_net_ptr(this);
+ m_link_ptr_vector.push_back(net_link);
+ m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
+ link->m_weight);
+ m_ni_ptr_vector[dest]->addInPort(net_link);
}
void
GarnetNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
+ NetworkLink *net_link = garnet_link->m_network_links[direction];
- if (!isReconfiguration) {
- NetworkLink *net_link = garnet_link->m_network_links[direction];
- net_link->init_net_ptr(this);
- m_link_ptr_vector.push_back(net_link);
- m_router_ptr_vector[dest]->addInPort(net_link);
- m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
- link->m_weight);
- } else {
- fatal("Fatal Error:: Reconfiguration not allowed here");
- // do nothing
- }
+ net_link->init_net_ptr(this);
+ m_link_ptr_vector.push_back(net_link);
+ m_router_ptr_vector[dest]->addInPort(net_link);
+ m_router_ptr_vector[src]->addOutPort(net_link, routing_table_entry,
+ link->m_weight);
}
// Methods used by Topology to setup the network
void makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
//! Function for performing a functional read. The return value
//! indicates if a message was found that had the required address.
// The topology pointer should have already been initialized in
// the parent class network constructor.
assert(m_topology_ptr != NULL);
- // false because this isn't a reconfiguration
- m_topology_ptr->createLinks(this, false);
+ m_topology_ptr->createLinks(this);
}
void
void
SimpleNetwork::makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(dest < m_nodes);
assert(src < m_switch_ptr_vector.size());
assert(m_switch_ptr_vector[src] != NULL);
- if (isReconfiguration) {
- m_switch_ptr_vector[src]->reconfigureOutPort(routing_table_entry);
- return;
- }
-
SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link);
m_switch_ptr_vector[src]->addOutPort(m_fromNetQueues[dest],
void
SimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
assert(src < m_nodes);
- if (isReconfiguration) {
- // do nothing
- return;
- }
-
m_switch_ptr_vector[dest]->addInPort(m_toNetQueues[src]);
}
void
SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration)
+ const NetDest& routing_table_entry)
{
- if (isReconfiguration) {
- m_switch_ptr_vector[src]->reconfigureOutPort(routing_table_entry);
- return;
- }
-
// Create a set of new MessageBuffers
std::vector<MessageBuffer*> queues;
for (int i = 0; i < m_virtual_networks; i++) {
// Methods used by Topology to setup the network
void makeOutLink(SwitchID src, NodeID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
- void makeInLink(NodeID src, SwitchID dest, BasicLink* link,
+ const NetDest& routing_table_entry);
+ void makeInLink(NodeID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
LinkDirection direction,
- const NetDest& routing_table_entry,
- bool isReconfiguration);
+ const NetDest& routing_table_entry);
void print(std::ostream& out) const;