network: set the ExtLink bw to 16 bytes
authorBrad Beckmann <Brad.Beckmann@amd.com>
Fri, 29 Apr 2011 00:18:14 +0000 (17:18 -0700)
committerBrad Beckmann <Brad.Beckmann@amd.com>
Fri, 29 Apr 2011 00:18:14 +0000 (17:18 -0700)
Therefore all links by default are 16 bytes wide and thus work with Garnet's
uniform link bandwidth assumption.

src/mem/ruby/network/BasicLink.py
src/mem/ruby/network/garnet/BaseGarnetNetwork.cc
src/mem/ruby/network/garnet/BaseGarnetNetwork.hh
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh

index fb73f9ac7d22fc76b286c6fdd7277ea0ab233db4..f73f5d97789598b0255b48ffad3e8579c535098f 100644 (file)
@@ -45,7 +45,7 @@ class BasicExtLink(BasicLink):
     type = 'BasicExtLink'
     ext_node = Param.RubyController("External node")
     int_node = Param.BasicRouter("ID of internal node")
-    bandwidth_factor = 64
+    bandwidth_factor = 16
 
 class BasicIntLink(BasicLink):
     type = 'BasicIntLink'
index 6c5e5710383103a34ac75cc31dc032105d3ea803..2e3cc8b2414a1a764b98056fa6f6d30cd87739ea 100644 (file)
@@ -28,6 +28,7 @@
  * Authors: Niket Agarwal
  */
 
+#include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/network/BasicLink.hh"
 #include "mem/ruby/network/Topology.hh"
 #include "mem/ruby/network/garnet/BaseGarnetNetwork.hh"
@@ -41,6 +42,12 @@ BaseGarnetNetwork::BaseGarnetNetwork(const Params *p)
     m_buffers_per_data_vc = p->buffers_per_data_vc;
     m_buffers_per_ctrl_vc = p->buffers_per_ctrl_vc;
 
+    m_ruby_start = 0;
+    m_flits_received = 0;
+    m_flits_injected = 0;
+    m_network_latency = 0.0;
+    m_queueing_latency = 0.0;
+
     // Currently Garnet only supports uniform bandwidth for all
     // links and network interfaces.
     for (std::vector<BasicExtLink*>::const_iterator i = 
@@ -59,6 +66,34 @@ BaseGarnetNetwork::BaseGarnetNetwork(const Params *p)
             fatal("Garnet only supports uniform bw across all links and NIs\n");
         }
     }
+
+    // Allocate to and from queues
+
+    // Queues that are getting messages from protocol
+    m_toNetQueues.resize(m_nodes);
+
+    // Queues that are feeding the protocol
+    m_fromNetQueues.resize(m_nodes);
+
+    m_in_use.resize(m_virtual_networks);
+    m_ordered.resize(m_virtual_networks);
+    for (int i = 0; i < m_virtual_networks; i++) {
+        m_in_use[i] = false;
+        m_ordered[i] = false;
+    }
+
+    for (int node = 0; node < m_nodes; node++) {
+        // Setting number of virtual message buffers per Network Queue
+        m_toNetQueues[node].resize(m_virtual_networks);
+        m_fromNetQueues[node].resize(m_virtual_networks);
+
+        // Instantiating the Message Buffers that
+        // interact with the coherence protocol
+        for (int j = 0; j < m_virtual_networks; j++) {
+            m_toNetQueues[node][j] = new MessageBuffer();
+            m_fromNetQueues[node][j] = new MessageBuffer();
+        }
+    }
 }
 
 void
index 4ff04b68351fcbdd19a963a9583c79c479bb389d..8e3115eb51e5fa101d457545c86ed1dd0e0805fc 100644 (file)
@@ -60,6 +60,19 @@ class BaseGarnetNetwork : public Network
     int m_vcs_per_class;
     int m_buffers_per_data_vc;
     int m_buffers_per_ctrl_vc;
+
+    int m_flits_received;
+    int m_flits_injected;
+    double m_network_latency;
+    double m_queueing_latency;
+
+    std::vector<bool> m_in_use;
+    std::vector<bool> m_ordered;
+
+    std::vector<std::vector<MessageBuffer*> > m_toNetQueues;
+    std::vector<std::vector<MessageBuffer*> > m_fromNetQueues;
+
+    Time m_ruby_start;
 };
 
 #endif // __MEM_RUBY_NETWORK_GARNET_BASEGARNETNETWORK_HH__
