changeset 2c094ad4dc70 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=2c094ad4dc70
description:
        ruby: garnet: fixed: implement functional access

diffstat:

 configs/ruby/Ruby.py                                             |   4 +-
 src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc    |  20 
++++++++++
 src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh    |   4 ++
 src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc        |  11 +++++
 src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh        |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc |  12 ++++++
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc      |   6 +++
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh      |   8 ++--
 src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc       |   6 +++
 src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh       |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc           |  17 ++++++++
 src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh           |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc           |  12 ++++++
 src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh           |  15 ++-----
 src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc   |   6 +++
 src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh   |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc       |  14 +++++++
 src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh       |   2 +
 src/mem/ruby/network/garnet/fixed-pipeline/flit_d.cc             |   7 +++
 src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh             |   8 +--
 21 files changed, 141 insertions(+), 21 deletions(-)

diffs (truncated from 355 to 300 lines):

diff -r 6c4d6fdf3644 -r 2c094ad4dc70 configs/ruby/Ruby.py
--- a/configs/ruby/Ruby.py      Mon Mar 04 23:33:47 2013 -0500
+++ b/configs/ruby/Ruby.py      Wed Mar 06 21:53:16 2013 -0600
@@ -53,8 +53,8 @@
                  help="check src/mem/ruby/network/topologies for complete set")
     parser.add_option("--mesh-rows", type="int", default=1,
                       help="the number of rows in the mesh topology")
-    parser.add_option("--garnet-network", type="string", default=None,
-                      help="'fixed'|'flexible'")
+    parser.add_option("--garnet-network", type="choice",
+                      choices=['fixed', 'flexible'], help="'fixed'|'flexible'")
     parser.add_option("--network-fault-model", action="store_true", 
default=False,
                       help="enable network fault model: see 
src/mem/ruby/network/fault_model/")
 
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc     Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc     Wed Mar 
06 21:53:16 2013 -0600
@@ -346,3 +346,23 @@
 {
     return new GarnetNetwork_d(this);
 }
+
+uint32_t
+GarnetNetwork_d::functionalWrite(Packet *pkt)
+{
+    uint32_t num_functional_writes = 0;
+
+    for (unsigned int i = 0; i < m_router_ptr_vector.size(); i++) {
+        num_functional_writes += m_router_ptr_vector[i]->functionalWrite(pkt);
+    }
+
+    for (unsigned int i = 0; i < m_ni_ptr_vector.size(); ++i) {
+        num_functional_writes += m_ni_ptr_vector[i]->functionalWrite(pkt);
+    }
+
+    for (unsigned int i = 0; i < m_link_ptr_vector.size(); ++i) {
+        num_functional_writes += m_link_ptr_vector[i]->functionalWrite(pkt);
+    }
+
+    return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh     Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh     Wed Mar 
06 21:53:16 2013 -0600
@@ -90,6 +90,10 @@
                           const NetDest& routing_table_entry,
                           bool isReconfiguration);
 
+    //! Function for performing a functional write. The return value
+    //! indicates the number of messages that were written.
+    uint32_t functionalWrite(Packet *pkt);
+
   private:
     void checkNetworkAllocation(NodeID id, bool ordered, int network_num,
                                 std::string vnet_type);
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Wed Mar 06 
21:53:16 2013 -0600
@@ -94,3 +94,14 @@
         m_num_buffer_reads[vnet]++;
     }
 }
+
+uint32_t
+InputUnit_d::functionalWrite(Packet *pkt)
+{
+    uint32_t num_functional_writes = 0;
+    for (int i=0; i < m_num_vcs; i++) {
+        num_functional_writes += m_vcs[i]->functionalWrite(pkt);
+    }
+
+    return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh Wed Mar 06 
21:53:16 2013 -0600
@@ -173,6 +173,8 @@
         return m_num_buffer_writes[vnet];
     }
 
+    uint32_t functionalWrite(Packet *pkt);
+
   private:
     int m_id;
     int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  Wed Mar 
06 21:53:16 2013 -0600
@@ -372,3 +372,15 @@
 {
     out << "[Network Interface]";
 }
+
+uint32_t
+NetworkInterface_d::functionalWrite(Packet *pkt)
+{
+    uint32_t num_functional_writes = 0;
+    for (unsigned int i  = 0; i < m_num_vcs; ++i) {
+        num_functional_writes += m_ni_buffers[i]->functionalWrite(pkt);
+    }
+
+    num_functional_writes += outSrcQueue->functionalWrite(pkt);
+    return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh  Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh  Wed Mar 
06 21:53:16 2013 -0600
@@ -63,6 +63,8 @@
     void print(std::ostream& out) const;
     int get_vnet(int vc);
 
+    uint32_t functionalWrite(Packet *);
+
   private:
     GarnetNetwork_d *m_net_ptr;
     int m_virtual_networks, m_num_vcs, m_vc_per_vnet;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc       Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc       Wed Mar 
06 21:53:16 2013 -0600
@@ -99,3 +99,9 @@
 {
     return new CreditLink_d(this);
 }
+
+uint32_t
+NetworkLink_d::functionalWrite(Packet *pkt)
+{
+    return linkBuffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh       Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh       Wed Mar 
06 21:53:16 2013 -0600
@@ -64,12 +64,12 @@
 
     inline bool isReady(Cycles curTime)
     { return linkBuffer->isReady(curTime); }
+
     inline flit_d* peekLink()       { return linkBuffer->peekTopFlit(); }
     inline flit_d* consumeLink()    { return linkBuffer->getTopFlit(); }
-    void init_net_ptr(GarnetNetwork_d* net_ptr)
-    {
-        m_net_ptr = net_ptr;
-    }
+
+    void init_net_ptr(GarnetNetwork_d* net_ptr) { m_net_ptr = net_ptr; }
+    uint32_t functionalWrite(Packet *);
 
   protected:
     int m_id;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc        Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc        Wed Mar 
06 21:53:16 2013 -0600
@@ -108,3 +108,9 @@
     m_router->update_incredit(in_port, in_vc,
                               m_outvc_state[vc]->get_credit_count());
 }
+
+uint32_t
+OutputUnit_d::functionalWrite(Packet *pkt)
+{
+    return m_out_buffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh        Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh        Wed Mar 
06 21:53:16 2013 -0600
@@ -87,6 +87,8 @@
         m_out_link->scheduleEvent(Cycles(1));
     }
 
+    uint32_t functionalWrite(Packet *pkt);
+
   private:
     int m_id;
     int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc    Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc    Wed Mar 06 
21:53:16 2013 -0600
@@ -204,6 +204,23 @@
     out << aggregate_fault_prob << endl;
 }
 
+uint32_t
+Router_d::functionalWrite(Packet *pkt)
+{
+    uint32_t num_functional_writes = 0;
+    num_functional_writes += m_switch->functionalWrite(pkt);
+
+    for (uint32_t i = 0; i < m_input_unit.size(); i++) {
+        num_functional_writes += m_input_unit[i]->functionalWrite(pkt);
+    }
+
+    for (uint32_t i = 0; i < m_output_unit.size(); i++) {
+        num_functional_writes += m_output_unit[i]->functionalWrite(pkt);
+    }
+
+    return num_functional_writes;
+}
+
 Router_d *
 GarnetRouter_dParams::create()
 {
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh    Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh    Wed Mar 06 
21:53:16 2013 -0600
@@ -105,6 +105,8 @@
                                                       aggregate_fault_prob);
     }
 
+    uint32_t functionalWrite(Packet *);
+
   private:
     int m_virtual_networks, m_num_vcs, m_vc_per_vnet;
     GarnetNetwork_d *m_network_ptr;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc    Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc    Wed Mar 06 
21:53:16 2013 -0600
@@ -95,3 +95,15 @@
         }
     }
 }
+
+uint32_t
+Switch_d::functionalWrite(Packet *pkt)
+{
+   uint32_t num_functional_writes = 0;
+
+   for (uint32_t i = 0; i < m_switch_buffer.size(); ++i) {
+       num_functional_writes += m_switch_buffer[i]->functionalWrite(pkt);
+   }
+
+   return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh    Mon Mar 04 
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh    Wed Mar 06 
21:53:16 2013 -0600
@@ -51,17 +51,12 @@
     void check_for_wakeup();
     void print(std::ostream& out) const {};
 
-    inline void
-    update_sw_winner(int inport, flit_d *t_flit)
-    {
-        m_switch_buffer[inport]->insert(t_flit);
-    }
+    inline void update_sw_winner(int inport, flit_d *t_flit)
+    { m_switch_buffer[inport]->insert(t_flit); }
 
-    inline double
-    get_crossbar_count()
-    {
-        return m_crossbar_activity;
-    }
+    inline double get_crossbar_count() { return m_crossbar_activity; }
+
+    uint32_t functionalWrite(Packet *pkt);
 
   private:
     int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc    Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc    Wed Mar 
06 21:53:16 2013 -0600
@@ -85,3 +85,9 @@
     }
     return false;
 }
+
+uint32_t
+VirtualChannel_d::functionalWrite(Packet *pkt)
+{
+    return m_input_buffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh    Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh    Wed Mar 
06 21:53:16 2013 -0600
@@ -87,6 +87,8 @@
         return m_input_buffer->getTopFlit();
     }
 
+    uint32_t functionalWrite(Packet *pkt);
+
   private:
     int m_id;
     flitBuffer_d *m_input_buffer;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 
src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc        Mon Mar 
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc        Wed Mar 
06 21:53:16 2013 -0600
@@ -85,3 +85,17 @@
 {
     max_size = maximum;
 }
+
+uint32_t
+flitBuffer_d::functionalWrite(Packet *pkt)
+{
+    uint32_t num_functional_writes = 0;
+
+    for (unsigned int i = 0; i < m_buffer.size(); ++i) {
+        if (m_buffer[i]->functionalWrite(pkt)) {
+            num_functional_writes++;
+        }
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to