index 5aa9ceca863b8268d53b8fbcedaaaa2d372563d3..c8b9fbea71d8110de9c1d6ecd6980075a2665c64 100644 (file)
@@ -49,12 +49,6 @@ using m5::stl_helpers::deletePointers;
 GarnetNetwork_d::GarnetNetwork_d(const Params *p)
     : BaseGarnetNetwork(p)
 {
-    m_ruby_start = 0;
-    m_flits_received = 0;
-    m_flits_injected = 0;
-    m_network_latency = 0.0;
-    m_queueing_latency = 0.0;
-
     // record the routers
     for (vector<BasicRouter*>::const_iterator i = 
              m_topology_ptr->params()->routers.begin();
@@ -62,32 +56,6 @@ GarnetNetwork_d::GarnetNetwork_d(const Params *p)
         Router_d* router = safe_cast<Router_d*>(*i);
         m_router_ptr_vector.push_back(router);
     }
-
-    // Queues that are getting messages from protocol
-    m_toNetQueues.resize(m_nodes);
-
-    // Queues that are feeding the protocol
-    m_fromNetQueues.resize(m_nodes);
-    m_in_use.resize(m_virtual_networks);
-    m_ordered.resize(m_virtual_networks);
-    for (int i = 0; i < m_virtual_networks; i++) {
-        m_in_use[i] = false;
-        m_ordered[i] = false;
-    }
-
-    for (int node = 0; node < m_nodes; node++) {
-        // Setting how many vitual message buffers
-        // will there be per Network Queue
-        m_toNetQueues[node].resize(m_virtual_networks);
-        m_fromNetQueues[node].resize(m_virtual_networks);
-
-        // Instantiating the Message Buffers
-        // that interact with the coherence protocol
-        for (int j = 0; j < m_virtual_networks; j++) {
-            m_toNetQueues[node][j] = new MessageBuffer();
-            m_fromNetQueues[node][j] = new MessageBuffer();
-        }
-    }
 }
 
 void
index 7c6e5f8e1caac7e1b78053cf59e83d3ce000b2b2..b4e264be1b8d4c589b375d06ad846bd11f1c1e43 100644 (file)
@@ -125,24 +125,11 @@ class GarnetNetwork_d : public BaseGarnetNetwork
     GarnetNetwork_d& operator=(const GarnetNetwork_d& obj);
 
     std::vector<VNET_type > m_vnet_type;
-    // int m_virtual_networks;
-    // int m_nodes;
-    int m_flits_received, m_flits_injected;
-    double m_network_latency, m_queueing_latency;
-
-    std::vector<bool> m_in_use;
-    std::vector<bool> m_ordered;
-
-    std::vector<std::vector<MessageBuffer*> > m_toNetQueues;
-    std::vector<std::vector<MessageBuffer*> > m_fromNetQueues;
 
     std::vector<Router_d *> m_router_ptr_vector;   // All Routers in Network
     std::vector<NetworkLink_d *> m_link_ptr_vector; // All links in the network
     std::vector<CreditLink_d *> m_creditlink_ptr_vector; // All links in net
     std::vector<NetworkInterface_d *> m_ni_ptr_vector;   // All NI's in Network
-
-    //      Topology* m_topology_ptr;
-    Time m_ruby_start;
 };
 
 inline std::ostream&
index 551e83fa35f3793292e2d500c0f9de65d1be36b4..d403633a802d704197b1c678ecde7c44430d5d68 100644 (file)
@@ -50,12 +50,6 @@ GarnetNetwork::GarnetNetwork(const Params *p)
 {
     m_buffer_size = p->buffer_size;
 
-    m_ruby_start = 0;
-    m_flits_received = 0;
-    m_flits_injected = 0;
-    m_network_latency = 0.0;
-    m_queueing_latency = 0.0;
-
     // record the routers
     for (vector<BasicRouter*>::const_iterator i = 
              m_topology_ptr->params()->routers.begin();
@@ -63,34 +57,6 @@ GarnetNetwork::GarnetNetwork(const Params *p)
         Router* router = safe_cast<Router*>(*i);
         m_router_ptr_vector.push_back(router);
     }
-
-    // Allocate to and from queues
-
-    // Queues that are getting messages from protocol
-    m_toNetQueues.resize(m_nodes);
-
-    // Queues that are feeding the protocol
-    m_fromNetQueues.resize(m_nodes);
-
-    m_in_use.resize(m_virtual_networks);
-    m_ordered.resize(m_virtual_networks);
-    for (int i = 0; i < m_virtual_networks; i++) {
-        m_in_use[i] = false;
-        m_ordered[i] = false;
-    }
-
-    for (int node = 0; node < m_nodes; node++) {
-        //Setting number of virtual message buffers per Network Queue
-        m_toNetQueues[node].resize(m_virtual_networks);
-        m_fromNetQueues[node].resize(m_virtual_networks);
-
-        // Instantiating the Message Buffers that
-        // interact with the coherence protocol
-        for (int j = 0; j < m_virtual_networks; j++) {
-            m_toNetQueues[node][j] = new MessageBuffer();
-            m_fromNetQueues[node][j] = new MessageBuffer();
-        }
-    }
 }
 
 void
index 9437390416cadee1bee5e4ade0a5c22bdfbbeea3..a19e167a80d74776b11e530fffe4eeb03b40b3bd 100644 (file)
@@ -110,20 +110,10 @@ class GarnetNetwork : public BaseGarnetNetwork
     GarnetNetwork(const GarnetNetwork& obj);
     GarnetNetwork& operator=(const GarnetNetwork& obj);
 
-    int m_flits_received, m_flits_injected;
-    double m_network_latency, m_queueing_latency;
-
-    std::vector<bool> m_in_use;
-    std::vector<bool> m_ordered;
-
-    std::vector<std::vector<MessageBuffer*> > m_toNetQueues;
-    std::vector<std::vector<MessageBuffer*> > m_fromNetQueues;
-
     std::vector<Router *> m_router_ptr_vector;   // All Routers in Network
     std::vector<NetworkLink *> m_link_ptr_vector; // All links in network
     std::vector<NetworkInterface *> m_ni_ptr_vector; // All NI's in Network
 
-    Time m_ruby_start;
     int m_buffer_size;
 };